STM32--EXTI外部中断

简介: STM32--EXTI外部中断



STM32中断

先说一下基本原理

1.中断请求发生:外部事件(如按键触发,定时器溢出等)引起中断请求信号;

2.中断向量表:中断发生后,CPU会根据中断向量表找到对应的中断服务程序入口。

3.中断服务程序执行:CPU会跳转到中断服务程序入口,执行相应的中断处理代码;

4.中断优先级:不同的中断源可能具有不同的优先级,可以通过设置优先级来控制中断的相对重要性。

5.中断嵌套:STM32支持中断的嵌套,即在一个中断服务程序中可以发生另一个中断程序,这种情况下需要使用优先级抢占和屏蔽来管理中断的执行程序;

6.中断清除:中断服务程序执行完成后,需要立即清除中断标志位,以便允许其他同优先级或更高优先级的中断发生。

在STM32中,有68个可屏蔽中断通道,每个中断通道包含16个可编程的优先等级;

具体使用哪条通道,需要查看手册;

上面灰色部分的是内核的中断,白色部分就是STM32外设的中断;

由于STM32中断通道众多,所以就用了一个叫作嵌套向量中断器(NVIC)来进行管理;


NVIC

NVIC(Nested Vectored Interrupt Controller)是用于管理中断的硬件模块,它嵌套在ARM Cortex-M3上,是一个内核外设。NVIC负责中断向量表、中断优先级、中断使能以及中断处理的功能。

上图是NVIC的基本结构

在STM32中,NVIC的功能主要有以下几个方面:

1.中断向量表:NVIC管理中断向量表,它是一个存储中断服务程序入口的表格。当一个中断请求发生时,CPU会根据中断号从中断向量表中获取对应的中断的服务程序的入口地址,并跳转执行该程序。

2.中断优先级:NVIC允许设置不同中断源的优先级,以确定中断的相对重要性。通过配置优先级寄存器,可以设置每个中断源的优先级当多个中断同时发生时,具有最高优先级的中断将被立即处理。

3. 中断使能:NVIC控制中断的使能与禁止。通过设置使能寄存器,可以启用或禁用特定中断源的中断功能。禁用某个中断源后,即使该中断源发生,CPU也不会响应。

 

总的来说,有了NVIC,CPU就可以免去选择哪个中断通道这个步骤,让NVIC选择好后再进入到CPU

接下来看NVIC优先级的分组。

NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队。

进行分组的目的是为了更灵活的管理和控制中断优先级。在程序中,会先进行分组,再让不同等级的去执行优先级。比如有多个中断源进入不同通道,那么抢占优先级就是来分不同身份的,身份相同归为一组,而数值越小代表身份越高;而响应优先级表示同等身份下的不同等级;

EXTI外部中断

EXTI(EXternal Interrupt,外部中断)是STM32中用于处理外部事件触发的中断机制。它允许外部设备(如按键、传感器等)通过引脚信号触发中断,从而实现对这些事件的快速响应。

EXTI可以与GPIO引脚进行连接,作为外部中断的触发源。支持所有的GPIO口,但不允许相同的Pin同时触发中断;

EXTI有多种触发方式:支持上升沿触发、下降沿触发、边沿变化触发等,可以根据实际需求进行选择适合的触发方式。

EXTI可以与NVIC配合使用,实现中断的屏蔽和优先级抢占

这是EXTI的基本结构

最左边是GPIO口,通过AFIO中断引脚选择器来进行选择三个GPIO口的16个通道中的一个与EXTI进行连接。例如GPIOA,GPIOB、GPIOC各个的PIN0,只能有一个PIN0于EXTI0进行连接。之后通道就连接到EXTI边沿检测与控制电路上,最后连到NVIC。

在边沿检测还有一些绿色的外部中断通道。在STM32的外部中断中,可以从低功耗模式的停止模式来唤醒STM32。对于PVD电源电压检测,当电源从低电压恢复时,就需要PVD借助外部中断退出停止模式;对于RTC来说,有时为了省电,定了一个闹钟之后STM32就会进入停止模式,闹钟响起时再唤醒,就需要借助外部中断。对于这些通道,我们在这做一下简单了解就行。

AFIO

AFIO主要用于引脚复用功能的选择和重定义

在STM32中,AFIO主要完成两个任务:复用功能引脚重映射中断引脚选择

简单的来说就是GPIO口打通了引脚口与外设的连接,对于要实现EXTI这个中断功能,就需要AFIO,将引脚口拓展多了一个功能作用,然后EXTI就能与引脚口进行连接,引脚口就多了这项功能。

EXTI框图

右下角有20根输入线,输入线进入边沿检测电路,选择不同的触发方式;接着进入或门,只要有一个高电平1,那么输出高电平1,只有全部输入线为低电平0,才能输出0;接着兵分两路,连接着请求挂起寄存器的是触发中断的,脉冲发生器是事件中断;请求挂起寄存器相当于一个请求中断标志位,如果中断挂起寄存器置1,那么将会向左走进入与中断屏蔽寄存器进入一个与门,如果与门一条输入线为1,对于与门来说,任意数与1等于任意数;一条输入线为0,那么输出将会是0;下面的事件中断也是一样,与事件屏蔽寄存器相连到与门,通过脉冲发生器给出一个电平脉冲,用来触发外设的动作;最上面是APB总线,我们可以通过APB总线来访问到EXTI。

旋转编码器简介

对于STM32来说,想要获取信号是外部驱动很快的突发信号;像旋转编码器的输出信号,我可以保持不拧它,那么这时候不需要STM32做任何事,一旦进行旋转,那么就会有很多脉冲信号需要STM32进行接收,这个脉冲信号发送的很快,就需要要求STM32快速的接收,像这个要求快的,就需要用到STM32的外部中断。

旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向

类型:机械触点式/霍尔传感器式/光栅式

我们使用的是第二张图的旋转编码器,左边是它的外观,右边是它的内部结构;是利用金属触点来进行通断的它是一种机械触点式编码器,

这是内部的连接方式,中间圆点相当一个按键;

这是编码盘,上面附有金属触点,通过旋转可以让金属触点与 金属弹片接触来触发;并且这个编码盘经过设计的,能让两个触点的通断产生一个九十度的相位差。

当正转时,A向引脚输出一个方波波形,同时B向引脚输出一个相差九十度的方波波形,B向方波波形滞后九十度

当反转时, A向引脚输出一个方波波形,同时B向引脚输出一个相差九十度的方波波形,B向方波波形超前九十度

这种称为正交波形,这样就能够识别方向;


对射式红外传感器工程

我们将实现通过传感器电平的变化,让其屏幕的数字加一;

连接方式:

代码:

CountSensor.h

CountSensor.c

首先需要对外部中断进行初始化,我们需要开启APB2的外设时钟开关

接着对GPIO引脚初始化,然后让EXTI连接到GPIO口上,

接着对EXTI进行初始化,最后选择NVIC优先级即可。

NVIC初始化;

 

然后操作执行中断函数中的程序,由于我们是以边沿触发方式来计次的,这种方式难免会有些不稳定,所有就多加一条判断语句,下降沿后,GPIO口数据将会是低电平,补充上去使计次稳定;

OELD

 

main.c


旋转编码器工程

通过旋转编码器,在屏幕上显示旋转计次,正向旋转加一,反向旋转减一;

连接方式:

代码:

Encounter

这里初始化与上面差不多,只不过这里有两个中断源;正转的时候,A向波形呈现低电平状态,B向波形正在下降沿;反转的时候,B向波形呈现低电平状态,A向波形正在下降沿;

main.c

 

相关文章
|
1月前
STM32--WDG看门狗
STM32--WDG看门狗
|
1月前
|
存储 缓存 芯片
STM32--USART串口
STM32--USART串口
STM32外部中断解析
STM32外部中断解析
218 0
|
11月前
|
芯片
STM32F103C8 EXTI外部中断
STM32F103C8 EXTI外部中断
68 0
|
内存技术
STM32CubeMX外部中断
STM32CubeMX外部中断
115 0
7-外部中断事件控制器(EXTI)
7-外部中断事件控制器(EXTI)
STM32 EXTI外部中断
外部中断 是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去. 外部中断 是指由 外部设备 发出的 中断请求 ,如键盘、鼠标、计时器、网络数据等。外部中断可以提高系统的效率,使系统能够有效地处理外部设备发出的中断请求,从而改善系统的性能。
122 0
STM32 EXTI外部中断
STM32使用寄存器通过控制GPIO点亮一盏灯
STM32使用寄存器通过控制GPIO点亮一盏灯
77 0
STM32使用寄存器通过控制GPIO点亮一盏灯
|
编译器
STM32的HAL库开发系列 - GPIO中断/外部中断EXTI
STM32的HAL库开发系列 - GPIO中断/外部中断EXTI
571 0