打印
[STM32F1]

systick的优先级比外设的优先级高还是低,很多人回答不了

[复制链接]
983|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
野火_firege|  楼主 | 2016-9-1 09:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示:systick是内核的外设,其他外设比如串口,adc等是内核之外的外设。

答案分析:

1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件优先级,如果软件优先级一样,那么就比较他们的硬件的中断编号,编号就是在中断向量表中的位置,越小,优先级越高。

2、以systick为例,在systick的固件库初始化函数:SysTick_Config(uint32_t ticks) 中,调用了NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); ,这里面把 systick的 优先级配置为 :1<<4-1 = 15,这里面的4是因为STM32 使用4个位来配置中断优先级。

3、那么问题来了,这里systick的中断优先级配置成15,应该是最低的,那跟外设来比,那是systick的优先级比外设是高还是低?  这个得看 外设 配置 中断优先级时的优先级分组。

4、如果分组为 2,那抢占优先级和子优先级各有2个位表示优先级,抢占的取值范围为0~3,子优先级的取值范围为:0~3。那这时systick的优先级15,该怎么对比,只需要把15转换成二进制:1111,这四位同样受优先级分组的控制,即前两位表示抢占优先级,那就是3,后两位表示子优先级,也是3。在分组2里面都是最低的。如果你的外设也配置成组2,主和子优先级配置的不是3,那就肯定比systick的优先级高。

5、内核的优先级并非一定比外设的优先级高,只要你的优先级可以配置。



沙发
野火_firege|  楼主 | 2016-9-1 09:03 | 只看该作者

更加详细的分析可参考《STM32库开发实战指南—基于STM32F429》第16章——STM32中断应用总结。

《STM32库开发实战指南—基于STM32F429》即将出版,开源电子版
https://bbs.21ic.com/forum.php?mo ... amp;fromuid=1784376
(出处: 21ic电子技术论坛)

使用特权

评论回复
板凳
mmuuss586| | 2016-9-1 09:19 | 只看该作者
谢谢分享;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

166

帖子

31

粉丝