外部中断![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7d195e0a7f5facb0d3f0d1ab85de7ec1.png)
外部中断是 STM32 芯片实时处理外部事件的一种机制,由于中断请求来自GPIO端口的引脚,所以称为外部中断。
STM32F103 的 EXTI 控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。 STM32F103 的 19 个外部中断为:
- 线 0~15:对应外部 IO 口的输入中断。
- 线 16:连接到 PVD 输出。
- 线 17:连接到 RTC 闹钟事件。
- 线 18:连接到 USB 唤醒事件。
外部中断的类型
- 上升沿触发:当GPIO端口的引脚由低电平跳变到高电平时,产生脉冲触发中断响应事件执行(一般配合于下拉电阻)
- 下降沿触发:当GPIO端口的引脚由高电平跳变到低电平时,产生脉冲触发中断响应事件执行(一般配合与上拉电阻)
- 双边沿触发:只要端口状态发生边沿变化,即触发中断事件
按键中断
按键按下会产生一个上升沿或者下降沿的触发脉冲,利用单片机的IO口检测输入脉冲,触发外部中断
如
- WK_UP引脚初状态与地相连,当按键按下时,左侧3V3高电平导通,端口状态由低到高,上升沿跳变,触发外部中断
- KEY0、KEY1的引脚PE4、PE3初状态为高,当按键按下时,右侧GND导通,端口状态由高到低,下降沿跳变,触发外部中断
按键中断CubeMX配置(以上图KEY0为例)
- 将GPIO设置为
GPIO_EXTI
功能
- 设置中断触发条件:上升沿触发、下降沿触发或双边沿触发:
- 使能中断
- 在stm32f1xx_it.c中找到中断线2中断处理函数
在HAL库中,中断运行结束后不会立刻退出,而是会先进入相对应的中断回调函数,处理该函数中的代码之后,才会退出中断,所以在HAL库中我们一般将中断需要处理代码放在中断回调函数中 - 编写外部中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==KEY0_GPIO_PIN)
{
HAL_GPIO_TogglePin(KEY0_GPIO_Port,KEY0_Pin);
}
}
按下按键以后进入中断,GPIO状态翻转,LED切换亮灭