概述
中断:中断是指计算机运行过程中,出现某些意外情况
需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原
被暂停的程序继续运行
在STM32中(这里以STM32f407为例子),中断共有23条中断线
●EXTI0-EXTI 15连接到外部中断及GPIO引脚
● EXTI 线 16 连接到 PVD 输出
● EXTI 线 17 连接到 RTC 闹钟事件
● EXTI 线 18 连接到 USB OTG FS 唤醒事件
● EXTI 线 19 连接到以太网唤醒事件
● EXTI 线 20 连接到 USB OTG HS(在 FS 中配置)唤醒事件
● EXTI 线 21 连接到 RTC 入侵和时间戳事件
● EXTI 线 22 连接到 RTC 唤醒事件
其中外部中断与GPIO口中断相关
的16个一一对应相对应每个GPIO组引脚的每一个引脚;即如下图所示,PA组~PI组
的0号引脚
都连接到同一个EXTI0
中断线上,PA组~PI组
的所有1号引脚
都被连接到同一个EXTI1
中断线上,其他中断线以此类推。。。
注意:由于一个中断线上同时连接着多个GPIO的引脚,因此导致一个中断线一个时间内只能设置其中断线上的某一引脚作为它的
中断引脚
;
STM32中CPU处理中断步骤:
①中断触发
②CPU检测到指定寄存器的标志位为1
(下面中断处理函数会讲到)
③CPU跳转预先写好的中断处理函数运行代码
④运行结束返回原来CPU正在处理的事务进行处理
工程实现
创建工程,需要勾选以下模块
1、开启时钟
如图所示由于中断是在APB2总线上的外设,因此在配置外部中断前
需要调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
函数用于启动时钟
2、配置GPIO引脚
使用中断,需要调用GPIO_Init()
函数先初始指定的GPIO引脚为输入模式,这里设置的中断源为GPIO组的PA0引脚作为中断引脚
void _IOInit(void)
{
//a.使能定时器所需时钟
RCC_APB2PeriphClockCmd