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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
17. STM32H7之GPIO的HAL库API
! j# ~# n+ }& t! O# S$ U我这里简单的总结一下GPIO的APi函数:
. o! @* T6 l! }* [! l6 rHAL_GPIO_Init:此函数用于初始化GPIO/ \, j& i! @' i! E) F
先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化( x8 a  y0 ~" J, `# G" L
HAL_GPIO_DeInit:此函数用于复位IO到初始化状态
; |* q, C' m0 Z3 KHAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。% Q, \0 P  J1 J' o  L; h
HAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。
" d; W) c( Z  M8 W9 |HAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。
# t" I# T) `2 C% N8 KHAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。. r/ ^9 q0 S2 H8 m
注意事项:
* j; O, b  K9 q, z6 D- U) C4 m! b% q, b此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。
. E* D, x0 e" J% {+ S+ E# ^% T4 n2 S一旦锁住后,就不能再修改,只有复位后才可以重新配置。# ?( s% X2 {5 B9 Y2 C: ~

, `2 t2 G( W. p7 \; k# j" S* h) e如何使用HAL库的GPIO驱动) g4 S6 j6 t8 f* i- O+ E
使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):/ F& U! @" j/ C  `) I$ D

, j, h* r; z. L  Q* S第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。
% O6 J/ l/ ?, N" {: b0 E6 L5 k
; L+ x  C/ ]8 T/ I0 T4 z第2步:通过函数HAL_GPIO_Init()配置GPIO。
' v0 e! V- s& {3 h6 ~% e9 m) w0 s9 X6 z
(1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。
, z1 p; \3 |  |
0 w4 J/ h$ H' n(2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。" p; D  d! W+ J, X* C0 v0 F
: \; ?& f" F' _/ L* R2 u: {, m$ I! V2 F
(3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。# m$ J7 i6 O% k& Y9 F8 \

; t2 \% F$ {2 R; N(4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。- ^6 S& S- @0 P( x  j4 q5 [" Y$ T
9 M! J: A: n2 b0 Y$ H( ?% x" k
(5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。) F* f$ O0 n6 y9 ^/ a/ {0 m6 U

0 ~! Y* ?: r. `- z4 l6 T(6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。
; c) @$ }- a! @- [8 w
- R/ A) ?9 f4 H. g$ T第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。
3 L$ L: ]- |+ J! Q9 a1 C7 {1 B: _' l4 V8 B& C" G
第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。
+ R6 W  F$ M" B. U, W! q: T* N% X2 P! h2 ?
第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。* H5 ^. d$ n# i% e0 _) {; D
: f. O9 p7 J  a- [, P
另外注意下面三个问题:
# b; D. ~  v, h: S" I- p
2 \8 @8 F% m" u; L- x系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。
! a) j6 b; H6 D5 t3 B1 ^- ?7 c关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。) @  ^5 x" H0 k
关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。5 q3 _" ?! c' e* {

9 Q4 D6 `: G8 M/ N" F
8 e! @2 C( x4 x9 J- i. d$ u' K; b! N附上简单的 跑马灯程序做例子4 P3 E% ^/ u7 N7 I0 W1 o1 S; l' [
20200109102255425.png
9 J# t0 O9 n7 O

' S! W; i+ N- z7 x: E4 k9 }% k" U4 F" u3 h! I

9 j/ k4 n7 Z+ ]9 R2 k8 K) {, c; I- t8 u* B8 q) a
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版