【STM32 CubeMX】STM32中断体系结构

文章目录


前言


一、中断体系的比喻

STM32中断体系如下图所示:

一座大型建筑物,比如一座高楼大厦,代表整个 STM32 芯片。在这座建筑物中,有许多房间和走廊,每个房间都代表一个特定功能的模块或外设,比如 GPIO、UART 等。

GPIO(通用输入输出):想象每个房间都有窗户,用于与外界交流。这些窗户可以用来输入信息(外部信号)或输出信息(驱动外部设备)。GPIO 窗户可以被打开或关闭,以允许或阻止信息的流动。

EXTI(外部中断):有些房间有特殊的门,称为 EXTI 门。当外部事件发生时,比如有人敲门,这些门会触发一个中断,通知系统发生了某些重要的事情。

NVIC(中断向量控制器):NVIC 就像一个大厅,里面有一个信息中心,负责管理整栋大楼中发生的所有事件和紧急情况。当有门被触发时,信息中心负责通知大楼的其他部分,告诉它们如何处理这个事件。

UART(通用异步收发传输器):想象一个房间里有一个电话,可以用来和外界通信。UART 中断就像是电话铃声响起,通知你有人在打电话,你需要停下手头的工作去接听电话。

综合以上,整个 STM32 中断结构就像一座大楼,有许多房间(外设模块)和走廊(数据总线),以及信息中心(NVIC)来管理这些房间和走廊中发生的事件。GPIO、EXIT、NVIC、UART 等都是这座大楼中不同的部分,各自承担着不同的功能,共同构成了 STM32 的中断系统。

二、中断的内部结构

2.1 EXTI

中断的框图如下:

我们可以通过设置寄存器进而来设置指定的引脚接到exti中断上

比如我们可以设置EXTI0这四位寄存器来设置哪个引脚有EXIT,通过指定的值

比如:设置PA[X]我们要使用0x0000

如果我们设置0000,他就有下面这样的情节

比如说,PA0接上一个开关

你可以去配置是按下中断还是松开时中断,在EXTI这里。

你可以去配置触发方式:

  1. 上升沿触发
  2. 下降沿触发
  3. 双边沿触发

我们还要去使能EXTI,使能他是否能发给下一级的NVIC

触发方式

上升沿触发就是从低电平变成高电平

下降沿触发就是从高电平变成低电平

双边沿就是上升和下降都触发

2.2 NVIC

NVIC:Nested vectored interrupt controller,嵌套向量中断控制器。

在上面这个图中,有这么多中断,比如EXTI,UART串口等等

NVIC就是去控制这些中断谁先得到cpu的执行

我们可以配置里面的优先级

我们还可以进一步使能,是否传递给CPU

2.3 cpu与中断

cpu中有一个总开关,我们可以去配置CPU让他处理中断/紧张处理中断

cpu是怎么处理中断的?

在NVIC中,有一个向量表,里面存储着这些中断函数的地址,当CPU检测到中断,NVIC会发一个id给CPU,然后根据id,使用id,在NVIC的向量表里找到对应项,然后调用函数

2.4 外部中断控制器框图

PA0进来,其中Edge detect circuit为边缘检测电路

他就可以去检测上升下降沿了

上升沿触发选择寄存器

其中bit0如果写入1的话就代表使能上升沿触发

如果是0就是静止。那么对于下降沿也是一样的

屏蔽/使能寄存器

以EXTI0为例子,我们可以写bit0,来屏蔽(写0)/使能(写1)

等待处理寄存器

如果某一个EXTI发生了,在他对应的bit位会设置成1

比如EXTI0发送了,那么这个寄存器的bit0会设置成1表示中断已经发生了

2.5 中断优先级

在 NVIC 里,对于每一个中断,都有一个 8 位的寄存器被用来表示它的优先级。这个 8

位的寄存器,被分为 2 部分,分别表示:分组优先级(也叫抢占优先级)、子优先级。

分组优先级被用来判断:当前正在处理的中断,能否被打断。比如当前正在处理 EXT0

中断,它的分组优先级为 3;如果这时候发生了 EXT1 中断,它的分组优先级为 4(数值越

高,优先级越低),那么 EXT1 的中断就无法打断 EXT0,等 EXT0 的中断处理完毕,EXT1 的

中断才能被处理。但是,如果 EXT1 的分组优先级为 2,那么当前的 EXT0 中断就被"抢占",

先执行 EXT1 的中断处理函数,再继续执行"被抢占的 EXT0"中断函数。

子优先级被用来判断:两个中断同时发生时,谁先被处理。还是以 EXT0、EXT1 为例,

如果它们同时发生了,那么分组优先级高的中断先被处理;如果分组优先级相同,那么子

优先级高的先被处理;如果连子优先级也相同,那么编号小的 EXT0 先被处理。

注意:如果 EXT0、EXT1 的分组优先级相同,是不会发生"抢占"的。比如 EXT0 中断

正在被处理,EXT1 紧接着被触发了,即使 EXT1 的子优先级高于 EXT0,EXT1 也不会抢占

EXI0。当 EXT0 被处理完毕,才轮到 EXT1 被处理。


总结

相关推荐
学不动CV了2 小时前
C语言32个关键字
c语言·开发语言·arm开发·单片机·算法
姜暮儿3 小时前
U盘直接拔出不在电脑上弹出有何影响
stm32·单片机·嵌入式硬件
O。o.尊都假都4 小时前
STM32之LVGL移植
stm32·单片机·嵌入式硬件·freertos·lvgl
学不动CV了4 小时前
ARM单片机OTA解析(一)
c语言·arm开发·stm32·单片机·嵌入式硬件·51单片机
一叶舞澎湃4 小时前
GD32 CAN1和TIMER0同时开启问题
单片机·嵌入式硬件
EutoCool5 小时前
Qt窗口:菜单栏
开发语言·c++·嵌入式硬件·qt·前端框架
易知嵌入式小菜鸡7 小时前
CCS-MSPM0G3507-3-基础篇-PWM输出
stm32·单片机·嵌入式硬件
草莓熊Lotso7 小时前
【数据结构初阶】--顺序表(二)
c语言·数据结构·经验分享·其他
秋说7 小时前
【PTA数据结构 | C语言版】出栈序列的合法性
c语言·数据结构·算法
悟空胆好小10 小时前
分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
网络·人工智能·科技·嵌入式硬件