1. 项目概述
作为一名嵌入式开发者,我最近在系统学习STM32的中断系统。外部中断(EXTI)作为STM32最常用的功能之一,在实际项目中应用广泛。本文将详细记录我在学习江协科技STM32教程第五章"EXTI外部中断"的完整笔记,包含从理论到实践的全面解析。
在工业控制、智能家居等领域,外部中断常用于处理紧急事件,比如按键触发、传感器信号等。相比轮询方式,中断能更高效地响应外部事件,减少CPU资源浪费。通过本章学习,我掌握了STM32中断系统的完整配置流程,并实现了对射式红外传感器和旋转编码器的中断计次功能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中断系统基础解析
2.1 中断概念与工作原理
中断机制是现代微控制器的核心功能之一。简单来说,中断就是CPU在执行主程序时,被更高优先级的事件"打断",转去处理该事件,处理完毕后再返回原程序继续执行。
想象你在看书(主程序),突然手机响了(中断触发),你会先标记看到哪一页(保存现场),接完电话(执行中断服务程序)后再继续看书(恢复现场)。STM32的中断工作原理与此类似:
- 中断源:可以是外部引脚电平变化、定时器溢出、串口收到数据等
- 中断请求:中断源向NVIC(嵌套向量中断控制器)发送请求
- 中断响应:若中断未被屏蔽且优先级足够高,CPU暂停当前任务
- 现场保护:自动将关键寄存器值压入堆栈
- 执行ISR:跳转到对应的中断服务程序
- 恢复现场:从堆栈恢复寄存器值
- 返回主程序:继续执行被中断的代码
2.2 STM32中断特性
STM32F1系列提供了强大的中断管理功能:
- 68个可屏蔽中断通道:包括16个外部中断线(EXTI)、定时器中断、通信接口中断等
- 多级优先级管理:每个中断可设置抢占优先级和响应优先级
- 低延迟响应:从触发到进入ISR最快只需6个时钟周期
- 灵活的中断源映射:通过AFIO可将GPIO引脚灵活配置到不同EXTI线
注意:STM32的中断向量表固定在Flash起始位置,上电后由Bootloader加载。用户不能修改向量表位置,但可以重定向其中的函数指针。
3. EXTI外部中断详解
3.1 EXTI功能架构
EXTI(External Interrupt/Event Controller)是STM32专门用于处理外部中断的模块,其主要特点包括:
-
输入源选择:
- 16个GPIO引脚(通过AFIO配置)
- 3个内部信号(PVD输出、RTC闹钟、USB唤醒)
-
触发方式:
- 上升沿触发
- 下降沿触发
- 双边沿触发
- 软件触发
-
输出模式:
- 中断模式:产生中断请求到NVIC
- 事件模式:直接触发其他外设(如DMA)不经过CPU

3.2 GPIO与EXTI的映射关系
STM32的GPIO引脚与EXTI线的对应关系需要特别注意:
- 每个EXTI线只能连接一个GPIO引脚(如EXTI0只能连PA0/PB0/PC0等中的一个)
- 同一编号的引脚不能同时使用(PA0和PB0不能同时作为EXTI0的输入)
- EXTI15_10和EXTI9_5是分组中断,需要软件区分具体引脚
实际项目中,我常用以下配置原则:
- 优先使用未被占用的EXTI线
- 高频率中断源分配独立EXTI线
- 低频率或可容忍延迟的中断可共享EXTI线
4. 外部中断配置实战
4.1 硬件环境搭建
本次实验使用以下硬件:
- STM32F103C8T6最
