一. 什么是EXTI?
EXTI 的全称是 External Interrupt / Event Controller,即外部中断/事件控制器。
你可以把它想象成单片机的一个“哨兵系统”。这个哨兵系统部署在芯片的各个GPIO引脚上。正常情况下,CPU(中央处理器)在“专心致志”地执行主程序。当某个被设置为EXTI的引脚上发生了指定的“敌情”(如电平从高变低)时,哨兵(EXTI)会立刻向CPU报告,CPU就会暂停当前正在执行的任务,转而去处理这个“紧急事件”(执行一个叫做中断服务函数 的特殊程序),处理完毕后,再回到原来的任务继续执行。
二.EXTI的主要特点
1.特点
STM32F103C8T6的EXTI控制器具有以下关键特性:
-
最多20个中断/事件线:EXTI有20条独立的“通道”,编号为0~19。
-
每个GPIO引脚都可连接至EXTI:但不是一对一的关系。它是分组的,例如:
-
EXTI0 可以连接到 PA0, PB0, PC0, ... PG0 中的任意一个。
-
EXTI1 可以连接到 PA1, PB1, PC1, ... PG1 中的任意一个。
-
... 以此类推,直到 EXTI15。
-
EXTI16~EXTI19 连接到特定的片上外设,如EXTI16连接到PVD(可编程电压检测器),EXTI17连接到RTC闹钟事件等。
-
-
可配置的触发方式:
-
上升沿触发:引脚电平从低变高时触发中断。
-
下降沿触发:引脚电平从高变低时触发中断。
-
双边沿触发:只要电平发生变化(上升或下降)就触发中断。
-
-
支持软件触发:可以通过软件直接模拟一个中断信号,用于测试。
-
每个中断线都有独立的中断标志和挂起位:当触发条件满足时,相应的标志位会被置1,即使CPU正在处理其他事情,这个请求也会被“挂起”,等待处理。
-
可产生中断或事件:
-
中断:目的是通知CPU,让CPU执行中断服务程序。
-
事件:目的是直接唤醒其他片上外设(如DMA、ADC),而不需要CPU介入,这能进一步降低功耗和提高效率。
-
2.流程

3. EXTI与NVIC和AFIO的关系
理解这三者的关系至关重要:
-
EXTI:是“哨兵”,负责检测特定GPIO引脚上的事件。
-
AFIO / SYSCFG:
-
在STM32F103中,主要由AFIO管理EXTI的引脚映射。它决定了是PA0、PB0还是PC0等连接到EXTI0这条线上。
-
(注意:在更高级的STM32中,这个功能由SYSCFG管理,但F103是AFIO)。
-
-
NVIC:是“总指挥部”,负责管理所有中断源的优先级,并最终决定是否、以及何时将中断请求传递给CPU。即使EXTI发出了请求,如果NVIC中没有使能该中断,CPU也不会响应

4.详情
中断流程。

中断优先级。

NVIC的流程

NVIC优先级分组。响应优先级,权限低,他决定多个中断发生时候,谁优先响应。也就是排队
抢占优先级高的可以打断低的抢占优先级进行响应,相当于中断嵌套。也就是插队。
STM32中不存在哪个响应先来,哪个就响应,全都需要进行排队,谁响应优先,谁先响应。

EXTI的基本结构

AFIO的复用I/O口。通过选择一个接到EXTI上。

数据选择器。

这就是我们引脚重映射,把默认复用功能,给变为重定义功能。

EXTI框架图。

或门

与门

触发中断的话会挂起一个中断寄存器,相当于我们的中断标志位了。

用与门控制,相当于开关了。
![]()
20/表示有20个通道。
三.代码编写。
1.旋转编码器介绍

我们用的是可以测方向的编码器,它可以产生两个波形,其中一个波形比另一个滞后90°,可以用来我们的方向测定,是正交编码器。主要用来调节音量等等。

硬件电路。

2.对射红外传感器
(1)介绍
我们的连线。

对射红外传感器接线。
(2)CUBE设置

将PB14设置为外部中断模式。

下升沿触发。


这里可以设置优先级。
![]()
生成文件

打开keil5
(3)编程
我们只需要根据上面的图片,把我们的NVIC通道打通就可以进行中断了,这里cube可以一键生成
![]()
打开这个文件。

找到这个函数。

添加代码,判断中断标志位。

定义变量

判断如果读取到了中断标志位就让我们count++。

返回我们记录的数值。

然后在.h文件中添加我们的函数。
然后回到主函数。

进行显示就会发现我们成功了。
(4)现象

3.旋转编码器
(1)cube设置


全部设置为下降沿。

打开中断。

生成文件并打开
(2)编程


找到我们的EXTI0和EXTI1中断线。

用带符号的count。

传回数。

就可以完成了
1146

被折叠的 条评论
为什么被折叠?



