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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
17. STM32H7之GPIO的HAL库API
2 S' p) O6 D8 M0 n2 H8 V, w我这里简单的总结一下GPIO的APi函数:+ x4 Q+ p2 ?1 U- @+ y; U9 w
HAL_GPIO_Init:此函数用于初始化GPIO
/ h: d* W; V$ d7 h4 e先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化7 a! h/ u* k( r- y
HAL_GPIO_DeInit:此函数用于复位IO到初始化状态
) l5 {) D1 Y3 S; B; nHAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。* j) Y& F$ i4 G4 w4 r9 \
HAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。& r* I( O8 G% v0 j
HAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。; T, G" T% D9 M9 ]( y5 m
HAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。3 x& n) P" V6 y
注意事项:" J* ~2 D% a& Y* b$ |% K) @
此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。
; m9 T5 ]+ d& L3 d; v% B5 Q7 j一旦锁住后,就不能再修改,只有复位后才可以重新配置。
: m5 @: p9 ?1 L, k# b: h1 f* _) f3 \
如何使用HAL库的GPIO驱动( C7 B6 ?. t% ?  ^* w3 J1 y2 t; W
使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):( |) F% m0 ~; e
4 X, Q3 L* F# f' J: @6 @
第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。
" A+ }! B; r! \0 W  u) E( V, @/ m- }0 Y+ A. i) X3 i
第2步:通过函数HAL_GPIO_Init()配置GPIO。/ v6 E' _6 p9 Z1 [3 V$ f

3 [+ y" j6 t) ?0 R8 c( P3 o# D6 p(1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。) K6 s- W5 g! T; [' c8 T
' m7 ~+ k# _0 i" V) y! K
(2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。) G9 H6 |) D. K7 G

$ A/ g6 N$ p/ \7 {(3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。% C- p4 C; j( m2 e$ V
9 B7 a3 L. J, ]$ y. |
(4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。, B$ E' C, j; I5 ^
5 F) B- d( ~$ l0 G+ F
(5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。
* y' @8 T9 S" p+ O
6 T* K7 ^$ ]9 u4 L$ G( s(6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。, k1 b9 d3 m! b

( |, M. H! p# r$ L, ^  \0 u第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。
# y$ K! ]1 B6 p! _0 Q" }) g4 e+ r: r: ]
第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。
6 t% Q& w+ E  P2 ~/ F
3 A3 a; q! o8 i4 z& Q, J第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。* e5 P. ^; ?, D1 X2 T, J! _- N' i
' }4 Z0 e$ U  O# G$ A4 x
另外注意下面三个问题:. \# ~7 s  n, y( f0 Y! [. {

/ H/ o* _, M0 k  l系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。# k9 d) l& j# p$ S( k5 A
关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。+ d# h  V* d$ _. |* t
关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。. }9 x+ y- x. n  P- q- r2 p

! X+ N; {# {- ~, m( Y9 o/ n
1 `. S2 |& _) O: k( ~附上简单的 跑马灯程序做例子8 V9 A; @# ^% L) h' @3 n# N) b0 K
20200109102255425.png
8 _$ Y( f& }6 C1 e* C7 R4 |
9 R4 ^7 d. g2 f9 e* C
, K/ H! Q3 w, a% `0 B
  K# N; T4 [' \2 u
% B1 ^6 W& v1 m: r
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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