文章目录
- 一.概要
- 二.可嵌套的向量中断控制器 (NVIC)
- 三.中断向量表
- 四.中断优先级详解
- 五.STM32外部中断控制器(EXTI)
- 1.EXTI简介
- 2.EXTI在中断向量表的位置
- 3.EXTI外部中断产生的信号流向
- 4.EXTI中断产生后的中断服务程序
- 六.CubeMX配置一个GPIO输入中断的例程
- 七.CubeMX工程源代码下载
- 八.讲解视频链接地址
- 九.小结
一.概要
中断是指单片机正在处理某个事件A,发生了另一件事件B,请求单片机迅速去处理(中断发生),单片机暂时停止当前的工作(中断响应),转去处理事件B(中断服务),待单片机处理事件B完成后,再回到原来的事件A(断点)继续执行,这一过程称之为中断。
STM32单片机的中断系统支持多种中断类型,包括内部中断和外部中断。内部中断通常由处理器内部的事件引发,如定时器溢出、除零错误等,而外部中断则由外部硬件或设备触发的事件引发,如按键按下、传感器触发等。
二.可嵌套的向量中断控制器 (NVIC)
CortexM3当中有一个强大而方便的NVIC即嵌套向量中断控制器(Nested Vectored Interrupt Controller),它是属于Cortex内核的器件,中断向量表中60个中断都由它来处理。NVIC是Cortex-M3核心的一部分,Cortex-M3的向量中断统一由NVIC管理。
NVIC的核心功能是中断优先级分组、中断优先级的配置、读中断请求标志、清除中断请求标志、使能中断、清除中断等,它控制着STM32中断向量表中中断号为0-59的60个中断!!外部中断信号从核外发出,信号最终要传递到NVIC(嵌套向量中断控制器)。NVIC跟内核紧密耦合,它控制着整个芯片中断的相关功能。
三.中断向量表
在中断向量表里给我们列出了各种外部中断, 前一张图黑色的是内核的中断,后一张图是外设相关的外部中断
四.中断优先级详解
中断优先级分为抢占优先级和子优先级两部分,用于确定中断的响应顺序和执行顺序。抢占优先级用于确定中断的响应优先级,而子优先级用于确定中断的实际执行优先级。当多个中断同时触发时,系统会优先处理抢占优先级较高的中断,而在相同抢占优先级的情况下,会根据子优先级来确定中断的执行顺序
五.STM32外部中断控制器(EXTI)
1.EXTI简介
STM32单片机的外部中断/事件控制器(External Interrupt/Event Controller,简称EXTI),使得微控制器能够高效地响应外部事件并执行相应的任务,EXTI允许STM32微控制器对外部事件进行监测和响应,这些事件可以是来自GPIO引脚的电平变化信号。当外部事件发生时,EXTI能够立即唤醒微控制器,并执行预定义的中断服务程序(ISR)或者事件处理函数,我们接下去对EXTI外部中断进行详细介绍。
2.EXTI在中断向量表的位置
GPIO口外部中断在中断向量表中分配了16个中断向量(EXTI0~EXTI4)
EXTI5~EXTI9
EXTI10~EXTI15
GPIO对应的外部中断,例如PA0,PB0,PC0对应的中断服务程序都是EXTI0_IRQHandler,一般只选其中一个引脚就可以。
3.EXTI外部中断产生的信号流向
如下图编号1~4是外部中断的信号流向
1.编号1是GPIO的任意一个引脚,就是高低电平信号输入脚
2.编号2是一个边沿检测电路,通过上升/下降沿触发选择器寄存器,对GPIO输入信号开启边沿信号检测,检测到了就在后面的编号3或门处给个1,而两个寄存器可以配置上升沿/下降沿,或者上升沿和下降沿都触发
3.编号3是一个或门电路,软件中断事件寄存器由软件置位 1,这一操作会把请求挂起寄存器的相应位置1
4.编号4是一个与门电路,中断屏蔽寄存器设置为1表示开放中断,编号 4 电路输出的信号会被保存到挂起寄存器(EXTI_PR)内,如果确定编号 4 电路输出为 1 就会把EXTI_PR(挂起寄存器) 对应位置 1,在该位中写入’1’可以清除它,也可以通过改变边沿检测的极性清除
5.编号4出来的信号发送到内核NVIC中请求产生中断,并跳转到中断服务函数
4.EXTI中断产生后的中断服务程序
中断向量表中的中断服务函数就是下面几个,中断产生后就会跳入相应函数,我们应用程序就可以对中断后需要做的事进行修改。
我们应用过程中一般在 stm32f1xx_it.c中对中断服务函数进行应用修改就可以
/**
* @brief This function handles EXTI line0 interrupt.
*/
void EXTI0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_IRQn 0 */
/* USER CODE END EXTI0_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
/* USER CODE BEGIN EXTI0_IRQn 1 */
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//LED引脚翻转输出
/* USER CODE END EXTI0_IRQn 1 */
}
六.CubeMX配置一个GPIO输入中断的例程
通过连矩阵按键接板子的 PA0 引脚配置成中断输入引脚,PC13 引脚配置成输出,每次按键,PA0 引脚就会进入一次外部中断,每进入一次中断服务程序,改变 PC13 输出电平的高低,从而实现 LED 灯的亮灭。
打开STM32CubeMX软件,新建工程
Part Number处输入STM32F103C8,再双击就创建新的工程
配置下载口引脚
配置外部晶振引脚
可以查看STM32F103C8T6小系统板原理图,PC13连接LED灯,所以配置PC13为GPIO输出
配置PA0引脚为外部中断0引脚
配置PA0引脚下拉,上升沿中断,下拉使PA0初始电平就稳定,上升沿中断信号就稳
配置外部中断使能
配置系统主频
配置工程文件名,保存路径,KEIL5工程输出方式
生成工程
用Keil5打开工程
添加代码,就能实现按下按键一次,进入中断一次
七.CubeMX工程源代码下载
链接:https://pan.baidu.com/s/1E1kpk8DeTfqcjegv3jUgDQ
提取码:utx7
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行
八.讲解视频链接地址
GPIO外部中断实验视频
九.小结
中断是STM32单片机开发中经常会用到的功能,对中断有了一定了解,在开发中应用中断,能使单片机的运行效率提升很多。