请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
17. STM32H7之GPIO的HAL库API
! O6 H: H& H1 D: \. s我这里简单的总结一下GPIO的APi函数:  d" K: A  H( t' Z* c
HAL_GPIO_Init:此函数用于初始化GPIO
& \4 Y; }  Q: z$ `8 a先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化# `) Q8 W) V7 Z8 X% M$ g
HAL_GPIO_DeInit:此函数用于复位IO到初始化状态( n4 U2 T3 Y1 O. Z! k! i6 |( Z
HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。0 j. m* m# [: g0 _( p3 X6 i$ Y' n
HAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。
6 X( r( S8 U$ G  M+ pHAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。
8 E4 c# c& b9 @2 h6 E$ d& kHAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。7 N+ c* U* `8 z8 h8 h6 Y2 M
注意事项:
  p) B( r; e9 @此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。
# j5 {5 y* ?/ \6 {7 D6 i9 O一旦锁住后,就不能再修改,只有复位后才可以重新配置。7 y! L5 c% H1 L2 Q3 H; [' Z
! s1 I" b% Z& U3 y
如何使用HAL库的GPIO驱动
* P; L& @/ g- X使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):8 N* p( K2 O& R6 E8 i

) r) R8 y' ~, e+ F+ A2 Q& v- b( g第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。
6 }! Y. v. j; j5 Z% d
8 @+ S# k( j2 {% @第2步:通过函数HAL_GPIO_Init()配置GPIO。5 Y$ H' E! ^$ [. a5 }
/ w: G9 {( G/ [  {$ x, P6 Z
(1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。  A+ h$ Y) ]6 k5 `- N1 {8 K
& V; l* g7 m0 r1 B+ C( G& n
(2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。
- _: Y6 A" J  W# O4 z2 i
* g1 u. O! @3 K6 N7 Y, ](3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。
% ^2 y4 _& B! b6 k& k$ T8 Q0 ], H4 `0 h& m( X6 q
(4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。
/ [+ X  k$ B" \1 u! Y1 j( W1 _# ?3 [
/ a. @$ c) d, L) u( ?(5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。( O0 B. y* f9 w4 U
7 v$ B4 W- r$ g- U$ ]9 ?7 [- \
(6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。
7 P; l) _0 C& w  J! D
& g! K& ~6 J, X+ b: J* d* }% {第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。
- T7 O% _2 D; y" |
% s. I% K& D* T+ V第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。
  D1 v2 M) e! v- W) i$ \, G- K
5 X0 F& m( Z2 R" c% c, r) t; v第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。
: w# f' P+ P0 W! _2 Z
1 M8 W8 E" b/ H/ y4 |8 G另外注意下面三个问题:+ H7 m; T  D- M" ]) q
1 |+ k( A7 M" q% J
系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。
% Q# M; n0 t; e5 ~/ M1 L* }关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。
) W. w& B2 N6 ?4 b7 y) y关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。
  R. l* w  j4 s7 T4 g
) i5 b* c5 a! Y' v- v" V5 E# A& b  \. V/ l0 l3 ^. K$ a
附上简单的 跑马灯程序做例子
; O9 q- `6 W* f' r) m
20200109102255425.png
; @  c8 K* h7 s! I' p
* U" ?' m; q0 D" m( G5 Z, V
; B2 h5 k  c7 c. [
; u* |' s/ e5 Y" J2 V

# V0 N, O- U/ h" I& c; M
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版