在STM32中,使用外部中断(EXTI)时需要使能复用功能,这和其他中断(如串口中断、定时器中断)有所不同。以下是为什么在使用外部中断时需要使能复用,以及其他中断不需要复用的原因。
一、为什么 EXTI 需要使能复用时钟?
STM32 中的外部中断(EXTI)通过外部引脚(如 GPIO 引脚)触发,这些引脚的状态变化(上升沿、下降沿或电平)会激活外部中断。为了将 GPIO 引脚与 EXTI 系统连接起来,必须通过复用功能将引脚映射到 EXTI 线路。这是因为 STM32 的 GPIO 引脚并不直接连接到 EXTI 控制器,而是通过 复用功能来激活。
具体步骤是:
-
配置复用功能:通过
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8)
来将 GPIO 引脚(如 GPIOB 的 Pin 8)连接到 EXTI 线路。复用功能的配置确保 GPIO 引脚的变化能够触发 EXTI 中断。 -
外部中断触发:外部中断的触发线(EXTI_Line)配置后,当对应的 GPIO 引脚发生设定的状态变化(如下降沿),EXPI 会通过 NVIC 启动中断。
二、为什么其他中断(如串口中断、定时器中断)不需要复用?
-
串口中断(USART 中断):
- 串口中断是由 USART 外设触发的,不需要依赖外部引脚的变化。因此,不需要配置 GPIO 引脚的复用。串口中断直接通过 USART 的硬件状态(如接收数据、发送数据完成等)产生中断请求。
- 对于串口,你只需要配置 USART 外设的相关中断(如
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
)以及中断优先级和 NVIC 设置。
-
定时器中断:
- 定时器中断是由定时器外设触发的,同样不需要复用 GPIO 引脚。定时器中断基于定时器的溢出、比较事件等触发。定时器硬件内部生成的事件直接生成中断请求,而不是通过外部引脚触发。
- 配置定时器的中断时,只需要启用定时器的中断(如
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
)并配置 NVIC。
总结:
- 外部中断(EXTI):由于外部中断需要从特定的 GPIO 引脚或外部信号引脚获取触发信号,因此需要配置 GPIO 引脚复用,使得引脚可以连接到 EXTI 系统。
- 其他中断(如串口、定时器等):这些中断直接由相应外设(USART、TIM 等)产生,不需要通过 GPIO 引脚,因此不需要配置复用功能,只需要启用相关外设的中断。
因此,在 STM32 中,外部中断需要配置复用来链接 GPIO 引脚与 EXTI 线路,而串口和定时器中断则直接由硬件外设产生,不需要这样的配置。
三、为什么不需要使能EXTI
外部中断(EXTI)模块不需要显式的 EXTI_Cmd()
或类似命令来使能,因为它的触发是自动的,只要你通过 EXTI_Init()
配置好了相应的引脚和触发条件,硬件就会监控这些引脚的状态变化。