引言:
在掌握了 System Tick 的基本配置之后,本章将重点拆解内核外设(如 SysTick)与普通片内外设的中断优先级究竟如何比较?这个问题若不彻底厘清,会导致延时函数与其他中断冲突,程序行为混乱。本篇将重点解开“内核外设优先级一定更高”的常见误解。
本文逻辑链条:
1.确认内核外设与片内外设均使用 4 位二进制表示优先级。
2.内核外设没有自己的优先级分组寄存器,但比较时必须按照片内外设的分组方式解析。
3.数值越小优先级越高,默认配置为 15(最低)。
4.当软件优先级完全相同时,硬件中断编号(向量表位置)越小,优先级越高。
1. 中断优先级分组:内核外设的“被动解析规则”
核心概念如下:
优先级位数统一:在 STM32 中,内核外设(SysTick、PendSV)与片内外设(USART、TIM)均使用 4 个二进制位 表示中断优先级,可配置范围 0~15(2⁴-1)。这是两者比较的基础。
优先级分组差异如下:
片内外设:
可配置抢占/子优先级分组
内核外设:
不支持分组,只写完整4位数值
硬件仲裁:
强制按外设分组解析内核数值
这说明了一个重要的STM32底层逻辑:当两个中断同时发生,硬件仲裁器必须统一比较规则——先比较抢占优先级,若相同再比较子优先级。
假设分组2(高2位抢占,低2位子优先级)
SysTick 数值13(0b1101)→ 抢占3,子优先级1
内核外设的4位数值被“强制解读”为与片内外设分组定义一致的抢占位和子位,然后进行比较
常见误区:“内核外设是内核的一部分,所以它的中断优先级天然高于所有片内外设。”
实际应用中:比较时只看实际配置的 4 位数值(按外设分组解


2747

被折叠的 条评论
为什么被折叠?



