STM32外部中斷EXIT使用步驟與注意事項
阿新 • • 發佈:2021-01-14
技術標籤: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//下降沿觸發 { } } }