【物联网学习笔记】中断

第一章 中断核心基础概念

先搞懂核心名词,是理解中断机制的前提,所有术语均对应课件核心定义。

  1. 中断通俗理解:CPU 正在执行主程序时,收到紧急的中断请求,会暂停当前主程序,跳转去处理中断事件;处理完成后,再回到主程序被打断的位置继续执行。
  2. 中断向量 中断服务程序(处理中断事件的函数)在内存中的入口地址。由于 CPU 随时可能收到中断请求,因此中断处理程序必须常驻内存固定空间,其入口地址就叫中断向量。
  3. 中断向量表存放芯片所有中断向量的连续存储区。处理器通过向量表可以自动定位中断程序的入口,大幅缩短中断响应的时间。
  4. STM32 中断向量表关键地址 STM32 内部闪存起始地址为0x08000000,中断向量表从此处开始排布:
    • 0x08000000:栈顶地址
    • 0x08000004:复位中断向量(中断向量表起始核心地址)
    • 后续其他中断向量地址:0x08000004 + n,依次排列

第二章 STM32 程序启动与中断跳转基础流程

清晰梳理从芯片上电复位,到主程序运行,再到中断触发执行的完整链路,解决初学者 "程序到底怎么跑起来、中断怎么插进来" 的核心疑问。

  1. 复位启动 :STM32 复位后,从0x08000000处取出复位中断向量的地址,跳转执行复位中断服务程序。
  2. 进入主程序 :复位中断服务程序执行完成后,最终跳转至 C 语言的main函数(main函数通常为死循环,是一个永不返回的函数)。
  3. 中断触发main函数执行过程中,若发生中断请求,STM32 硬件机制会强制将 PC 指针拉回中断向量表。
  4. 中断执行:根据中断源,从中断向量表中找到对应中断服务程序的入口地址,跳转执行。
  5. 中断返回 :中断服务程序执行完毕后,程序返回至main函数,继续执行被打断的主程序。

第三章 中断优先级(核心重点・初学者高频易错区)

中断优先级通过8 位宽度的优先级配置寄存器配置,理论可配置范围 0~255,实际可用优先级数量由芯片设计商决定(常见 STM32 仅使用高 4 位 bit7~bit4,最多支持 16 级可编程优先级)。

3.1 核心优先级规则

优先级数值越小,优先级越高(初学者最容易记反的核心点)。

3.2 优先级的两个核心维度

表格

维度 核心作用 关键特性
抢占优先级 决定中断能否嵌套 高抢占优先级的中断,可以打断正在执行的低抢占优先级中断,实现中断嵌套
响应优先级 同抢占优先级下的中断仲裁 仅在两个中断抢占优先级相同时生效,无法触发中断嵌套

3.3 中断优先级仲裁顺序(优先级从高到低,不可颠倒)

  1. 先判断抢占优先级:抢占优先级越高(数值越小),越优先处理,且可嵌套低抢占优先级中断;
  2. 抢占优先级相同时,再判断响应优先级:响应优先级越高(数值越小),越优先处理;
  3. 抢占优先级、响应优先级均相同时,最后看中断向量表排位:表中排位越靠前的中断,越优先处理。

第四章 中断嵌套

4.1 定义

中断系统正在执行一个中断服务程序时,收到另一个抢占优先级更高的中断请求,会暂时终止当前低优先级的中断服务,先处理高优先级中断;高优先级中断处理完毕后,再返回继续执行被打断的低优先级中断服务,这个过程就是中断嵌套。

4.2 中断嵌套核心铁则(必须牢记)

  1. 只有抢占优先级才能决定中断嵌套,响应优先级完全不支持中断嵌套;
  2. 后发生的高抢占优先级中断,可以打断先发生的低抢占优先级中断;
  3. 后发生的中断,若抢占优先级低于 / 等于正在执行的中断,必须等待当前中断处理完毕后,才能被执行。

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 进入中断(核心由硬件自动完成)

  1. 中断源发出中断请求,硬件自动判断处理器是否允许中断、该中断是否被屏蔽,若条件满足,打断当前正在运行的程序;
  2. 处理器自动将当前核心寄存器(PC、xPSR、R0-R3、R12、LR)的内容压入堆栈,保存现场(保证中断返回后能正常继续执行原程序);
  3. 根据中断向量号,到中断向量表中查找对应中断服务程序的入口地址,跳转执行。

5.2 中断处理(核心由软件执行)

  1. 执行用户编写的中断服务程序(函数格式:xxx_Handler(void));
  2. 执行过程严格遵循中断优先级与中断嵌套规则。

5.3 退出中断(硬件 + 软件配合完成)

  1. 中断服务程序执行完毕后,将堆栈中保存的寄存器现场信息弹出,恢复到原来的寄存器中;
  2. 程序返回至原先被中断的位置,继续执行被打断的程序。

注意:本类开发板及竞赛少用中断,故无例程

相关推荐
是大强2 小时前
RS-232和RS-485区别
嵌入式硬件
古译汉书2 小时前
【IoT死磕系列】Day 6:工业控制底层大动脉—CAN总线
linux·网络·arm开发·单片机·物联网·tcp/ip
snowfoootball2 小时前
优先队列/堆 题目讲解
学习·算法
weixin_468635292 小时前
Pandas 速查笔记
笔记·pandas
shangjian0072 小时前
AI-大语言模型LLM-LangChainV1.0学习笔记-OpenAI类和ChatOpenAI类
人工智能·学习·语言模型
yzx9910132 小时前
从单一到融合:机器学习、多模型学习与大语言模型的全面综述
学习·机器学习·语言模型
shangjian0072 小时前
AI-大语言模型LLM-LangChainV1.0学习笔记-模型不同调用方式的差异
人工智能·学习·语言模型
flyyyya2 小时前
【AI学习从零至壹】AI agent自动化工作流
人工智能·学习·自动化
LCMICRO-133108477462 小时前
长芯微LSC3490完全P2P替代MAX3490,3.3V 高静电防护 10M 全双工 RS485/RS422 收发器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发