m3中断优化(学习笔记 stm32CortexM3中断优先级设置)

m3中断优化(学习笔记 stm32CortexM3中断优先级设置)

adminqwq 2026-02-23 社会资讯 4 次浏览 0个评论

近期在stm32 RTOS系统上编写RTC中断处理程序,源程序上添加了RTC初始化函数,发现整个系统跑不起来了,后来检查发现是stm32中断配置问题。特总结学习分享。这里对stm32优先级配置进行详细说明(库函数版本)。

配置优先级主要配置三个参数:优先级组、抢占式优先级、子优先级。

1、优先级组设置

概念:stm32库函数可以设置16个中断优先级,按照抢占式和子优先级的组合方式不同可以分成5组,如下:

学习笔记 stm32(Cortex-M3)中断优先级设置

中断分组

调用函数:void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)设置分组。

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0)//中断组设置成0组

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1)//中断组设置成1组

......

注意:一个程序只能设置在一个中断组,不能中断1设置成0组,中断2设置成1组,如果都设置了会以最后一次设置为准,有时配置不对会影响整个程序运行。

2、设置抢占式优先级和响应优先级PreemptionPriority:抢占式优先级 SubPriority:子优先级

学习笔记 stm32(Cortex-M3)中断优先级设置

初始化中断向量

中断组和抢占优先级子优先级关系。

学习笔记 stm32(Cortex-M3)中断优先级设置

数据手册上组、抢占、子优先级关系

数据手册上的表格写的不是很简单明了。如果把它在细化下就可以比较清楚。

学习笔记 stm32(Cortex-M3)中断优先级设置

组、抢占、子优先级关系2

由关系2表格就比较清晰知道三个参数设置之间的关系。

如果设置成:0组NVIC_PriorityGroup_0,那么抢占优先级PreemptionPriority只能赋值0,SubPriority参数可以设置成0到15中的数据。

如果设置成:1组NVIC_PriorityGroup_1,抢占优先级PreemptionPriority可赋值0,SubPriority参数可以设置成0到7中的数据。抢占优先级PreemptionPriority可赋值1,SubPriority参数可以设置成0到7中的数据。

以此类推.....

3、中断优先级比较

优先级设置已经说明。那么不同中断的优先级等级怎么比较?三个参数优先级组、抢占式优先级、子优先级。

优先级组程序用的是同一个组不用比较。

抢占式优先级参数越低等级越高。

同抢占优先级下子优先级之间没有嵌套抢占关系,多个中断同时触发,参数低的会先响应。

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

学习笔记 stm32(Cortex-M3)中断优先级设置

优先级比较总结

总结分享有不足之处望指正。

转载请注明来自海坡下载,本文标题:《m3中断优化(学习笔记 stm32CortexM3中断优先级设置)》

每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,4人围观)参与讨论

还没有评论,来说两句吧...