中断
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中断