STM32的响应优先级
STM32的响应优先级
更多
STM32(基于 ARM Cortex-M 内核)的中断响应优先级由嵌套向量中断控制器(NVIC)管理,涉及两个关键概念:抢占优先级和子优先级(响应优先级)。以下是中文解释:
-
优先级分组(Priority Grouping):
- STM32 允许你将 NVIC 的优先级位(通常 4 位或更多)划分为两部分:
- 抢占优先级(Preemption Priority):数值越小,优先级越高。高抢占优先级的中断可以打断(抢占)正在执行的低抢占优先级的中断。
- 子优先级(Subpriority / Response Priority):也叫做响应优先级。数值越小,优先级越高。仅当两个中断的抢占优先级相同且同时发生时,NVIC 会优先响应子优先级更高的中断。子优先级不能导致中断抢占。
- 通过设置
NVIC_SetPriorityGrouping()函数(或修改SCB->AIRCR寄存器的PRIGROUP域)来选择分组方案。分组决定了抢占优先级和子优先级各占用多少位。 - 常见分组方案(以 4 位优先级为例):
- 组 0:0 位抢占优先级,4 位子优先级(16 个子优先级,无抢占)。
- 组 1:1 位抢占优先级(2 个级别),3 位子优先级(8 个级别)。
- 组 2:2 位抢占优先级(4 个级别),2 位子优先级(4 个级别)。(最常用)
- 组 3:3 位抢占优先级(8 个级别),1 位子优先级(2 个级别)。
- 组 4:4 位抢占优先级(16 个级别),0 位子优先级(相当于没有子优先级)。
- STM32 允许你将 NVIC 的优先级位(通常 4 位或更多)划分为两部分:
-
优先级数值设置:
- 使用
NVIC_SetPriority(IRQn, priority)函数为每个中断源(如USART1_IRQn,TIM2_IRQn等)设置优先级。 priority参数是一个 0 到 15(对于 4 位优先级)的整数。这个数值越小,表示该中断的优先级越高。- 这个
priority数值会根据你设置的优先级分组方案,被硬件自动拆解为对应的抢占优先级部分和子优先级部分。
- 使用
-
中断响应规则:
- 抢占(嵌套):一个高抢占优先级的中断请求可以立即打断正在执行的低抢占优先级的中断服务程序。
- 非抢占式排队:如果新来的中断请求的抢占优先级等于或低于当前正在执行的中断的抢占优先级,它不能抢占。此时:
- 如果其抢占优先级等于当前中断,且其子优先级更高,它会在当前中断完成后立即得到响应(在抢占优先级相同的挂起中断中优先)。
- 如果其抢占优先级低于当前中断,它必须等待当前中断及其所有更高抢占优先级中断完成后才能被响应。
- 子优先级作用时机:只在抢占优先级相同且多个中断同时(或几乎同时)挂起的场景下,决定哪个先被响应。它本身不能导致中断嵌套。
总结关键点:
- 抢占优先级:决定中断能否打断其他中断。数值小 -> 优先级高 -> 可抢占低抢占优先级的中断。
- 子优先级(响应优先级):决定在抢占优先级相同且并发时,谁先被响应。数值小 -> 优先级高 -> 在同抢占级中先执行。不能引发抢占。
- 分组决定:通过
NVIC_SetPriorityGrouping设置抢占优先级和子优先级各占多少位。 - 数值设置:使用
NVIC_SetPriority设置每个中断的优先级(0-15),数值小优先。硬件根据分组自动拆分该值。 - 整体优先级判断:
- 首先比较抢占优先级:抢占优先级高的中断 总是 优先于抢占优先级低的。
- 当抢占优先级相同时,才比较子优先级:子优先级高的中断优先响应。
示例(假设优先级分组为 2:4 个抢占级,4 个子级):
| 中断源 | NVIC_SetPriority 值 (4-bit) |
抢占优先级 | 子优先级 | 说明 |
|---|---|---|---|---|
| 中断 A | 3 (0b0011) |
0 (00) |
3 (11) |
抢占级最高 |
| 中断 B | 5 (0b0101) |
1 (01) |
1 (01) |
|
| 中断 C | 5 (0b0101) |
1 (01) |
1 (01) |
与 B 同级同时请求时顺序不确定(相同抢占和子优先级) |
| 中断 D | 6 (0b0110) |
1 (01) |
2 (10) |
抢占级同 B/C,但子优先级低于 B/C |
| 中断 E | 15 (0b1111) |
3 (11) |
3 (11) |
抢占级最低 |
- 如果 A 请求,它可以打断 B、C、D、E。
- 如果 B 正在执行,此时 A 请求:A 抢占 B。
- 如果 B 正在执行,此时 C 或 D 请求:它们不能抢占 B(抢占级相同或更低),必须等 B 完成。B 完成后:
- 如果 C 和 D 都在等待(抢占优先级都是1),比较子优先级:B(子1)、C(子1)、D(子2)。B和C子优先级相同且最高,它们会先执行(顺序由硬件仲裁,非优先级决定);执行完后再执行D。
- 如果 E 正在执行,A、B、C、D 任何一个请求都能抢占 E。
重要提示:
- 具体可用的优先级位数(4位、6位、8位等)取决于具体的 STM32 型号(Cortex-M0/M0+ 通常只有 2-4 级,M3/M4/M7 通常 4-8 级或更多)。查阅对应型号的参考手册。
- 复位后默认分组通常是组 0 (无抢占优先级,只有 16 个子优先级)。强烈建议在初始化时根据应用需求设置分组(通常用组2或组3)。
- 数值越小优先级越高这个规则对抢占优先级和子优先级都适用。
理解抢占优先级和子优先级的区别以及分组设置是配置STM32中断系统的核心。
stm32中断优先级分组
stm32中断优先级分组转载:http://news.eeworld.com.cn/mcu/article_2018053039408.html一、抢占优先级
资料下载
莫联雪
2022-01-14 15:04:46
STM32单片机中抢占优先级和响应优先级的表达方式解析
Cortex支行中断嵌套, 允许高优先级的中断抢占低优先级的中断。 Cortex M3/M4可支行多达256级的可编程
2019-10-14 16:31:45
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览