在工作中使用到多个定时器中断,由于中断的中断优先级不熟悉导致出错,下面来写一下中断的一些注意事项。
一、中断的分类
1、EXTI外部中断:由外部设备或外部信号引发,例如按键按下、外部传感器信号变化等。外部中断用于响应外部事件,并及时处理相关任务。
2、内部中断:由处理器内部的模块或事件引发,例如定时器溢出、串口接收缓冲区非空等。内部中断可以用于定期执行特定任务、检测状态变化等。。
二、中断的优先级分组
STM32 将中断分为 5 个组,组 0~4。该分组的设置是由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的 PRIGROUP[10:8]bit10~8 位决定。
例如组设置为 3,那么此时所有中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级,低 1 位是响应优先级。
- 每个中断,你可以设置抢占优先级为 0~7,响应优先级为 1 或 0。
- 抢占优先级的级别高于响应优先级。
- 数值越小所代表的优先级就越高。
优先级原则
- 第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
- 第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
判断优先级:分组>主优先级>
子优先级.如果都相同,则看硬件中断编号(中断向量表)。
使用stm32cubemx可以直接设置中断的组数和优先级。
注意:
1、为什么中断处理程序尽可能简洁而且执行时间尽可能短
因为中断处理程序在运行的时候,会阻止其抢占优先级更低的中断的执行或者相同抢占优先级但是响应优先级更低或者相等的中断执行。
当执行完定时器中断处理程序后,定时器才会再次计时。
2、无论是抢占优先级(主优先级)还是响应优先级(子优先级),优先级数值越小,就代表优先级越高。
3、优先级较高的中断可以打断优先级较低的中断。
4、抢占优先级相同且响应优先级相同的中断,假如同时发生,会按照硬件内部固定的优先级执行。
5、中断优先级的分组对内核和外设同样适用。当比较的时候,只需要把内核外设的中断优先级的四个位按照外设的中断优先级来分组来解析即可,即人为的分出抢占优先级和子优先级。