17. STM32H7之GPIO的HAL库API8 e0 w$ z1 h7 D( B8 T, ~ 我这里简单的总结一下GPIO的APi函数: HAL_GPIO_Init:此函数用于初始化GPIO 先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化/ m8 b0 }3 f+ U, e4 F0 O. n0 B HAL_GPIO_DeInit:此函数用于复位IO到初始化状态 HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。8 Q: A S: z0 X; b5 z1 ?- ~( s, @5 { HAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。 HAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。0 G4 G, S9 L0 \4 G, X& ` HAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。3 _5 g: c7 {/ f- l+ L2 j8 s6 P 注意事项: 此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。1 r; v& Z$ Y9 P5 k2 F8 n& w# P' _( K 一旦锁住后,就不能再修改,只有复位后才可以重新配置。9 q# D! X! \; N) {! g 如何使用HAL库的GPIO驱动 使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式):0 a; J# r# P! q* T : @6 ]" `7 w1 @2 f 第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。 # T5 P5 o/ ~0 e$ m; {0 w7 i- j3 U% ` 第2步:通过函数HAL_GPIO_Init()配置GPIO。) a6 {% L9 D8 M) ~6 U, d& K1 W0 ] & z8 R9 y) [& P1 A9 @0 [5 p (1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。 (2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。 ; q5 P) U, Y+ i (3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。 (4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。 (5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。+ M8 L" g6 z; y# W+ c$ L 8 S; a) D# J. a (6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。; a) p5 u( p$ _$ G( Y/ ]8 ]* i- r# k ! O- p9 x! @6 q 第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。0 i5 j6 ]6 c8 y- e ; }# N o, ? e1 u" a/ Y/ Z) f( b 第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。# m; T8 L" X, t- N% Z- c! j0 R 第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。6 A! f* [5 c$ ^5 o5 h 另外注意下面三个问题:: C$ F8 k4 A. w 系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。 关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。. ]1 f( t; E! ]7 U: W 关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。/ X* P+ {' z8 U+ v$ L # u. Y0 w, D G: C 附上简单的 跑马灯程序做例子6 ?8 @3 U# G6 c+ C/ G! x4 | 0 z$ D X- e6 F . J/ ~: d+ V1 O1 {- k7 i 8 Q U4 o6 C4 e' n$ S8 j5 t5 _6 L |
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重定向实现方法及常见问题