专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
关于STM32中断优先级分组的科普,初学者常见问题解答(Q&A)
2019-07-20 23:41
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
7618
49
1152
CM3内核集成了强大的NVIC(可嵌套的向量中断控制器),
权威指南中介绍它就花了大量篇幅,
要把整个NVIC完全搞懂也不容易,
我也只学习了一点皮毛,
对于初学者来说,中断优先级分组及中断优先级设定这种基本问题是绕不开的,
刚接触NVIC的同学对此常有疑问,
本帖仅仅针对STM32中断优先级分组这一个方面,
给初学者科普一下这方面的常见问题,
老手请绕道,不过欢迎进来交流。
也可以提新的问题,我所知道的尽量解答。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
49条回答
warship
2019-07-22 03:14
本帖最后由 warship 于 2018-7-22 17:05 编辑
问题七:我们常用的4BIT优先级,分组是如何定义的?
答:前面提到过,CM3的内核是规划了用8位来表示优先级。但又允许具体的厂家可以部分实现,
这样就出现了我们常用的STM32芯片都打了对折,即只用4位来表示优先级为了最大限度的方便移植,ARM为了各系列芯片能够兼容并蓄,
定义了具体芯片的裁减原则,
可以从LSB(最低位BIT0)开始进行裁减,即:可以不实现低位,但高位必须实现。
比如只实现4位,则只有BIT7-4有用,其它位无用
但分组定义方法仍套用8位全集的,即如下:
方法0:从BIT0处进行分组,即BIT0代表子优先级,BIT1-7代表抢占优先级
方法1:从BIT1处进行分组,即BIT0、1代表子优先级,BIT2-7代表抢占优先级
方法2:从BIT2处进行分组,即3位子优先级,5位抢占优先级
方法3:从BIT3处进行分组,即4位子优先级,4位抢占优先级
方法4:从BIT4处进行分组,即5位子优先级,3位抢占优先级
方法5:从BIT5处进行分组,即6位子优先级,2位抢占优先级
方法6:从BIT6处进行分组,即7位子优先级,1位抢占优先级
方法7:从BIT7处进行分组,即8位子优先级,0位抢占优先级
由于BIT0-BIT3厂家没有实现功能,这个时候以上方法3-方法0的实际效果是一样的,
都是BIT4-7为抢占级,
只有从方法4 开始才会体现出区别,
小于等于方法3,子优先级实际位数都是0(如:方法3理论上是定义了4位子优先级,参见上面的定义),
因这些位不存在(厂家没有实现功能),可看作理论上有,实际上没有
方法4:从BIT4开始表示子优先级,即1位(理论上是5位)子优先级,3位抢占优先级
方法5:从BIT5开始表示子优先级,即2位(理论上是6位)子优先级,2位抢占优先级
方法6:从BIT6开始表示子优先级,即3位(理论上是7位)子优先级,1位抢占优先级
方法7:从BIT5开始表示子优先级,即4位(理论上是8位)子优先级,0位抢占优先级
这样,对于4位优先级的系统,则实际退化成只有五种分组:
分组4:从BIT4开始表示子优先级,即0位子优先级,4位抢占优先级(对应上面的方法3,
设置SCB->AIRCR的BIT10:8为011
)
分组3:从BIT4开始表示子优先级,即1位子优先级,3位抢占优先级(对应上面的方法4,
设置SCB->AIRCR的BIT10:8为100
)
分组2:从BIT5开始表示子优先级,即2位子优先级,2位抢占优先级(对应上面的方法5,
设置SCB->AIRCR的BIT10:8为101
)
分组1:从BIT6开始表示子优先级,即3位子优先级,1位抢占优先级(对应上面的方法6,
设置SCB->AIRCR的BIT10:8为110
)
分组0:从BIT5开始表示子优先级,即4位子优先级,0位抢占优先级(对应上面的方法7,
设置SCB->AIRCR的BIT10:8为111
)
加载中...
查看其它49个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
问题七:我们常用的4BIT优先级,分组是如何定义的?
答:前面提到过,CM3的内核是规划了用8位来表示优先级。但又允许具体的厂家可以部分实现,
这样就出现了我们常用的STM32芯片都打了对折,即只用4位来表示优先级为了最大限度的方便移植,ARM为了各系列芯片能够兼容并蓄,
定义了具体芯片的裁减原则,
可以从LSB(最低位BIT0)开始进行裁减,即:可以不实现低位,但高位必须实现。
比如只实现4位,则只有BIT7-4有用,其它位无用
但分组定义方法仍套用8位全集的,即如下:
方法0:从BIT0处进行分组,即BIT0代表子优先级,BIT1-7代表抢占优先级
方法1:从BIT1处进行分组,即BIT0、1代表子优先级,BIT2-7代表抢占优先级
方法2:从BIT2处进行分组,即3位子优先级,5位抢占优先级
方法3:从BIT3处进行分组,即4位子优先级,4位抢占优先级
方法4:从BIT4处进行分组,即5位子优先级,3位抢占优先级
方法5:从BIT5处进行分组,即6位子优先级,2位抢占优先级
方法6:从BIT6处进行分组,即7位子优先级,1位抢占优先级
方法7:从BIT7处进行分组,即8位子优先级,0位抢占优先级
由于BIT0-BIT3厂家没有实现功能,这个时候以上方法3-方法0的实际效果是一样的,
都是BIT4-7为抢占级,
只有从方法4 开始才会体现出区别,
小于等于方法3,子优先级实际位数都是0(如:方法3理论上是定义了4位子优先级,参见上面的定义),
因这些位不存在(厂家没有实现功能),可看作理论上有,实际上没有
方法4:从BIT4开始表示子优先级,即1位(理论上是5位)子优先级,3位抢占优先级
方法5:从BIT5开始表示子优先级,即2位(理论上是6位)子优先级,2位抢占优先级
方法6:从BIT6开始表示子优先级,即3位(理论上是7位)子优先级,1位抢占优先级
方法7:从BIT5开始表示子优先级,即4位(理论上是8位)子优先级,0位抢占优先级
这样,对于4位优先级的系统,则实际退化成只有五种分组:
分组4:从BIT4开始表示子优先级,即0位子优先级,4位抢占优先级(对应上面的方法3,设置SCB->AIRCR的BIT10:8为011)
分组3:从BIT4开始表示子优先级,即1位子优先级,3位抢占优先级(对应上面的方法4,设置SCB->AIRCR的BIT10:8为100)
分组2:从BIT5开始表示子优先级,即2位子优先级,2位抢占优先级(对应上面的方法5,设置SCB->AIRCR的BIT10:8为101)
分组1:从BIT6开始表示子优先级,即3位子优先级,1位抢占优先级(对应上面的方法6,设置SCB->AIRCR的BIT10:8为110)
分组0:从BIT5开始表示子优先级,即4位子优先级,0位抢占优先级(对应上面的方法7,设置SCB->AIRCR的BIT10:8为111)
一周热门 更多>