第一章 中断核心基础概念
先搞懂核心名词,是理解中断机制的前提,所有术语均对应课件核心定义。
- 中断通俗理解:CPU 正在执行主程序时,收到紧急的中断请求,会暂停当前主程序,跳转去处理中断事件;处理完成后,再回到主程序被打断的位置继续执行。
- 中断向量 中断服务程序(处理中断事件的函数)在内存中的入口地址。由于 CPU 随时可能收到中断请求,因此中断处理程序必须常驻内存固定空间,其入口地址就叫中断向量。
- 中断向量表存放芯片所有中断向量的连续存储区。处理器通过向量表可以自动定位中断程序的入口,大幅缩短中断响应的时间。
- STM32 中断向量表关键地址 STM32 内部闪存起始地址为
0x08000000,中断向量表从此处开始排布:0x08000000:栈顶地址0x08000004:复位中断向量(中断向量表起始核心地址)- 后续其他中断向量地址:
0x08000004 + n,依次排列
第二章 STM32 程序启动与中断跳转基础流程
清晰梳理从芯片上电复位,到主程序运行,再到中断触发执行的完整链路,解决初学者 "程序到底怎么跑起来、中断怎么插进来" 的核心疑问。
- 复位启动 :STM32 复位后,从
0x08000000处取出复位中断向量的地址,跳转执行复位中断服务程序。 - 进入主程序 :复位中断服务程序执行完成后,最终跳转至 C 语言的
main函数(main函数通常为死循环,是一个永不返回的函数)。 - 中断触发 :
main函数执行过程中,若发生中断请求,STM32 硬件机制会强制将 PC 指针拉回中断向量表。 - 中断执行:根据中断源,从中断向量表中找到对应中断服务程序的入口地址,跳转执行。
- 中断返回 :中断服务程序执行完毕后,程序返回至
main函数,继续执行被打断的主程序。
第三章 中断优先级(核心重点・初学者高频易错区)
中断优先级通过8 位宽度的优先级配置寄存器配置,理论可配置范围 0~255,实际可用优先级数量由芯片设计商决定(常见 STM32 仅使用高 4 位 bit7~bit4,最多支持 16 级可编程优先级)。
3.1 核心优先级规则
优先级数值越小,优先级越高(初学者最容易记反的核心点)。
3.2 优先级的两个核心维度
表格
| 维度 | 核心作用 | 关键特性 |
|---|---|---|
| 抢占优先级 | 决定中断能否嵌套 | 高抢占优先级的中断,可以打断正在执行的低抢占优先级中断,实现中断嵌套 |
| 响应优先级 | 同抢占优先级下的中断仲裁 | 仅在两个中断抢占优先级相同时生效,无法触发中断嵌套 |
3.3 中断优先级仲裁顺序(优先级从高到低,不可颠倒)
- 先判断抢占优先级:抢占优先级越高(数值越小),越优先处理,且可嵌套低抢占优先级中断;
- 抢占优先级相同时,再判断响应优先级:响应优先级越高(数值越小),越优先处理;
- 抢占优先级、响应优先级均相同时,最后看中断向量表排位:表中排位越靠前的中断,越优先处理。
第四章 中断嵌套
4.1 定义
中断系统正在执行一个中断服务程序时,收到另一个抢占优先级更高的中断请求,会暂时终止当前低优先级的中断服务,先处理高优先级中断;高优先级中断处理完毕后,再返回继续执行被打断的低优先级中断服务,这个过程就是中断嵌套。
4.2 中断嵌套核心铁则(必须牢记)
- 只有抢占优先级才能决定中断嵌套,响应优先级完全不支持中断嵌套;
- 后发生的高抢占优先级中断,可以打断先发生的低抢占优先级中断;
- 后发生的中断,若抢占优先级低于 / 等于正在执行的中断,必须等待当前中断处理完毕后,才能被执行。
4.3 典型场景示例
- 可嵌套场景:A 中断抢占优先级 1,B 中断抢占优先级 2。正在执行 B 中断时,A 中断触发,A 会打断 B,先执行 A,A 执行完再回来执行 B。
- 不可嵌套场景:A、B 中断抢占优先级相同,正在执行 A 时,B 触发,B 必须等 A 执行完才能执行。
- 同优先级同时触发:A、B 中断同时触发,抢占优先级相同,A 的响应优先级更高,先执行 A,再执行 B。
第五章 完整中断处理全流程
整个流程分为进入中断、中断处理、退出中断三大阶段,对应课件核心步骤,清晰标注硬件 / 软件执行的动作。
5.1 进入中断(核心由硬件自动完成)
- 中断源发出中断请求,硬件自动判断处理器是否允许中断、该中断是否被屏蔽,若条件满足,打断当前正在运行的程序;
- 处理器自动将当前核心寄存器(PC、xPSR、R0-R3、R12、LR)的内容压入堆栈,保存现场(保证中断返回后能正常继续执行原程序);
- 根据中断向量号,到中断向量表中查找对应中断服务程序的入口地址,跳转执行。
5.2 中断处理(核心由软件执行)
- 执行用户编写的中断服务程序(函数格式:
xxx_Handler(void)); - 执行过程严格遵循中断优先级与中断嵌套规则。
5.3 退出中断(硬件 + 软件配合完成)
- 中断服务程序执行完毕后,将堆栈中保存的寄存器现场信息弹出,恢复到原来的寄存器中;
- 程序返回至原先被中断的位置,继续执行被打断的程序。
注意:本类开发板及竞赛少用中断,故无例程