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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
17. STM32H7之GPIO的HAL库API  n' J$ O4 O% u7 ~: ]% _# C
我这里简单的总结一下GPIO的APi函数:
7 o( |/ r$ Y5 M3 G2 g# i3 iHAL_GPIO_Init:此函数用于初始化GPIO& [; U, N' L* }5 g
先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化
/ i# D4 p6 v) I/ GHAL_GPIO_DeInit:此函数用于复位IO到初始化状态& s$ t2 F) n( e
HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。
! ~) Q2 Y' ^. X" d& @# l' eHAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。
8 W$ k0 d9 x0 e4 L5 uHAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。2 U& C8 i0 u) R  m" Z$ {' I$ i
HAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。
. {; v$ ^/ W. X: }* o8 E注意事项:
5 C- |$ K) I4 ~9 B; Z) ^; Z, E此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。4 `4 r; {+ U) |/ E7 m
一旦锁住后,就不能再修改,只有复位后才可以重新配置。
3 e1 {4 x" L4 e( {/ I$ x+ g: G/ _, a1 n% z3 W2 k* B
如何使用HAL库的GPIO驱动
! y  x5 S4 Q0 d6 q1 o使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):
! O+ S. b8 t+ t2 F5 c: y
3 B* f+ N# F4 B第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。, M, P8 ~+ }9 U( F5 I% A+ O# I  D
4 U( Q; \# \% F0 |
第2步:通过函数HAL_GPIO_Init()配置GPIO。9 L( k' L, B$ |2 Z+ b3 l
' s- {. H7 \: k6 ?- U
(1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。
5 Q; Z4 O8 q, c/ u6 P
5 ?& Q& J3 E0 y( R5 S1 I8 T(2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。2 N  C! b6 j! q: O- w

6 V, j9 H/ V5 f! _(3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。
1 a. G4 X1 B8 E0 b) D8 f4 m" x
(4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。
! B. O5 o5 T$ q& z, S, _* q0 P8 c  f, p- a6 R" n: h
(5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。
; X* a  t' m9 B; C1 ?
1 ?0 c+ D- [3 h3 h7 H5 m% e(6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。8 S9 j- l6 r* _7 n1 x- v8 K# v

/ \6 f* f1 a* w) V) J第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。
9 @6 l, T: j" n
+ ?5 S' T- k8 R# l第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。- b0 ~! t1 Z2 c" b0 A

, w% f. e$ k5 q# H第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。, y9 u, s3 l% ~$ S+ l1 [
6 q; b( d. `) b, V0 G
另外注意下面三个问题:
% [# x& Y# c% P6 W7 V, U1 J
1 i$ z- W0 ]9 U2 s系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。6 `; I% K* Y- T2 q$ ?% C3 G, H! O
关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。/ a9 J( g% Z) w6 w
关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。
* G2 i# X1 E* E, E5 o, Z* w; }4 }4 `* F: q- g

1 ?+ }  j/ x4 y' C附上简单的 跑马灯程序做例子
' O4 W# n( p: @9 y. @3 r8 q4 I
20200109102255425.png

. K: ^: N6 f# ^, I3 V1 o$ {
+ k" j; }+ \! `# w4 s& a- I
1 N! p. y+ a+ ]2 G! ^( `; B) S$ A, w$ B' y6 D. x3 H' \, Z
) ?3 F/ f6 S5 P
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版