STM32-嵌入式-03-EXTI中斷的分析及應用
阿新 • • 發佈:2018-12-11
EXTI中斷/事件控制器,管理了控制器的20根中斷/事件線。每個對應了一個邊沿檢測器,可以實現輸入訊號的上升沿或者下降沿檢測,EXTI可以實現對每個中斷或者事件的單獨配置
這裡中斷通常是指GPIO的中斷 事件可以是AD/DA轉換 TIM定時器等···
通過書上的EXTI 功能框圖可以清楚的知道配置EXTI中斷的具體過程
這裡拿EXTI控制GPIO為例:
程式設計要領:
1)初始化用來產生中斷的GPIO
2)初始化EXTI
3)配置NVIC
4)編寫中斷函式
這裡只貼出配置EXTI和中斷函式的編寫:
void EXTI_Key_config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; //配置中斷優先順序 EXTI_NVIC_Config(); //開啟KEY相關GPIO的外設時鐘 RCC_APB2PeriphClockCmd( KEY1_GPIO_CLK, ENABLE); //選擇控制的引腳 GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN; //選擇輸出方式為浮空輸出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //設定引腳速率為50MHZ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //呼叫庫函式,初始化GPIO GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure); //初始化EXTI GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); RCC_APB2PeriphClockCmd( KEY1_GPIO_CLK, ENABLE); //配置EXTI的中斷線 EXTI_InitStructure.EXTI_Line = EXTI_Line0; //配置EXTI模式 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //配置觸發型別 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); }
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET )
{
LED_TOGGLE;
}
EXTI_ClearITPendingBit(EXTI_Line0);
//清除中斷
}