ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

6、中断(下)

2026/8/14 10:50:31 拓冰建站 浏览量
6、中断(下)

3 EXTI

3.1 EXTI基本概念

External (Extended) interrrupt/evernt controller(EXTI),即外部(拓展)中断事件控制器。F1系列中,EXTI共有19或20条线用于检测中断。

中断与事件的概念:中断需要进入NVIC,需要CPU处理;而事件不需要进入NVIC,仅用于内部硬件自动控制。

3.2 EXTI线映射

EXTI0 ~ EXTI15:对应GPIO0到15号引脚

EXTI16:连接PVD(可编程电压检测器)输出

EXTI17:连接到RTC(实时时钟)事件

EXTI18:连接到USD唤醒事件

EXTI19:仅存在于F105/107产品,用于以太网唤醒事件

3.3 EXTI主要特性

对于F1/F4/F7系列,每条EXTI线都可以进行单独配置,选择其类型、触发方式等参数。

3.4 EXTI寄存器

寄存器名称

位宽

功能

备注

中断屏蔽寄存器IMR

32,仅0~19可用

0为屏蔽对应线的中断请求,1为使能对应线的中断请求

事件屏蔽寄存器EMR

32,仅0~19可用

0为屏蔽对应线事件产生,1为使能对应线的事件产生

该寄存器不常用

上升沿触发选择寄存器RTSR

32,仅0~19可用

0为屏蔽对应线的上升沿触发,1为使能对应线的上升沿触发

下降沿触发选择寄存器FTSR

32,仅0~19可用

0为屏蔽对应线的下降沿触发,1为使能对应线的下降沿触发

软件中断事件寄存器SWIER

32,仅0~19可用

0表示无效果,写1后会立即产生一个与硬件触发等效的中断/事件请求

用于代码调试

挂起寄存器PR

32,仅0~19可用

当中断被使能时,对应的PR寄存器位会被写入1

在中断服务函数执行完成后必须清除对应PR位

4 AFIO

4.1 AFIO简介

Alternate Function I/O(AFIO),即复用功能输入/输出模块,负责管理具有多个功能或搭载了多个外设的引脚。

4.2 AFIO功能

1、外设引脚重映射:将某个外设的默认引脚重映射到其他引脚上,以解决不同外设争用同一引脚的冲突

2、外部中断引脚配置:将选择的GPIO引脚连接到EXTI中断线上

3、事件输出控制:将内部的事件信号引到指定的GPIO引脚上用于触发或同步外部的设备

4.3 AFIO寄存器

寄存器名称

位宽

功能

备注

事件控制寄存器EVCR

32,仅0~7位有效

位0~3选择事件输出的GPIO引脚;位4~6选择事件输出的GPIO端口;位7写1使能事件输出功能,写0则为禁止

HAL库中无直接对应的宏,需要直接操作寄存器

复用重映射和调试I/O配置寄存器MAPR

32

位24~26用于调试接口(JTAG/SWD)配置,其他位用于外设引脚重映射

位24~26可选值及详细功能见下表

外部中断配置寄存器EXTICR1~EXTICR4

4×32

4个寄存器分别控制EXTI0~15,负责将具体的GPIO引脚连接到对应的EXTI线上

通常不需要操作

调试端口映像

位24~26

调试端口状态

SWJ I/O引脚状态

PA13

PA14

PA15

PB3

PB4

000

完全SWJ(JTAG-DP和SW-DP)

不可用

不可用

不可用

不可用

不可用

001

完全SWJ,但没有JNTRST

不可用

不可用

不可用

不可用

可用

010

关闭JTAG-DP,开启SW-DP

不可用

不可用

可用

可用

可用

100

关闭JTAG-DP和SW-DP

可用

可用

可用

可用

可用

备注

不建议使用关闭JTAG-DP和SW-DP(100),会使芯片无法再通过调试器连接

5 中断的使用

5.1中断配置步骤

  1. 使能GPIO时钟
  2. 设置GPIO参数
  3. 使能AFIO时钟
  4. 设置EXTI与IO的关系
  5. 设置EXTI屏蔽和上下沿触发
  6. 设置NVIC:设置优先级分组、优先级和使能中断

HAL_GPIO_Init()可同时初始化GPIO、AFIO和EXTI,只需单独初始化NVIC即可。

5.2 中断服务函数

在HAL库中,中断处理分为入口函数、通用处理函数和回调函数三步。

1、入口中断函数:该函数功能为调用HAL库提供的通用处理函数,其函数形式为:

void EXTIx_IRQHandler(void)

在STM32中,x仅有0、1、2、3、4、9_5、15_10七个。

  1. 通用处理函数:在入口中断函数中被调用,其功能有3个:
  2. 检查有效性:检测该EXTI中断线是否被使能以及是否有挂起标志
  3. 清除中断标志:向PR寄存器写1清除中断标志
  4. 调用用户回调:调用下一步的回调函数

3、用户回调函数:该函数在HAL库中被弱定义,允许被用户重写。该函数执行时间必须极短,否则会阻塞其他中断或主循环。函数形式为:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

其中GPIO_Pin用以区分触发中断的引脚编号