STM32HAL 快速入门(八):GPIO 中断 —— 从概念到工作流程
文章摘要:本文介绍了中断机制在嵌入式系统中的重要性。传统循环查询方式存在漏检信号的问题,而中断通过硬件主动通知CPU实现高效响应。文章详细阐述中断概念,类比生活中被门铃打断的场景,解释中断处理流程(保存现场→处理中断→恢复现场)。从硬件层面分析中断属于CPU异常的一种,并说明中断优先级处理机制。最后总结中断从初始化到执行的6个步骤,强调硬件自动完成核心环节,程序员只需配置中断和编写服务程序。下篇将
前言
大家好,这里是 Hello_Embed。前面我们用 “循环查询” 的方式处理 GPIO 输入(如按键、光敏传感器),但这种方式有个明显缺陷:如果循环中其他程序耗时较长,可能会错过输入信号(比如按键按下未被检测到)。为此,我们需要引入 “中断” 机制 —— 让硬件事件主动 “打断” CPU,实现高效响应。本篇先理解中断的基本概念和工作流程,下一篇深入 STM32 的中断体系结构。
一、为什么需要中断?
在循环查询模式中,CPU 需要不断检查引脚状态(如while(1)中反复调用HAL_GPIO_ReadPin)。如果循环中还有其他耗时操作(如复杂计算),当按键按下时,CPU 可能正忙于其他任务,导致按键动作被 “忽略”(次数丢失)。
中断的优势:无需 CPU 主动查询,当事件发生(如按键按下)时,硬件自动通知 CPU 暂停当前任务,优先处理事件,处理完成后再回到原任务 —— 就像生活中 “被门铃打断看书,开门后继续看书” 一样自然。
二、中断的基本概念
中断是指 “CPU 在执行程序过程中,被外部或内部事件打断,转而去处理该事件,处理完成后再返回原程序继续执行” 的机制。其核心过程可概括为:保存现场→处理中断→恢复现场。
- 生活类比:
你正在看书(执行主程序),门铃突然响起(中断事件):- 你夹上书签(保存现场:记录当前看到的页码);
- 去开门(处理中断:响应门铃事件);
- 回来后从书签处继续看书(恢复现场:回到被打断的位置)。
三、从硬件层面理解中断:CPU 与 “异常”
在计算机中,中断属于 “异常” 的一种 ——“异常” 是指任何打断 CPU 正常执行流程的事件。下图展示了 CPU 可能遇到的各类异常:
-
常见异常类型:
- 未定义指令异常:CPU 执行了无法识别的指令,可能导致卡死;
- 数据访问异常:CPU 读取 / 写入内存时,内存地址无效或受保护;
- 复位异常:按下复位键,CPU 重启(最彻底的异常);
- 中断:由外部硬件(如按键、定时器、串口)触发的异常(是我们编程中最常用的异常类型)。
-
优先级处理:当多个异常同时发生时,CPU 会根据预设的优先级,先处理优先级高的异常。
-
核心逻辑:无论哪种异常,CPU 都会在检测到后,跳转到一个固定地址执行对应的处理程序 —— 这个地址称为 “异常向量”,而跳转动作由硬件自动完成。
四、中断的处理流程
中断从初始化到执行的完整流程可分为 6 步,涵盖软件配置和硬件自动操作:
- 初始化(软件配置)
- 设置中断源:让硬件(如按键引脚)具备产生中断的能力(例如配置引脚为 “中断触发模式”);
- 配置中断控制器:设置中断的优先级(当多个中断同时发生时,决定处理顺序);
- 使能 CPU 总中断:打开 CPU 对中断的响应开关(相当于 “允许被打扰”)。
- CPU 执行主程序
中断初始化完成后,CPU 正常执行主程序(如循环处理其他任务)。 - 中断事件产生
当触发条件满足(如按键按下),中断源(按键引脚)向中断控制器发送中断请求信号。 - CPU 检测中断
CPU 每执行完一条指令,都会主动检查是否有中断请求 —— 这一步由硬件自动完成,无需程序员干预。 - CPU 响应中断
若检测到中断请求,CPU 立即暂停当前程序,准备处理中断。 - 执行中断服务程序(ISR)
- 对于不同的异常 / 中断,CPU 会跳转到对应的 “异常向量地址”(该地址通常只包含一条跳转指令);
- 从异常向量地址跳转到具体的中断处理函数(由程序员编写),完成三件事:
- 保存现场:将 CPU 寄存器的当前值存入栈中,确保后续能恢复;
- 处理中断:根据中断源(如判断是哪个按键按下)执行具体操作;
- 恢复现场:从栈中取出寄存器值,回到被中断的主程序继续执行。
注意:步骤 3~5(中断产生、检测、响应)由硬件自动完成,程序员主要关注步骤 1(初始化)和步骤 6 中的 “处理中断” 部分。
中断流程总结

从图中可清晰看到:中断的触发、跳转至处理函数等核心环节由硬件主导,程序员的工作集中在 “配置中断” 和 “编写中断服务程序” 上。
结尾
本文介绍了中断的基本概念、引入原因和处理流程,核心是理解 “硬件主动通知 CPU” 的机制如何解决循环查询的效率问题。下一篇,我们将聚焦 STM32 的中断体系结构深入理解中断的作用,后续再写代码来进行实战。
Hello_Embed 继续带你从理论到实战,逐步掌握 STM32 的中断技术,敬请期待~
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)