短文标题NVIC中断的“裁判员”谁优先级高谁先执行你有没有想过一个问题USART1和TIM2中断同时发生CPU先处理哪个NVIC说了算。NVICNested Vectored Interrupt Controller嵌套向量中断控制器是Cortex-M内核内置的中断管理器。NVIC的核心职责接收所有外设的中断请求IRQ比较优先级决定先响应哪个管理中断嵌套高优先级打断低优先级提供硬件向量机制硬件自动从向量表取中断服务函数地址无需软件判断中断源优先级配置每个中断可以配置两个优先级由分组决定4个bit如何分配抢占优先级数值越小越高决定能不能打断别人子优先级数值越小越高抢占相同时决定谁先执行但不能互相打断抢占优先级不同的中断可以嵌套抢占相同的只能排队。优先级数值范围0最高~ 15最低由优先级分组PRIGROUP决定抢占和子优先的位数分配。中断向量表与硬件向量 中断向量表存放在Flash起始地址0x08000000每个中断对应一个函数指针中断服务函数地址。中断发生时NVIC硬件自动压栈现场8个寄存器从向量表取ISR地址跳转执行不需要软件查中断标志硬件直达响应快。嵌套管理高抢占优先级中断可以打断低抢占优先级中断的执行形成中断嵌套。执行顺序低优先级ISR执行中高优先级到来 → 低优先级被暂停 → 高优先级执行 → 恢复低优先级。高优先级中断应短小精悍避免“饿死”低优先级中断。尾链优化Tail-Chaining中断A未退出中断B已挂起。传统架构出栈A → 压栈B → 执行B。Cortex-M尾链跳过A的出栈和B的压栈直接执行B。连续中断响应时间降至6个时钟周期。这个故事的启示NVIC不是“外设”是Cortex-M内核的一部分。中断优先级不是摆设是系统的“交通规则”。设对了系统稳设错了中断堵死系统崩。写在最后中断配置是系统工程看需求哪些要打断高抢占哪些要排队同抢占抢占决定打断子优先决定顺序。本文灵感源于于振南《新概念ARM32单片机》教程第5.4节“ARM32中断控制器原理”。觉得有用点赞、转发让更多人看懂NVIC的“裁判”逻辑。