1. 程式人生 > 其它 >STM32外部中斷EXIT使用步驟與注意事項

STM32外部中斷EXIT使用步驟與注意事項

技術標籤:stm32/微控制器

先記錄幾個知識點:

1、STM32的任何一個引腳均可配置成外部中斷。

2、PA0/PB0/PC0...等均可任選一個連線到中斷線0,PA3/PB2/PC3.....等均可任何一個連線到中斷線3。。。。其餘pin同理

3、EXTI_Line8的中斷服務函式是EXTI9_5_IRQHandler,也即這個服務函式要對[5,9]這5箇中斷線進行服務,如何判斷到底是哪個中斷線引發的中斷,以8號線為例,可通過這條語句查詢:if(EXTI_GetITStatus(EXTI_Line8) != RESET)

下面是一段STM32F407把PA8連線到外部中斷線8的例子,可實現跳邊沿中斷。

再強調一遍,一旦把PA8連線到了外部中斷線8,那麼PB8/PC8/PD8....就不允許再連線到外部中斷線8了。

#define EXTI8_RCC_GPIOA   		RCC_AHB1Periph_GPIOA
#define EXTI8_GPIOx				GPIOA
#define EXTI8_GPIO_Pin_x		GPIO_Pin_8
#define EXTI8_PortSourceGPIOx	EXTI_PortSourceGPIOA
#define EXTI8_PinSourcex		EXTI_PinSource8
#define EXTI8_EXTI_Linex		EXTI_Line8

void EXTI8_Init(void)
{
	EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
	RCC_AHB1PeriphClockCmd(EXTI8_RCC_GPIOA, ENABLE);

	
	GPIO_InitStructure.GPIO_Pin = EXTI8_GPIO_Pin_x;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init(EXTI8_GPIOx, &GPIO_InitStructure);	
	
	SYSCFG_EXTILineConfig(EXTI8_PortSourceGPIOx, EXTI8_PinSourcex);  //關聯GPIOx 和 中斷線

    EXTI_InitStructure.EXTI_Line = EXTI8_EXTI_Linex;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//上升沿下降沿均中斷
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
	
	
	NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);


}
//外部中斷56789的服務函式
void EXTI9_5_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line8) != RESET)//判定是幾號線引發的中斷
	{	
		EXTI_ClearITPendingBit(EXTI8_EXTI_Linex);		
		if(Bit_SET == GPIO_ReadInputDataBit(EXTI8_GPIOx, GPIO_Pin_8))//上升沿
		{
			
		}
		else//下降沿觸發
		{
			
		}
	}
}