【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 被处理。


总结

相关推荐
yutian06061 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
XH华3 小时前
初识C语言之二维数组(下)
c语言·算法
析木不会编程4 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
Uu_05kkq7 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
枯无穷肉8 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6778 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式科普9 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
嵌入式大圣9 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
A懿轩A9 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
云山工作室9 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设