第五章第一节 EXTI 外部中断
1. 中断系统
① 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得 CPU 暂停当前正在运行的程序,转而区处理中断程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。
② 中断优先级:当有多个中断源同时申请中断时,CPU 会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。
③ 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU 再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。
2. 中断执行流程
3. STM32 中断
① 68 个可屏蔽中断通道,包括 EXTI、TIM、ADC、USART、SPI、I2C、RTC 等外设
② 使用 NVIC 统一管理中断,每个中断通道都拥有 16 个可编程的优先级,可对优先级进行分组,进一步设置抢占优先级和响应优先级(NVIC 就是 stm32 用来管理中断,分配优先级的)
4. NVIC 基本结构(嵌套中断向量控制器,是一个内核外设,CPU 小助手)
5. NVIC 优先级分组
① NVIC 的中断优先级由优先级寄存器的 4 位(0-15)决定,这 4 位可以进行切分,分为高 n 位的抢占优先级和低 4-n 位的响应优先级(这里的优先级是值越小,优先级越高,0 就是最高优先级)
② 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的中断号排队。
6. EXTI 外部中断(Extern Interrupt)
① EXTI 可以监测指定 GPIO 口的电平信号,当其指定的 GPIO 口产生电平变化时,EXTI 将立即向 NVIC 发出中断申请,经过 NVIC 裁决后即可中断 CPU 主程序,使 CPU 执行 EXTI 对应的中断程序。
② 支持的触发方式:上升沿/下降沿/双边沿/软件触发
③ 支持的 GPIO 口:所有 GPIO 口,但相同的 Pin 不能同时触发中断
④ 触发响应方式:中断响应/事件响应(事件响应是指当外部中断检测到引脚变化时,中断信号就不会通向 CPU 了,而是通过其他外设,用来触发其他外设的操作(ADC、DMA),属于外设之间的联合工作)
7. EXTI 基本结构
8. AFIO 复用 IO 口
① AFIO 主要用于引脚复用功能的选择和重定义。
② 在 STM32 中,AFIO 主要完成两个任务:复用功能引脚重映射、中断引脚选择。
9. EXTI 内部框图
10. 旋转编码器介绍
① 旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。
② 问答题:
Q:什么样的设备需要用到外部中断,使用外部中断的好处是什么?
A:对于 STM32,想要获取的信号是外部驱动,很快的突发信号,比如旋转编码器的输出信号,它产生的信号是突发的,STM32 只能被动读取。如果不及时处理,就会错过许多信号,所以需要有脉冲过来,STM32 立即进入中断函数处理。
③ 硬件电路图
(1) 交替导通与相位差:
- 当你旋转旋钮时(无论顺时针还是逆时针),内部的触点会交替使 A 触点和 B 触点导通到地(GND)
- 关键是:A 和 B 两个触点导通到地的时序使不同的!它们存在 90度(即1/4 周期)的相位差。这是判断旋转方向的核心。
(2) 电平变化 - 为什么能检测?
- 无旋转(默认):图中 VCC 通过上拉电阻(R1,R2)连接到 A 和 B 端口。当触点没有导通到 GND 时,上拉电阻将这 A 和 B 端口拉到高电平(接近 VCC 电压)。
- 旋转发生(触点到地):当旋转导致触点与A(或B)接触并导通到 GND 时,就相当于把 A(或B)端口直接短路到地。这时强大的 GND 会将 A(或B)端口的电平拉低。
(3) 消抖电路(C1,C2):旋转编码器使机械开关,触点接触时会产生微小的、快速的、不稳定的跳动(称为抖动),导致电平多次快速跳变。C1 和 C2 电容并联在 A 和 B 端口与 GND 之间,起到 GND 之间,起到滤波作用,吸收这些尖峰毛刺。