中断优先级高低顺序

2025-04-2003:24:58生活经验0

STM32 RTOS系统上RTC中断处理程序的配置与优化

近期在开发过程中,我遇到了在stm32 RTOS系统上编写RTC中断处理程序时的问题。在源程序中添加了RTC初始化函数后,整个系统出现了运行故障。经过仔细检查,发现是stm32中断配置方面出了问题。在此,我将对这次的经验进行总结分享,并详细解释stm32的优先级配置(库函数版本)。

关于stm32的优先级配置详解

配置优先级主要涉及三个关键参数:优先级组、抢占式优先级和子优先级。

1、优先级组设置

概念解释:stm32库函数提供了设置16个中断优先级的选项,这些优先级可以按照不同的抢占式和子优先级的组合方式分为5组。

具体分组情况如下:调用函数void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)来设定。例如,

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 将中断组设置为0组

需要注意的是,一个程序中只能设置在一个中断组内,不能对不同的中断设置不同的组,否则以最后一次设置为准,配置不当有时会影响整个程序的运行。

2、抢占式优先级与子优先级的设置

PreemptionPriority代表抢占式优先级,而SubPriority代表子优先级。这两个参数的初始化对于中断向量及中断响应至关重要。

在数据手册中可以找到组、抢占和子优先级之间的详细关系。虽然表格内容可能较为复杂,但通过仔细研究和理解,我们可以更好地把握三个参数之间的设置关系。

例如,在0组中,抢占优先级PreemptionPriority只能赋值0,而SubPriority参数的取值范围是0到15。而在1组中,抢占优先级和子优先级的赋值范围及关系则有所不同。

3、中断优先级的比较

了解了优先级的设置后,我们还需要明白不同中断的优先级是如何比较的。主要是根据抢占式优先级和子优先级两个参数来进行比较。

抢占式优先级的参数越低,其等级就越高。在同抢占优先级下,子优先级的参数则决定了中断的响应顺序,参数低的会先响应。

优先级等级的高低主要看PreemptionPriority的赋值参数,它越小,抢占等级就越高。而只有当SubPriority参数不才不会发生抢占,同时触发中断时,子优先级别高的会先响应,参数越小则优先级越高。

以上就是我对于stm32中断配置的总结分享,如有不足之处,还请指正。