17. STM32H7之GPIO的HAL库API 我这里简单的总结一下GPIO的APi函数: HAL_GPIO_Init:此函数用于初始化GPIO/ \, j& i! @' i! E) F 先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化( x8 a y0 ~" J, `# G" L HAL_GPIO_DeInit:此函数用于复位IO到初始化状态 HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。% Q, \0 P J1 J' o L; h 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。. r/ ^9 q0 S2 H8 m 注意事项: 此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。 一旦锁住后,就不能再修改,只有复位后才可以重新配置。# ?( s% X2 {5 B9 Y2 C: ~ 如何使用HAL库的GPIO驱动) g4 S6 j6 t8 f* i- O+ E 使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):/ F& U! @" j/ C `) I$ D 第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。 第2步:通过函数HAL_GPIO_Init()配置GPIO。 % e9 m) w0 s9 X6 z (1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。 (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 \ (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 (6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。 第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。 1 B: _' l4 V8 B& C" G 第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。 ! 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 另外注意下面三个问题: 系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。 关闭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* { 附上简单的 跑马灯程序做例子4 P3 E% ^/ u7 N7 I0 W1 o1 S; l' [ 9 }% k" U4 F" u3 h! I - t8 u* B8 q) a |
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【Wio Lite AI视觉开发套件】+cube.ai与食物识别
【STM32H7S78-DK】汽车仪表系统
【STM32H7S78-DK】基于 rtthread 适配 lcd 驱动移植 lvgl
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
【STM32H7S78-DK】rtthread 增加 psram 内存管理
【STM32H7S78-DK】开箱与rtthread工程初体验
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题