STM32F1 NVIC中断管理
NVIC两个属性:抢占属性、响应属性(编号越小,优先级越高)
NVIC_IRQChannelSubPriority 参数配置例子:三个中断向量A、B、C
中断向量名称 抢占优先级 响应优先级
A 0 0
B 1 0
C 1 1
此处中断A可以打断中断B,但B不能打断C。
两个要点:
1、若两个中断的抢占优先级和响应优先级相同,则哪一个先发生就先执行。
2、不同的抢占优先级,高抢占优先级可以打断正在进行低抢占优先级
相同的抢占优先级,高响应优先级不可以打断正在进行低响应优先级
NVIC的优先组
0-1总共五个分配方式:
第0 组: 所有4 位用来配置响应优先级。即16 种中断向量具有都不相同的响应优先级。
第1 组:最高1 位用来配置抢占优先级,低3 位用来配置响应优先级。表示有2 种级别的抢占优先级(0 级,1 级),有8 种响应优先级,即在16 种中断向量之中,有8 种中断,其抢占优先级都为0 级,而它们的响应优先级分别为0~7,其余8 种中断向量的抢占优先级则都为1 级,响应优先级别分别为0~7。
第2 组:2 位用来配置抢占优先级,2 位用来配置响应优先级。即4 种抢占优先级,4 种响应优先级。
第3 组:高3 位用来配置抢占优先级,最低1 位用来配置响应优先级。即有8 种抢占优先级,2 种响应2 优先级。
第4 组:所有4 位用来配置抢占优先级,即NVIC 配置的16 种中断向量都是只有抢占属性,没有响应属性。
示例代码:
//配置NVIC:设置NVIC中断分组2:2位抢占优先级,2位响应优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//定义NVIC中断结构体
NVIC_InitTypeDef NVIC_InitStructure;
//使能XXXXX_IRQn所在的中断通道
NVIC_InitStructure.NVIC_IRQChannel = XXXXX_IRQn;
//设置抢占优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
//设置响应优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
//使能中断通道
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//初始化中断结构体
NVIC_Init(&NVIC_InitStructure);
STM32F4中断管理与此次类似,这里只是介绍基本配置和优先级高低问题
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』