NVIC 中断系统 完全笔记 —— STM32F103 标准库实现

NVIC 中断系统 完全笔记 —— STM32F103 标准库实现
优先级分组 + 抢占优先级/响应优先级 + 中断嵌套 + EXTI外部中断示例一、NVIC 是什么?先建立准确的直觉1.1 没有优先级管理时假设芯片里所有中断都是"平等的",谁先来谁先服务,不能打断: 串口正在处理一个不太紧急的接收中断(耗时较长) 这时候一个紧急的过流保护中断(比如电机驱动过流)发生了 → 但因为没有优先级机制,过流中断只能排队等串口中断处理完 → 等轮到处理过流时,可能MOS管已经烧了 问题: 真实系统里,中断的"紧急程度"是不一样的 没有优先级机制,就无法保证"更紧急的事情优先被处理" 也无法实现"中断嵌套"(紧急中断打断不紧急中断,处理完再回来)1.2 有了 NVICNVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器): ARM Cortex-M 内核自带的中断控制器(不是ST自己设计的外设,是内核的一部分) 给每个中断分配"优先级",优先级数字越小,优先级越高 支持中断嵌套:高优先级中断可以打断正在执行的低优先级中断服务程序(ISR) 配置好之后,CPU的行为变成: 串口中断(低优先级)正在处理 → 过流中断(高优先级)发生 → 立即打断串口中断,先处理过流保护 → 处理完过流中断 → 自动回来继续处理没做完的串口中断 关键认知: NVIC 不是"哪个外设发中断"这件事本身, 而是"多个中断同时/先后发生时,谁先被CPU响应、能不能互相打断"的仲裁规则 这跟 DMA 解放 CPU 搬运工作是不同维度的问题—— DMA 解决"要不要CPU参与",NVI