1397 字
7 分钟
EXTI外部中断学习小结

中断系统简介#

其实中断嵌套和函数调用有着很大的相似性,不是吗?

中断向量表#

中断跳转由于硬件限制,只能跳到固定的地址执行程序。为了能让硬件跳转到不固定的中断函数,就需要在内存维护一个固定的列表地址,中断发生后,先跳到这个固定位置,之后再跳到中断函数。

NVIC(嵌套中断向量控制器)#

分配中断优先级和管理外设,如图:

抢断优先级和响应优先级#

可以这样说,如果比作医院,响应优先级高可以插队排队,而抢断优先级高,可以直接把正在接诊的病人拉走,自己先来(抢断当前中断)。

  • 抢占优先级(Preemption Priority):决定能不能打断别人(中断嵌套)。数值越小,级别越高。
  • 响应优先级(Subpriority / 响应优先级):决定能不能插队。当两个中断同时发生,且抢占优先级相同时,响应优先级高的先执行。但它不能打断正在执行的中断。

优先级寄存器有4位,(0~15,即二进制 0000 ~ 1111)总共只能表示16个等级。但系统需要区分两种不同的优先级概念。

为了兼顾这两种需求,硬件设计允许你把这4个位切成两半,一部分给抢占,一部分给响应。这就是“高n位”和“低4-n位”的来源。当然,这个用来区分四位从哪里切割划分给抢占和响应的、至关重要的 n 是由我们在代码里决定的。在STM32中,n可以取0、1、2、3、4,对应5种优先级分组(由 NVIC_PriorityGroupConfig() 函数设置)。

假设这4位寄存器的二进制值是 1010(十进制10)。

  • 如果 n = 2:
    • 高2位(第3、2位):10(二进制)= 2(抢占优先级)
    • 低2位(第1、0位):10(二进制)= 2(响应优先级)
  • 如果 n = 3:
    • 高3位(第3、2、1位):101(二进制)= 5(抢占优先级)

这里根据四位二进制和分组规格,大肥鱼整理了一个表格:

分组 (n)高n位(抢占优先级)低4-n位(响应优先级)抢占级数响应级数
n=00位4位1级 (无嵌套)16级
n=11位3位2级8级
n=22位2位4级4级
n=33位1位8级2级
n=44位0位16级1级 (全嵌套)

EXTI中断#

简而言之,EXTI是由电平变化产生的中断:

  • 上升沿:从低电平 → 高电平产生中断
  • 下降沿:同上
  • 双边沿:上升沿 + 下降沿
  • 软件触发:由代码触发

但是有一个问题,相同的Pin不能同时触发中断,比如 PA6 与 PB6,PA0 与 PB0 这样的。

由于外部中断可以从低功耗下唤醒STM32的功能,于是 PVD输出、RTC闹钟 也过来凑热闹,需要借助外部中断实现,占了四个输出通道。

事件响应用于通向其他外设,触发其他外设的操作。

EXTI基本结构#

GPIO的16个引脚进入AFIO,但EXTI只有16个通道,所以说有AFIO这个数据选择器,可以从前面GPIO外设的16个引脚里面选一个接入EXTI。

现在就回答了这个问题,为什么相同的Pin不能同时触发中断,因为以GPIOA为例子,冲突只发生在 “数字后缀相同” 的引脚之间。规则如下:

  • PA7(后缀是7) → 经过AFIO多路复用器 → 连到 EXTI7 这根线。
  • PB6(后缀是6) → 经过AFIO多路复用器 → 连到 EXTI6 这根线。

因为 EXTI6 和 EXTI7 是两根独立的线,所以 PA7和PB6可以同时做外部中断,互不影响。

真正会打架的是谁? 是 PA7、PB7、PC7、PD7… 这些后缀都是“7”的引脚。它们同时抢 EXTI7 这一根线。AFIO的“多选一”开关只能选一个,所以它们不能同时用。下面是AFIO具体的实现图:


有趣的是看图你会发现:9-5和15-10被分配进了同一个 EXTI 里面,所以说外部中断的9-5和15-10会触发同一个中断函数!

深入了解-EXTI框图#

  • 边沿检测电路和软件中断事件寄存器通过或门连接,只要一个为1,那么输出为1。这个软件中断事件寄存器就是我们之前说的中断触发的软件触发,就是纯代码触发的中断,不管外部电路有没有事。所以说只要边沿检测电路(检测电平变化)和软件中断事件寄存器有一个为1(真),那么就可以触发中断。
  • 之后会走到请求挂起寄存器,这个相当于中断的标志位,可以读取这个寄存器判断是哪个通道触发的中断,由于9-5和15-10被分配进了同一个 EXTI 里面,所以说在这里就有区分的作用。
  • 最后你会发现和 中断屏蔽控制器 共同进入一个与门,到了NVIC中断控制器。

这个是中断触发,下面那一路就是事件触发啦。如果只发生中断而不需要事件,事件屏蔽寄存器(EMR)对应的位会被配置为0,从而在下方“与门”处将信号阻断,剩下的框图我相信你通过前面中断的理解,肯定易于理解(

EXTI外部中断学习小结
https://youran.netlify.app/posts/exti外部中断/exti外部中断学习小结/
作者
悠然
发布于
2026-10-08
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...