EXTI外部中断

发布时间 2023-04-13 14:26:34作者: 整点薯条拯救一切

【学习STM32的外部中断和中断系统】

【68个可屏蔽的(中断通道)| (中断源)】:包含EXIT外部中断,TIM定时器,ADC模数转换器,USART串口,SPI通信,I2C通信和RTC实时时钟等多个外设。几乎所有模块都可以申请中断。

【使用NVIC统一管理中断】:主要处理优先等级,进一步设置抢占优先级和响应优先级。共16个 

【STM32外设的中断】

  • WWDG窗口看门狗:监测程序运行状态的中断。程序卡死了没有及时处理,看门狗可以申请中断,让程序跳到看门狗的中断程序里进行检查纠错。以及设置定时。
  • PVD电源电压检测:供电电压不足,PVD电路就会申请中断
  • ...

【外部中断对应的中断资源】

  • 程序中的中断函数的地址是由编译器分配的,不是固定的
  • 但中断的跳转,由于硬件的限制,只能跳到固定的地址执行程序
  • 综上,开头和结尾分别对应是要让硬件跳到一个不固定的中断函数里。所以需要在内存中定义一个地址的列表。
  • 具体过程为:中断的发生,跳到固定位置,经过中断向量表,跳到中断函数

【1.嵌套中断向量控制器NVIC】

  • NVIC(Nested Vectored Interrupt Controller)
  • 有非常多的输入口,有多少中断路线都可以接过来。一个外设可能会同时占用多个中断通道,可以有N条线。
  • 只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序给CPU
  • 优先级分组:抢占优先级(打断正在处理的A,跳过排队的BCD,直接处理Z。顺序是【A上,Z,A下,B,C,D】和响应优先级(依然会继续处理正在处理的A,但是跳过还在排队的BCD,直接处理Z。顺序是【A,Z,B,C,D】
  • 每个中断有16个优先级,要分成抢占优先级和响应优先级,所以要分组。
  • 中断优先级由优先级寄存器的4位(二进制0~15,刚好16个优先级)决定。数值越小,优先级越高。0是最高优先级。
  • 4位还可以继续拆分,分为高n位抢占优先级和低4-n位的响应优先级。
  • 顶级理解:抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队。抢占优先级和响应优先级均相同按照中断号排队。不存在先来后到的排队方式。
  • 几种分组方式:【抢占优先级,响应优先级】:{(0位,4位),(1位,3位),(2位,2位),(3位,1位),(4位,0位)}

【2.EXTI外部中断】

  • EXIT(Extern Interrupt)

引脚电平变化,申请中断,看触发方式,响应

    1. EXIT支持引脚电平的电平变化类型有:上升沿/下降沿/双边沿/软件触发
      1. 上升沿:  电平从低电平到高电平的瞬间触发中断
      2. 下降沿:电平从高电平到低电平的瞬间触发中断
      3. 双边沿:上升沿和下降沿都可以触发中断
      4. 软件触发:引脚没有变化,程序使之中断
  • 展开讲就是,EXIT可以监测GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXIT将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXIT对应的中断程序。
  • 外部中断支持的GPIO口:任意的GPIO口都可以,但相同的Pin不能同时触发中断。(需要多个中断引脚,要选择不同的Pin引脚,例如PA6和PA7)
  • 外部中断占用的通道:
    1. 主要是GPIO_Pin(GPIO_Pin_0到GPIO_Pin_15),其次还有PVD输出,RTC闹钟,USB唤醒,以太网唤醒
    2. 因为外部中断有个重要功能是从低功耗模式的停止模式下唤醒STM32。
      1. 对于PVD电源电压监测:当电源从电压过低恢复时,需要PVD借助外部中断退出停止模式
      2. 对于RTC闹钟来说:RTC定一个闹钟以后,STM32为了省电会进入停电模式,等闹钟响的时候再唤醒,这同样需要借助外部中断
      3. ...
  • 触发响应方式:中断响应和事件响应。
    1. 中断相应:申请中断,让CPU执行中断函数
    2. 事件响应:STM32对外部中断增加的一种额外功能。当外部中断检测到引脚电平变化时,正常的流程是选择触发中断。但也可以选择触发一个事件,此时外部中断的信号就不会通向CPU,而是通向其他外设,用于触发其他外设(触发ADC转换,触发DMA等等)。

【3.EXIT外部中断的基本结构

 

 具体的