1. STM32外部中断(EXTI)基础概念
在嵌入式系统开发中,外部中断(EXTI)是最常用的硬件功能之一。STM32系列微控制器的EXTI控制器提供了灵活的外部中断/事件管理机制,允许开发者通过GPIO引脚或内部外设触发中断请求。
EXTI控制器的主要特点包括:
- 支持多达40个可编程边沿检测器(具体数量取决于STM32型号)
- 每个中断/事件线可独立配置为上升沿、下降沿或双边沿触发
- 支持软件触发中断/事件
- 可将事件输出到PVD(可编程电压检测器)和RTC闹钟
实际项目中,我经常发现新手容易混淆"中断"和"事件"的区别。简单来说:中断会触发CPU执行中断服务程序(ISR),而事件可以直接触发外设操作(如DMA传输)而不需要CPU介入。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. EXTI硬件架构解析
2.1 STM32 EXTI控制器结构
EXTI控制器的核心由以下几部分组成:
- 边沿检测电路:检测输入信号的上升沿、下降沿或双边沿
- 中断屏蔽寄存器(IMR):控制哪些线产生中断
- 事件屏蔽寄存器(EMR):控制哪些线产生事件
- 上升沿触发选择寄存器(RTSR)
- 下降沿触发选择寄存器(FTSR)
- 软件中断事件寄存器(SWIER)
以STM32F4系列为例,EXTI控制器支持23条外部中断/事件线,其中:
- 线0~15:对应GPIO的Pin0~Pin15
- 线16:连接到PVD输出
- 线17:连接到RTC闹钟事件
- 线18:连接到USB OTG FS唤醒事件
- 线19~22:连接到以太网唤醒事件、RTC入侵和时间戳事件等
2.2 EXTI与NVIC的关系
EXTI控制器产生的中断请求需要通过NVIC(嵌套向量中断控制器)进行优先级管理和调度。在配置EXTI时,必须同时配置对应的NVIC通道。例如:
- EXTI线0中断对应NVIC的EXTI0_IRQn
- EXTI线1中断对应NVIC的EXTI1_IRQn
- ...
- EXTI线15_10中断对应NVIC的EXTI15_10_IRQn(多条线共享一个中断向量)
3. EXTI配置实战指南
3.1 使用HAL库配置EXTI
以下是使用STM32 HAL库配置外部中断的典型步骤:
- 初始化GPIO引脚为输入模式:
c复制GP
