中断

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 外部中断与内部中断(例如定时器产生中断,串口接收中断等)不同的是:外部中断由外部条件触发,比如按键触发。

外部中断

STM32的每个IO都可以作为外部中断输入。 STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC时钟事件。 线18:连接到USB唤醒事件。

一般外部中断设置步骤

在这里插入图片描述

实例:按键控制LED的中断

CubeMX配置

选择STM32F103C6的开发板 GPIO设置: 在这里插入图片描述 注意把使能打开! 在这里插入图片描述 在这里插入图片描述

keil5代码逻辑实现

回调函数的实现,当电路发生中断时自动调取函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_13)
	{
		HAL_GPIO_TogglePin (GPIOB,GPIO_PIN_9);
	}
	if(GPIO_Pin == GPIO_PIN_5)
	{
		HAL_GPIO_TogglePin (GPIOB,GPIO_PIN_8);
	}
}

虚函数

__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin),类似于java中接口的作用 在这里插入图片描述

proteus仿真

注意将晶振改为和CubeMX中的频率一致! 在这里插入图片描述 按下按键使LED中断 在这里插入图片描述