Bootstrap

STM32-EXTI

本内容基于江协科技STM视频和韦东山视频内容学习整理而得。

1. 中断

1.1 中断系统

  • 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行
  • 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
  • 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

image.png

1.2 中断执行流程

image.png

1.3 STM32中断

  • 68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设
  • 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。

NVIC就是STM32中用来管理中断、分配优先级的。
image.png
image.png
image.png
image.png

  • WWDG窗口看门狗:用来监测程序运行状态的中断。
  • PVD电源电压监测:如果供电电压不足,PVD电路就会申请中断。
  • 地址:程序中的中断函数的地址是由编译器来分配的,是不固定的。但中断跳转,由于硬件的限制,只能跳到固定的地址执行程序。所以为了能让硬件跳转到一个不固定的中断函数里,就需要在内存中定义一个地址的列表,这个列表地址是固定的。中断发生后,就跳到这个固定位置。然后在这个固定位置,由编译器,再加上一条跳转到中断函数的代码,这样中断跳转就可以跳转到任意位置了。这个中断地址的列表就叫中断向量表,相当于中断跳转的一个跳板。

2. NVIC嵌套向量中断控制器

统一分配中断优先级、管理中断。

2.1 NVIC基本结构

image.png
NVIC是一个内核外设,是CPU的小助手。
/n表示:一个外设可能会同时占用多个中断通道,所以这里有n条线。
NVIC只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序,之后,通过右边的一个输出口告诉CPU该处理哪个中断。

2.2 NVIC优先级分组

  • NVIC的中断优先级由优先级寄存器的4位(0-15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级。(0-15是:值越小优先级越高)
  • 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队
分组方式抢占优先级响应优先级
分组00位,取值为04位,取值为0~15
分组11位,取值为0~13位,取值为0~7
分组22位,取值为0~32位,取值为0~3
分组33位,取值为0~71位,取值为0~1
分组44位,取值为0~150位,取值为0

分组0:就是0位的抢占优先级,取值只能为0,4位的响应优先级,取值可以是0~15。

2.3 中断优先级

  • 假设中断A的抢占优先级比中断B的抢占优先级高,两个中断同时发生,那么中断A优先执行。
  • 假设中断A的抢占优先级和中断B的抢占优先级一样,两个中断同时发生,那么响应优先级高的中断优先执行。
  • 假设中断A的抢占优先级比中断B的抢占优先级高,中断B先发生,随后A也发生,那么将暂停中断B,先执行中断A,A执行完后,再回来执行中断B,最后执行主程序,这种效果即中断嵌套。
  • 假设中断A的抢占优先级和中断B的抢占优先级一样,中断A的响应优先级比中断B的响应优先级高,中断B先发生,随后A也发生,那么中断A将等待中断B执行完后,才会执行中断A,即响应优先级不能中断嵌套。
    -假设中断A的抢占优先级和中断B的抢占优先级一样,且响应优先级也一样,两个中断同时发生,排在前面的先执行。
  • 总结中断是否会优先执行依据:首先是抢占先式优先级等级,其次是响应优先级等级,只有抢占优先级才可能出现中断嵌套。

3. EXTI外部中断

3.1 EXTI(Extern Interrupt)外部中断简介

  • EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。
  • 支持的触发方式:上升沿/下降沿/双边沿/软件触发
  • 支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断。(例如:PA0和PB0不能同时用)
  • 通道数:16个GPIO_Pin,外加PVD输出、RTC(实时时钟)闹钟、USB唤醒、以太网唤醒。(外加的其实就是来蹭网的,因为外部中断有个功能,就是从低功耗模式的停止模式下唤醒STM32。对于PVD电源电压监测,当电源从电压过低恢复时,就需要PVD借助一下外部中断退出停止模式)
  • 触发响应方式:中断响应/事件响应。
    当外部中断监测到引脚电平变化时,正常的流程是选择触发中断。但在STM32中也可以选择触发一个事件,如果选择触发事件,那外部中断的信号就不会通向CPU了。而是通向其他外设,用来触发其他外设的操作,比如触发ADC转换、触发DMA等。所以总结就是:中断响应是正常的流程,引脚电平变化触发中断,事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合工程。
    image.png

image.png

3.2 EXTI基本结构

image.png

  • AFIO就是一个数据选择器,可以在前面3个GPIO外设的16个引脚里选择其中一个连接到后面EXTI的通道里。然后通过AFIO选择之后的16个通道,就接到了EXTI边沿检测及控制电路上,同时下面4个蹭网的外设也是并列接进来的,这些加起来,就组成了EXTI的20个输入信号。
  • 然后经过EXTI电路之后,分为了两种输出,上面的接到了NVIC,用来触发中断的。外部中断的9-5和15-10分到了一个通道里,就是EXTI9_5和EXTI15_10,外部中断的9-5会触发同一个中断函数,15-10也会触发同一个中断函数,在这两个中断函数里再需要根据标志位来区分到底是哪个中断进来的。
  • 下面有20条输出线路到了其他外设,这就是用来触发其他外设操作的,也就是事件响应。

3.3 AFIO复用IO口

  • AFIO主要用于引脚复用功能的选择和重定义。
  • 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择。

image.png

3.4 EXTI框图

image.png

  • 右边是20根输入线,然后是输入线首先进入边沿检测电路。在上面的上升沿寄存器和下降沿寄存器可以选择是上升沿触发、还是下降沿触发,或者两个都触发。
  • 接着触发信号就进入到或门的输入端,在这里硬件触发和软件中断寄存器的值就接到了这个或门上,也就是任意一个为1,或门就可以输出1。触发信号通过或门后,就兵分两路,上一路是触发中断的,下一路是触发事件的。
  • 触发中断的首先会置一个挂起寄存器,相当于就是一个中断标志位,可以读取这个寄存器判断是哪个通道触发的中断,如果中断挂起寄存器置1,就会继续向左走,和中断屏蔽寄存器共同进入一个与门,然后是至NVIC中断控制器。这里的与门就是开关的作用,1与任意的数x等于这个任意的数x,0与任意的数x,等于0。如果中断屏蔽寄存器给1,那另一个输入就是直接输出,也就是允许中断;中断屏蔽寄存器给0,那另一个输入无论是什么,输出都是0,相当于屏蔽了这个中断。
  • 事件控制也是一个事件屏蔽寄存器进行开关控制,最后通过一个脉冲发生器,到其他外设。这个脉冲发生器就是给一个电平脉冲,用来触发其他外设的动作。
  • 上面就是总线和外设接口,通过总线来访问寄存器。
;