STM32教程(五)HAL库之GPIO函数及实例详细介绍!

今天介绍STM32 HAL库的GPIO函数库,首先打开stm32f4xx_hal_gpio.h文件,我们能看到一些结构体定义以及GPIO引脚的地址定义等等,

这些都很好理解,我们需要重点看HAL库中GPIO的函数库有哪些?以及这些函数库有什么作用以及怎么使用这些函数?我们找到有以下8个函数

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

下面我们逐一介绍这8个函数:

1、void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

这个函数我们在stm32f4xx_hal_gpio.c文件中找到它的实体,可以很清楚的看到它的解释(不过是英文,需要点英文基础,不过有不认识的单词可以自己使用工具去翻译),这个函数主要用来初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。

2、void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

这个函数的主要功能是将我们在1函数初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值。这个函数比较容易理解。

3、GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

这个函数主要功能是读取我们想要知道的引脚的电平状态、函数返回值为0或1。

4、void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

这个函数从字面意思来看就是给某个引脚写0或1,但是不要理解成,写1就是使能之类的意思,有些寄存器写1是擦除的意思,这一点要谨记。

5、void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

这个函数用来翻转某个引脚的电平状态,我用的最多的场合是LED灯的翻转,也就是LED闪烁,哈哈。

6、HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

这个函数看函数名称就是锁住的意思,比如说一个管脚的当前状态是1,读管脚值使用锁定,当这个管脚电平变化时保持锁定时的值。

7、void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);

这个函数是外部中断服务函数,用来响应外部中断的触发,函数实体里面有两个功能,1是清除中断标记位,2是调用下面8要介绍的回调函数。很好理解,我们学习51单片机的时候肯定用过中断服务函数。

8、void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

这个函数是中断回调函数,可以理解为中断函数具体要响应的动作。

以上就是关于STM32 HAL库GPIO的函数的介绍。

基于之前的教程的模板,我只要在while(1)里面添加一句代码就可以实现点亮LED了。

我只需要调用HAL_GPIO_WritePin()函数,填好参数就可以了。

HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);

至此,关于STM32 HAL库GPIO的介绍就先告一段落了,下期讲STM32的启动过程,即STM32是怎么从上电一直运行到main()函数里的。

(0)

相关推荐