一、什么是EXTI 和NVIC
EXTI(External Interrupt/Event Controller)EXTI 是外部中断/事件控制器,它负责处理外部信号变化,并将信号传递给中断控制器(如 NVIC)。主要负责以下功能:
- 外部事件检测 :EXTI 用于检测来自 GPIO 引脚 的外部信号(如按键、传感器、外部设备等),并将其转化为中断事件。
- 信号触发配置:可以配置触发条件,如上升沿、下降沿或双边缘触发。当指定的信号发生变化时,EXTI 会触发相应的中断事件。
- 中断线路(EXTI Line) :EXTI 将每个 GPIO 引脚映射到一个 外部中断线路(EXTI Line) ,例如
EXTI_Line7
对应的是PC7
引脚。 - 中断标志位和清除:EXTI 会设置标志位以表示某个中断事件的发生,软件可以通过清除这些标志位来确认中断已经被处理。
NVIC(Nested Vectored Interrupt Controller)NVIC 是 STM32 微控制器中的 嵌套向量中断控制器,负责处理和管理所有中断请求的优先级、响应、服务等任务。NVIC 的主要功能如下:
- 中断优先级管理:NVIC 管理所有中断的优先级,支持嵌套中断,允许高优先级的中断抢占低优先级的中断。
- 中断使能与禁用:通过 NVIC,可以使能或禁用特定的中断源。每个中断源都有一个唯一的中断号,NVIC 使用这些中断号来识别和管理中断。
- 中断服务程序(ISR)调度 :当中断发生时,NVIC 会将控制权转交给相应的 中断服务程序(ISR),然后中断处理完毕后再恢复正常执行
二、中断流程
三、中断分类
首先分清,中断信号的产生可以通过外部中断控制器EXTI(该控制器将某个 GPIO 引脚的信号变化(如电平变化、边缘触发等)转化为中断信号),或者由其他内部外设(如定时器、DMA 等)直接产生中断信号。
所以我们要配置产生中断型号,我们就要配置EXTI或者其他控制器(定时器、DMA等)
一、外部EXTI中断
在EXTI外部中断中,也就是在GPIO直接控制下高低电平产生的中断,具体配置如下:
EXTI配置:我们要配置他的外部中断源(哪个引脚),以及触发方式,还有选择外部中断线。
1.外部中断线是什么:
注意:某个 GPIO 引脚与 EXTI 线路(如 EXTI_Line0
, EXTI_Line1
等)已经是对应的了,但是为什么还要配置中断线路呢(EXTI_InitStructure.EXTI_Line = EXTI_Line7; )?原因是每个 GPIO 引脚并不是直接与 EXTI 线路关联的,而是通过 EXTI 控制器 来映射。还有一点,PA0就是对应EXTI_Line0,PA1就是对应EXTI_Line1,不能搞错。
2.中断号是什么?
EXTI或者其他外设发出的中断信号就是中断号,每一个中断信号都有唯一的中断号,也可以叫中断通道号。中断通道号会交给NVIC处理,我们在配置NVIC就是在配置相应中断号的优先级。如上上面的那种图就是在配置EXTI9_5_IRQn中断号的优先级。
二、其他控制器中断
配置方式如下图:这里以定时器为例,其实没什么区别。EXTI的中断方式是上升沿或下降沿和需要配置中断线,这里的中断方式是溢出中断。