STM32的HAL库开发系列 - GPIO基本函数
STM32的GPIO(General Purpose Input/Output)是STM32微控制器的一种重要外设,它具有通用输入输出功能。STM32的GPIO可以用来控制外部设备的电平,如LED灯、按键、蜂鸣器等,也可以用来读取外部设备的电平,如温度传感器、光敏电阻等。
STM32的GPIO的配置和使用需要用到STM32的底层驱动,需要对STM32的外设寄存器进行操作。开发中常说的bsp,即Board Support Packet的缩写,翻译为板级支持包。在STM32的底层驱动中,需要先配置GPIO的工作模式、速率、推挽输出、开漏输出、复用功能等,然后才能进行GPIO的读写操作。在STM32的底层驱动中,还需要配置GPIO的中断功能,如中断优先级、中断类型等。
STM32的GPIO具有高、中、低三种输出速率,高速输出速率可以达到50MHz,中速输出速率可以达到10MHz,低速输出速率可以达到2MHz。STM32的GPIO还具有推挽输出、开漏输出和复用功能,推挽输出可以提供更高的输出电流,开漏输出可以提供更低的输出电流,复用功能可以在输入和输出之间切换。
在应用层编程中,可以使用STM32的GPIO库函数进行GPIO的配置和使用,这样可以简化程序的复杂性。STM32的GPIO库函数可以提供高层次的接口,让用户只需要关注GPIO的功能,而不需要关注底层的实现细节。
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
这个函数主要用来初始化我们需要用到的引脚,设置其工作频率、工作模式、上下拉等参数。
使用CubeMX配置工程,所有参数在Cube中调配,函数自动在工程中生成。
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
将GPIO口恢复至默认状态,即各个寄存器复位时的值。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
读取引脚的电平状态、函数返回值为0或1。
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
其中PinState
可选择GPIO_PIN_RESET
或 GPIO_PIN_SET
。GPIO_PIN_RESET为 0 ; GPIO_PIN_SET为 1
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
用于翻转某个GPIO引脚的电平状态。如果为0则变为1;如果为1则变为0。
/**
* @brief 锁住引脚的电平状态
* @param GPIOx
* @param GPIO_Pin
* @retval HAL_StatusTypeDef
*/
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
HAL_StatusTypeDef
包含4种状态 HAL_OK
、HAL_ERROR
、HAL_BUSY
、HAL_TIMEOUT
顾名思义,就是锁住某个引脚的电平状态。比如说一个管脚的当前状态是1,读管脚值使用锁定,当这个管脚电平变化时保持锁定时的值。
注意的是:一旦锁住后,就不能再修改,只有复位后才可以重新配置。
STM32的GPIO还具有中断功能,当GPIO口的电平发生变化时,可以产生中断,从而使得STM32微控制器能够及时响应外部设备的变化。STM32的GPIO还具有模拟输入功能,可以用来采集模拟信号,如模拟电压、模拟电流等。
STM32的GPIO是一种非常重要的外设,它具有高、中、低三种输出速率、推挽输出、开漏输出、复用功能、中断功能和模拟输入功能等优秀特性,是STM32微控制器的重要组成部分。使用STM32的GPIO可以提高系统的灵活性和可靠性。