专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
关于STM32中断优先级分组的科普,初学者常见问题解答(Q&A)
2019-07-20 23:41
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
7570
49
1152
CM3内核集成了强大的NVIC(可嵌套的向量中断控制器),
权威指南中介绍它就花了大量篇幅,
要把整个NVIC完全搞懂也不容易,
我也只学习了一点皮毛,
对于初学者来说,中断优先级分组及中断优先级设定这种基本问题是绕不开的,
刚接触NVIC的同学对此常有疑问,
本帖仅仅针对STM32中断优先级分组这一个方面,
给初学者科普一下这方面的常见问题,
老手请绕道,不过欢迎进来交流。
也可以提新的问题,我所知道的尽量解答。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
warship
1楼-- · 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内选择,无须设置响应优先级,假如这种优先级分组可以满足你全系统的实际要求,开机不设置优先级也无妨的。
加载中...
warship
2楼-- · 2019-07-21 09:14
本帖最后由 warship 于 2018-7-22 14:24 编辑
问题一、为什么要设置中断优先级?
答:中断,在STM32中也称之为异常,就是说程序必须中断正常的执行流程,处理各种临时发生的异常情况。
当同时发生几种不同的异常情况时,先去响应哪个? 需要设置优先级。
当正在处理异常时,又发生了情况更紧急的异常时,需要设置优先级,使更高级的中断可以打断正在执行的低优先级服务。
种种需求,必须把各个中断分出三六九等,这就是中断优先级。每一个中断都有自己的优先级设定,这个相当于它在整个中断系统中的身份证,服务卡。
加载中...
筑梦233
3楼-- · 2019-07-21 11:41
顶顶顶,好贴,解决了我的好多疑惑。
加载中...
warship
4楼-- · 2019-07-21 14:24
精彩回答 2 元偷偷看……
加载中...
warship
5楼-- · 2019-07-21 15:23
本帖最后由 warship 于 2018-7-22 18:12 编辑
问题三: 中断优先级设置是如何表示优先级的?
答:问题二中我们说,每个外部中断由8比特来表示自己的中断优先级。
那么,这8比特的表示范围就是0-255即共有256种取值,可以表达256种不同的优先级。
ARM规定,优先级的取值越小,优先级别越高。 即0最高(系统内部还有级别更高的几个负数优先级的,这是特殊情况,本帖不讨论),255最低。
如果只是简单这么定义的话,就比较好理解了,初学者也不会有种种的疑问了。
这种表示方法总体是对的,但太粗线条了。它只是简单把中断分成了256级,级数太多,没有主次,不方便使用和管理。
就像社会上有256个人,每个人都不同级别一样,估计你会眼花缭乱。
怎么办?那就是先分阶层,阶层内再分子级的分层管理。 如先分统治阶层、奴隶主、奴隶等,同一阶层再区分小级别。
这样,就引入了分组的概念,先规定一下,这8比特怎么用? 用几比特表示阶层,用几比特来表示小级别。
就像我们的身份证一样,规定几位表示地区,几位表示生日等等。
加载中...
warship
6楼-- · 2019-07-21 16:22
精彩回答 2 元偷偷看……
加载中...
1
2
3
4
5
6
7
8
下一页
最后一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
问题十:如果我不设置优先级分组会如何?
答:一般程序会在时钟初始化之后就设定一个优先级分组,如果不设置,会如何呢?
系统复位之后,会将NVIC内核寄存器SCB->AIRCR的BIT10:8这三位变成000,也就是说默认采用分组方法0:从BIT0处进行分组,即BIT0代表子优先级,BIT1-7代表抢占优先级。具体在实际为4位的优先级系统中,则4位全都是抢占优先级,没有子优先级。
这样的话,抢占优先级范围为0-15共16级,0级响应优先级,所以开机不设定优先级分组也是可以工作的。此时,任意两个中断之间都是抢占关系(当然只有数值低的中断才能抢占数值高的中断了,注意数值越低越优先),你后面在给每个中断分配优先级时,抢占优先级可以在0-15内选择,无须设置响应优先级,假如这种优先级分组可以满足你全系统的实际要求,开机不设置优先级也无妨的。
问题一、为什么要设置中断优先级?
答:中断,在STM32中也称之为异常,就是说程序必须中断正常的执行流程,处理各种临时发生的异常情况。
当同时发生几种不同的异常情况时,先去响应哪个? 需要设置优先级。
当正在处理异常时,又发生了情况更紧急的异常时,需要设置优先级,使更高级的中断可以打断正在执行的低优先级服务。
种种需求,必须把各个中断分出三六九等,这就是中断优先级。每一个中断都有自己的优先级设定,这个相当于它在整个中断系统中的身份证,服务卡。
问题三: 中断优先级设置是如何表示优先级的?
答:问题二中我们说,每个外部中断由8比特来表示自己的中断优先级。
那么,这8比特的表示范围就是0-255即共有256种取值,可以表达256种不同的优先级。
ARM规定,优先级的取值越小,优先级别越高。 即0最高(系统内部还有级别更高的几个负数优先级的,这是特殊情况,本帖不讨论),255最低。
如果只是简单这么定义的话,就比较好理解了,初学者也不会有种种的疑问了。
这种表示方法总体是对的,但太粗线条了。它只是简单把中断分成了256级,级数太多,没有主次,不方便使用和管理。
就像社会上有256个人,每个人都不同级别一样,估计你会眼花缭乱。
怎么办?那就是先分阶层,阶层内再分子级的分层管理。 如先分统治阶层、奴隶主、奴隶等,同一阶层再区分小级别。
这样,就引入了分组的概念,先规定一下,这8比特怎么用? 用几比特表示阶层,用几比特来表示小级别。
就像我们的身份证一样,规定几位表示地区,几位表示生日等等。
一周热门 更多>