关于STM32中断优先级分组的科普,初学者常见问题解答(Q&A)

2019-07-20 23:41发布

CM3内核集成了强大的NVIC(可嵌套的向量中断控制器),
权威指南中介绍它就花了大量篇幅,
要把整个NVIC完全搞懂也不容易,
我也只学习了一点皮毛,
对于初学者来说,中断优先级分组及中断优先级设定这种基本问题是绕不开的,
刚接触NVIC的同学对此常有疑问,
本帖仅仅针对STM32中断优先级分组这一个方面,
给初学者科普一下这方面的常见问题,
老手请绕道,不过欢迎进来交流。
也可以提新的问题,我所知道的尽量解答。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
49条回答
warship
2019-07-21 05:04
本帖最后由 warship 于 2018-7-22 18:28 编辑

问题十:如果我不设置优先级分组会如何?
答:一般程序会在时钟初始化之后就设定一个优先级分组,如果不设置,会如何呢?
系统复位之后,会将NVIC内核寄存器SCB->AIRCR的BIT10:8这三位变成000,也就是说默认采用分组方法0:从BIT0处进行分组,即BIT0代表子优先级,BIT1-7代表抢占优先级。具体在实际为4位的优先级系统中,则4位全都是抢占优先级,没有子优先级。

这样的话,抢占优先级范围为0-15共16级,0级响应优先级,所以开机不设定优先级分组也是可以工作的。此时,任意两个中断之间都是抢占关系(当然只有数值低的中断才能抢占数值高的中断了,注意数值越低越优先),你后面在给每个中断分配优先级时,抢占优先级可以在0-15内选择,无须设置响应优先级,假如这种优先级分组可以满足你全系统的实际要求,开机不设置优先级也无妨的。

一周热门 更多>