NVIC_PriorityGroup_2 是STM32中断优先级的一种分组方式,它决定了如何分配用于配置中断优先级的4个寄存器位。
选择这个组别,意味着将2个位 分配给抢占优先级 ,2个位 分配给响应优先级。
下面是对这个组别的具体介绍:
优先级分配与取值范围
在NVIC_PriorityGroup_2模式下:
-
抢占优先级 (Preemption Priority) :占用2个位 ,因此有
2^2 = 4个优先级级别,取值范围为 0~3。 -
响应优先级 (Subpriority) :占用2个位 ,因此也有
2^2 = 4个优先级级别,取值范围为 0~3。
请注意,对于所有优先级,数值越小,代表的优先级越高 ,0是最高优先级-11。
抢占与响应优先级的作用
这两种优先级在中断嵌套和响应时扮演不同角色:
-
抢占优先级 :决定中断能否嵌套。一个高抢占优先级的中断,可以打断任何正在执行的低抢占优先级的中断服务程序。
-
响应优先级 :在抢占优先级相同的中断之间起作用。
-
它不能打断正在执行的、抢占优先级相同但响应优先级较低的中断。
-
当两个抢占优先级相同的中断同时发生 时,响应优先级高的那个会优先执行。
-
如果在
NVIC_PriorityGroup_2下,两个中断的抢占优先级和响应优先级都相同,那么它们的执行顺序将由中断向量表中的硬件编号决定,编号靠前的先执行。
总结与建议
NVIC_PriorityGroup_2 是一个非常平衡和常用的配置。它提供了4级抢占优先级 ,足以满足大多数需要中断嵌套的场景,同时也提供了4级响应优先级,方便在同级中断中进行更细致的排序。
这个分组是许多STM32官方例程和第三方库(如FreeRTOS)的默认配置,具有很好的兼容性。