第四篇 STM32CubeMX创建STM32工程之GPIO外部中断实验
一、配置引脚成模式
1.配置引脚成外部中断输入模式
打开LED闪烁工程在此基础之上继续配置一个外部中断输入,小编选择PB12作为外部输入引脚,在右侧芯片引脚左键选择GPIO_EXITx,x表示引脚编号,不同得引脚编号不同,这里选择的是GPIO_EXIT12。
2.引脚参数配置
选择PB12,配置引脚出发方式,主要是参数1和参数2,参数一是GPIO模式选择,有六种模式,前三种是上升沿检测、下降沿检测、上下降沿检测的外部中断模式。后三种是外部事件模式,从内部结构是一个是硬件级的一个是软件级的,其他相关区别及具体定义,读者可以自行百度一下。
这里我们选择下降沿外部中断,因此上下拉模式选择上拉,参数一与参数2相互对应。
3.开启中断
选择NVIC,将EXIT line [15:10]INTERRUPTS使能勾选,开启外部中断使能,外部中断的15-10在同一个中断函数内,值得大家注意,后边小编也会提到。
4.配置LED引脚
参考第一篇LED闪烁等实验
二、编写外部中断处理程序
1.外部中断实现LED的亮灭
代开User.c文件新建一个中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
这里值得注意的是该函数在hal库中已经有定义,读者可以右键打开定义所在位置。
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
该函数定义使用的是“__weak”关键字,该定义表示该函数为若定义,当user.c中再次出现定义的时候不会提示重定义错误。
定义完成以后,当中断产生以后会执行该函数,中断函数中执行LED反转操作。这里小编叫了if判断。原因是中断10-15是配置到同一个回调函数的,因此当有多个案件的时候需要注意判断是哪个引脚发生中断。
#include "user.h"
#include "gpio.h" //引入gpio头文件
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY_Pin)
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
}
void user_main(void)
{
while(1)
{
}
}