17. STM32H7之GPIO的HAL库API 我这里简单的总结一下GPIO的APi函数: d" K: A H( t' Z* c HAL_GPIO_Init:此函数用于初始化GPIO 先定义,配置结构体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寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。 HAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。 HAL_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 注意事项: 此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。 一旦锁住后,就不能再修改,只有复位后才可以重新配置。7 y! L5 c% H1 L2 Q3 H; [' Z ! s1 I" b% Z& U3 y 如何使用HAL库的GPIO驱动 使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):8 N* p( K2 O& R6 E8 i 第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。 第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配置上拉、下拉电阻。 (3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。 $ T8 Q0 ], H4 `0 h& m( X6 q (4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。 (5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。( O0 B. y* f9 w4 U 7 v$ B4 W- r$ g- U$ ]9 ?7 [- \ (6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。 第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。 第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。 第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。 另外注意下面三个问题:+ H7 m; T D- M" ]) q 1 |+ k( A7 M" q% J 系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。 关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。 关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。 # A& b \. V/ l0 l3 ^. K$ a 附上简单的 跑马灯程序做例子 * U" ?' m; q0 D" m( G5 Z, V ; B2 h5 k c7 c. [ ; u* |' s/ e5 Y" J2 V |
【经验分享】STM32_H7_ADC
STM32H7R/S高性能MCU:安全性,大存储和优异图显赋能更多应用创新
Stm32H7XX GCC下分散加载实现
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
DIY-STM32H750核心板
[nucleo-H7A3ZI-Q]1-点亮一个皮皮灯
DIY-STM32H743核心板
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
1月10日有奖直播 | 基于STM32 的CODESYS智能自动化解决方案
STM32的CAN FD位定时设置注意事项