公司想做个自己的网站怎么做,网站优化搜索,东莞市建设中心,给别人做网站多少钱外部中断(HAL库GPIO讲解)
今天我们会详细地学习STM32CubeMX配置外部中断#xff0c;并且讲解HAL库的GPIO的各种函数。
准备工作#xff1a;
1、STM32开发板#xff08;我的是STM32F103C8T6#xff09;
2、STM32CubeMx软件、 IDE#xff1a; Keil软件
3、STM32F1xx/ST…外部中断(HAL库GPIO讲解)
今天我们会详细地学习STM32CubeMX配置外部中断并且讲解HAL库的GPIO的各种函数。
准备工作
1、STM32开发板我的是STM32F103C8T6
2、STM32CubeMx软件、 IDE Keil软件
3、STM32F1xx/STM32F4xxHAL库
4、按键管脚 PA7 PB0
5 LED管脚PA1
配置
LED1个GPIO_OUTPUT (输出模式)
按键2个GPIO_EXITx外部中断模式 GPIO的各种模式设置 GPIO output level 引脚电平设置 高/低GPIO mode GPIO模式 推挽输出/开漏输出GPIO Pull-up/Pull-dowm 上拉下拉电阻 上拉电阻/下拉电阻/无上拉或下拉Maxinum output speed 引脚速度设置 低速/中速/高速User Label 用户标签 给引脚设置名称 如LED0
GPIO_EXIT的6种模式 我们的按键选择下降沿触发 设置NVIC(嵌套向量中断控制器) 之后的配置就和上一章写的差不多了名字地址什么的配置好就行了
打开工程
随后我们可以在stm32f1xx_it.c中看到我们所配置的中断服务函数 并且可以看到GPIO的初始化分到了gpio.c里面 在HAL库中中断运行结束后不会立刻退出而是会先进入相对应的中断回调函数处理该函数中的代码之后才会退出中断所以在HAL库中我们一般将中断需要处理代码放在中断回调函数中
HAL库 GPIO函数库讲解
在正常使用中除了STM32CubeMX配置之外我们有时候还需要自己配置一些东西学习并理解HAL库也是我们必须要学习的一个地方
首先打开stm32f4xx_hal_gpio.h 发现一共定义有8个函数 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); 功能 GPIO初始化
实例HAL_GPIO_Init(GPIOC, GPIO_InitStruct); void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); 功能在函数初始化之后的引脚恢复成默认的状态即各个寄存器复位时的值
实例HAL_GPIO_Init(GPIOC, GPIO_PIN_4); GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 功能读取引脚的电平状态、函数返回值为0或1
实例HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4); void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 功能引脚写0或1
实例HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4,0); void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 翻转引脚的电平状态
实例HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); 常用在LED上 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 功能锁住引脚电平比如说一个管脚的当前状态是1当这个管脚电平变化时保持锁定时的值。
实例HAL_GPIO_LockPin(GPIOC, GPIO_PIN_4); void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); 功能 外部中断服务函数清除中断标志位
实例HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); 功能 中断回调函数可以理解为中断函数具体要响应的动作。
实例HAL_GPIO_EXTI_Callback(GPIO_PIN_4);
GPIO_InitTypeDef结构体定义
typedef struct
{uint32_t Pin; /*! 选择引脚*/uint32_t Mode; /*! 设置引脚模式*/uint32_t Pull; /*! 引脚是否上拉或下拉*/uint32_t Speed; /*! 设置引脚速度*/
} GPIO_InitTypeDef;