近期在stm32 RTOS系统上编写RTC中断处理程序,源程序上添加了RTC初始化函数,发现整个系统跑不起来了,后来检查发现是stm32中断配置问题。特总结学习分享。这里对stm32优先级配置进行详细说明(库函数版本)。
配置优先级主要配置三个参数:优先级组、抢占式优先级、子优先级。
1、优先级组设置
概念:stm32库函数可以设置16个中断优先级,按照抢占式和子优先级的组合方式不同可以分成5组,如下:
中断分组
调用函数: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:子优先级
初始化中断向量
中断组和抢占优先级子优先级关系。
数据手册上组、抢占、子优先级关系
数据手册上的表格写的不是很简单明了。如果把它在细化下就可以比较清楚。
组、抢占、子优先级关系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参数不同不会抢占,同时触发中断时子优先级别高的会先响应,参数越小优先级越高。
优先级比较总结
总结分享有不足之处望指正。
转载请注明来自海坡下载,本文标题:《m3中断优化(学习笔记 stm32CortexM3中断优先级设置)》
京公网安备11000000000001号
京ICP备11000001号
还没有评论,来说两句吧...