1. 程式人生 > >STM32-嵌入式-03-EXTI中斷的分析及應用

STM32-嵌入式-03-EXTI中斷的分析及應用

       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);
        //清除中斷
}