你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32H7学习继续(STM32H7系列5)第十七章比较实用,以后写程序的时候会用到

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
17. STM32H7之GPIO的HAL库API% ]. ~+ O. C2 X4 g6 @" e
我这里简单的总结一下GPIO的APi函数:
+ k3 B; F1 [, N& o. l8 P5 t& a  }HAL_GPIO_Init:此函数用于初始化GPIO
/ l, B$ @# `" V先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化
( X4 {6 N' d( b, eHAL_GPIO_DeInit:此函数用于复位IO到初始化状态8 {5 J# T# A7 [4 g
HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。1 r2 T. L7 I3 d- W, {$ F. S5 x
HAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。5 D' |  w6 _- r9 Q) N; ~, D" C
HAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。
: ~- Q* v* o2 M9 D2 v  a8 LHAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。
" A' @: q9 y5 T8 V5 t5 `# H注意事项:
$ K8 v/ T0 Q. w# t5 Q& {' m6 ]此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。' F& C7 h7 b  n5 ?# s0 e6 X
一旦锁住后,就不能再修改,只有复位后才可以重新配置。
% z% c: O, w1 t1 _2 P0 d! f
, @# Y, D# s/ I( P9 ^! n; e如何使用HAL库的GPIO驱动
) G* ^. B% z3 D7 E/ i  T2 ^使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):
' E% M% h0 _9 Q$ [
4 q& g3 {8 \" K; g& T第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。$ F+ j: ]  u5 J
6 p. c& v$ h/ {) N) i
第2步:通过函数HAL_GPIO_Init()配置GPIO。% f0 J, H) g2 j5 G1 w# P4 w! S

$ V$ N+ R+ o4 @- L, s9 U1 n(1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。
4 M5 f, h3 V7 F$ C  Y5 Q) D! Q9 B+ U: l6 w9 c& z! h) a
(2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。
' h; w; i) j$ V+ d( R( }( f. g' {) `0 @! w: O. k1 z: c+ s
(3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。1 }- X2 m. \% q; y+ N

( \" o2 Q: F, P8 G/ m(4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。
' t( q* G! s, D+ @2 ?+ G: N/ a0 [) A6 H: _/ A. q# Z2 b$ g
(5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。7 |+ W0 P# [! K! Q" e

+ f; L% s3 J/ y5 y: e' r(6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。* o& T' E$ w6 a( x( `

' _4 @1 K+ }' T3 T* R. M1 c% e第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。' A2 S5 w9 J' o3 B/ m- v1 H* T% o* r
3 z' k- D8 m9 J
第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。: K5 l8 y, ]8 n1 x& V

$ O8 `; s' E& M9 W/ }0 ~2 V( b; g2 o第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。
' I' R7 j" {' q8 i; H: u$ e# k" ~! C5 X
另外注意下面三个问题:& Y+ a$ U& k) ]% ?

3 Y; i6 }& v  a" m系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。' L+ l# j4 T) M4 f
关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。
7 V& O5 ]' r2 K1 p. X关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。
: ^6 T' m% n0 o" i( p" u2 k9 w2 C) O
8 ^$ j; R* j7 s" k
2 V8 @' ^, U+ l# p0 v/ P: y附上简单的 跑马灯程序做例子
/ z# N9 l3 b! H1 K; N
20200109102255425.png

& U/ n* Q/ |$ R9 y2 @3 V1 ^6 \/ ^* M) q% F- }

6 R2 r, f( m, b7 d, o8 O/ i0 T( M$ A4 R9 n( q

2 d4 [  e# J( Y  x
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版