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