STM32支持19个外部中断。
中断线0~15:对应外部IO口的输入中断;
中断线16:连接到PVD输出;(可编程电压检测器)
中断线17:连接到RTC闹钟事件;
中断线18:连接到USB唤醒事件。
STM32的IO口有很多,相应的中断线却只有16个,如何将IO口与中断线对应呢?STM32是这样解决的:
GPIOA~GPIOG的[0:15]分别对应中断线的0~15。这样每条中断线最多可以对应7个IO口。
例如,GPIOA_Pin_0,GPIOB_Pin_0,GPIOC_Pin_0,GPIOD_Pin_0,GPIOE_Pin_0,GPIOF_Pin_0,GPIOG_Pin_0,这7个IO口都对应中断线0。
中断线每次只能连接一个IO口,STM32使用EXTICR来决定中断线配置到哪个GPIO上。
配置完中断,还有一个重要的部分是中断响应函数。
STM32的中断响应函数与51的中断响应函数不同,51中通过关键字interrupt来识别中断,STM32通过查找中断向量表来识别。
STM32在中断向量表中有关于外部中断的函数。
EXTI0_IRQHandler() ;line0
EXTI1_IRQHandler() ;line1
EXTI2_IRQHandler() ;line2
EXTI3_IRQHandler() ;line3