
17. STM32H7之GPIO的HAL库API n' J$ O4 O% u7 ~: ]% _# C 我这里简单的总结一下GPIO的APi函数: HAL_GPIO_Init:此函数用于初始化GPIO& [; U, N' L* }5 g 先定义,配置结构体GPIO_InitTypeDef,再调用此函数初始化 HAL_GPIO_DeInit:此函数用于复位IO到初始化状态& s$ t2 F) n( e HAL_GPIO_ReadPin:此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。 HAL_GPIO_WritePin:此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。 HAL_GPIO_TogglePin:此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。2 U& C8 i0 u) R m" Z$ {' I$ i HAL_GPIO_LockPin:此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。 注意事项: 此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。4 `4 r; {+ U) |/ E7 m 一旦锁住后,就不能再修改,只有复位后才可以重新配置。 : G/ _, a1 n% z3 W2 k* B 如何使用HAL库的GPIO驱动 使用方法由HAL库提供(本章17.3.1小节提供的例子就是这种方式): 第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。, M, P8 ~+ }9 U( F5 I% A+ O# I D 4 U( Q; \# \% F0 | 第2步:通过函数HAL_GPIO_Init()配置GPIO。9 L( k' L, B$ |2 Z+ b3 l ' s- {. H7 \: k6 ?- U (1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。 (2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。2 N C! b6 j! q: O- w (3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。 0 b) D8 f4 m" x (4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。 , _* q0 P8 c f, p- a6 R" n: h (5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。 (6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。8 S9 j- l6 r* _7 n1 x- v8 K# v 第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。 第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。- b0 ~! t1 Z2 c" b0 A 第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。, y9 u, s3 l% ~$ S+ l1 [ 6 q; b( d. `) b, V0 G 另外注意下面三个问题: 系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。6 `; I% K* Y- T2 q$ ?% C3 G, H! O 关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。/ a9 J( g% Z) w6 w 关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。 5 o, Z* w; }4 }4 `* F: q- g 附上简单的 跑马灯程序做例子 ![]() ' y6 D. x3 H' \, Z ) ?3 F/ f6 S5 P |
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法
【H745I GUI】1.GreenHouse 灯光控制
【Wio Lite AI视觉开发套件】+移植TensorFlow Lite
STM32H745I-DISCO脉冲宽度调制(PWM)
STM32H745I-DISCO串口通信,输入输出
拷打cubemx【002】——自定义还需基于芯片的工程
STM32硬件结构学习
STM32中BOOT的作用
STM32H7的TCM,SRAM等五块内存基础知识