STM32中有两个优先级
Preemption Priority(抢占优先级)
SubPriority(子优先级)
1、抢占优先级:顾名思义能够抢先执行任务,即打断当前的主程序或者中断程序的运行,前去完成抢断中断。也称中断嵌套。
2、子优先级:也是从优先级或者副优先级,在抢占优先级相同的情况下不能发生中断嵌套,高级的子优先级先执行。如果低级的子优先级在执行,需要等待完成才能执行高级的子优先级,即不发生抢断。
配置先看图
在Cortex-M3系统中定义了4位中断优先级的寄存器,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级
可以通过STM32的固件库中的函数NVIC_PriorityGroupConfig()
配置想要的中断优先级。
NVIC_PriorityGroup_0 ->PreemptionPriority范围0,SubPriority范围0-15
NVIC_PriorityGroup_1 ->PreemptionPriority范围0-1,SubPriority范围0-7
NVIC_PriorityGroup_2 -> PreemptionPriority范围0-3,SubPriority范围0-3
NVIC_PriorityGroup_3 -> PreemptionPriority范围0-7,SubPriority范围0-1
NVIC_PriorityGroup_4 -> PreemptionPriority范围0-15,SubPriority范围0
数值越小,优先级越高。