STM32F4xx 中断管理机制(IRQ、NVIC、MSI)
前置术语全称说明
- IRQ:Interrupt Request,中断请求 IRQ Line = 中断请求信号线,外设通往 NVIC 的物理信号线路
- NVIC:Nested Vectored Interrupt Controller,嵌套向量中断控制器
- MSI:Multi-Speed Internal,多速内部 RC 时钟(系统时钟源,整套中断硬件运行的时钟基础)
- EXTI:External Interrupt,外部 GPIO 引脚中断
一、中断完整两级传输模型
任意一次中断从产生到被 CPU 响应,必须依次经过中断源层、NVIC 调度层两道关卡,两层都有独立中断开关,只有两层全部打开,中断才能最终送达 CPU。
1)第一阶段:中断源层(外设 IRQ 信号产生与本地屏蔽)
(1)中断源定义
中断源指能够产生中断事件的硬件单元,分两类:
- 片内外设:TIM 定时器、USART 串口、SPI、ADC、DMA 等;
- 外部引脚:GPIO 引脚电平变化,对应 EXTI 外部中断。
每一个支持中断的硬件单元,都引出一根专属 IRQ Line(中断请求信号线),这条线路硬件直连内核 NVIC 的输入通道。
(2)中断源本地使能 / 屏蔽逻辑
外设内部自带中断允许寄存器,是中断传输第一道闸门:
- 外设检测到触发事件(串口接收完成、定时器溢出、引脚跳变),硬件自动置位中断标志位;
- 若外设寄存器内该路中断使能位开启,中断信号才会通过 IRQ Line 向上发送给 NVIC;
- 若外设中断使能关闭,哪怕硬件事件触发、中断标志置 1,信号也会被拦截,不会输出 IRQ 中断请求到 NVIC。
概括:中断源负责产生中断事件、第一层过滤 IRQ 中断信号。
2)第二阶段:NVIC 调度层(全局中断总控单元)
NVIC 全称 Nested Vectored Interrupt Controller(嵌套向量中断控制器),属于 Cortex-M4 内核内置硬件模块。芯片所有外设 IRQ 中断、内核异常全部接入 NVIC,只有 NVIC 拥有向 CPU 提交中断请求的权限,是整个芯片的中断调度核心机构。
NVIC 两大核心管控功能
① 独立通道使能 / 屏蔽(第二道中断闸门)
IRQ 信号经中断请求线送入 NVIC 后,NVIC 拥有独立寄存器(ISER/ICER)单独控制每一路 IRQ 通道:
- 通道失能:NVIC 收到 IRQ 信号直接丢弃,不向 CPU 上报;
- 通道使能:NVIC 锁存本次中断请求,进入优先级仲裁判断。
两层屏蔽区分:
- 外设寄存器:控制「是否把 IRQ 信号发给 NVIC」;
- NVIC 寄存器:控制「收到 IRQ 信号后,要不要上报 CPU」; 两级开关必须同时开启,中断才具备响应条件。
② 中断优先级仲裁与嵌套管理
STM32F4 采用 8 位优先级寄存器,拆分出抢占优先级、子优先级,支持 5 种优先级分组:
- 抢占优先级:决定中断嵌套能力。高抢占优先级的 IRQ 中断,可以打断当前正在执行的低抢占优先级中断,实现中断嵌套;(0~15 数字越低,优先级越高)
- 子优先级(响应优先级):仅用于同一抢占优先级下多路中断同时触发时,规定执行先后顺序,不能打断正在运行的中断。
运行逻辑: CPU 正在执行主程序 / 低优先级中断时,NVIC 收到更高优先级 IRQ 请求 → 硬件自动保存现场,跳转至对应中断服务函数; 若新 IRQ 优先级更低,则将该中断标记为挂起状态,等待当前代码执行完毕后再处理。
二、完整中断传输链路(串联 IRQ、NVIC)
外设触发事件 → 硬件置外设中断标志
→ 判断外设中断使能是否打开
→ 关闭:中断终止,无 IRQ 信号输出
→ 开启:生成 IRQ 中断请求,通过 IRQ Line 送入 NVIC
→ 判断 NVIC 对应 IRQ 通道是否使能
→ 关闭:NVIC 屏蔽,中断挂起丢弃
→ 开启:NVIC 对比当前运行程序 / 中断优先级
→ 新 IRQ 优先级更高:向 CPU 提交中断,跳转中断服务函数 → 新 IRQ 优先级更低:存入挂起队列,等待当前任务结束再响应
三、MSI 时钟对整套中断机制的底层支撑
MSI(Multi-Speed Internal,多速内部 RC 时钟)是芯片系统时钟源,是所有中断硬件正常工作的底层基础:
- 外设必须配置时钟才能检测事件、生成 IRQ 中断信号;外设时钟关闭时,中断源完全失效;
- NVIC 属于内核附属硬件,依赖内核时钟运行,无时钟则无法完成 IRQ 优先级仲裁、向 CPU 上报中断;
- MSI 无需外部晶振,可作为系统时钟,在低功耗、无外部晶振场景下保障 IRQ、NVIC 整套中断体系正常运行。
四、全文核心总结
- 中断两道闸门:外设本地中断开关(控制 IRQ 输出)+ NVIC 通道开关(控制 IRQ 上报 CPU);
- IRQ(Interrupt Request,中断请求):外设向 NVIC 传输中断事件的信号载体;
- NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器):芯片唯一中断调度中心,负责 IRQ 通道开关、优先级仲裁、中断嵌套管理;
- MSI(Multi-Speed Internal,多速内部 RC 时钟):整套 IRQ、NVIC 中断链路运行的底层时钟基准,无时钟则全部中断功能失效。
更多推荐

所有评论(0)