STM32F1系列的中斷控制器支持19個外部中斷/事件請求:
線0~15:對應外部IO口的輸入中斷。
線16:連接到PVD輸出。
線17:連接到RTC鬧鐘事件。
線18:連接到USB喚醒事件。
IO口外部中斷在中斷向量表中只分配了7箇中斷向量,也就是隻能使用7箇中斷服務函數
外部中斷線0~4各分配一箇中斷向量,各有一個服務函數
外部中斷線5~9分配一箇中斷向量,共用一個服務函數,外部中斷線10~15分配一箇中斷向量,共用一箇中斷服務函數。
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
外部中斷常用庫函數:
①void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
//設置IO口與中斷線的映射關係
②void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
//初始化中斷線:觸發方式等typedef struct
{
uint32_t EXTI_Line; //指定要配置的中斷線
EXTIMode_TypeDef EXTI_Mode; //模式:事件 OR中斷
EXTITrigger_TypeDef EXTI_Trigger;//觸發方式:上升沿/下降沿/雙沿觸發
FunctionalState EXTI_LineCmd; //使能 OR失能
}EXTI_InitTypeDef;
③ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判斷中斷線中斷狀態,是否發生
④void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中斷線上的中斷標誌位
外部中斷的一般配置步驟:
1>初始化IO口爲輸入。 GPIO_Init();
2>開啓IO口複用時鐘。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
3>設置IO口與中斷線的映射關係。 void GPIO_EXTILineConfig();
4>初始化線上中斷,設置觸發條件等。 EXTI_Init();
5>配置中斷分組(NVIC),並使能中斷。 NVIC_Init();
6>編寫中斷服務函數。 EXTIx_IRQHandler();
7>清除中斷標誌位。 EXTI_ClearITPendingBit();