void EXIT_Init(void){GPIO_InitTypeDef GPIO_Init;__HAL_RCC_GPIOA_CLK_ENABLE(); //开启对应 GPIO 时钟__HAL_RCC_GPIOE_CLK_ENABLE(); //开启对应 GPIO 时钟GPIO_Init.Pin = GPIO_PIN_0;GPIO_Init.Mode = GPIO_MODE_IT_RISING; //上升沿触发GPIO_Init.Pull = GPIO_PULLDOWN; //上升沿触发则默认状态为低HAL_GPIO_Init(GPIOA, &GPIO_Init); //初始化 PA0 引脚GPIO_Init.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;GPIO_Init.Mode = GPIO_MODE_IT_FALLING; //下降沿触发GPIO_Init.Pull = GPIO_PULLUP; //下降沿触发则默认状态为高HAL_GPIO_Init(GPIOE, &GPIO_Init); //初始化 PE2、PE3、PE4//中断线0-PA0HAL_NVIC_SetPriority(EXTI0_IRQn,2,0); //抢占优先级为2,子优先级为0HAL_NVIC_EnableIRQ(EXTI0_IRQn); //使能中断线0//中断线2-PE2HAL_NVIC_SetPriority(EXTI2_IRQn,2,1); //抢占优先级为2,子优先级为1HAL_NVIC_EnableIRQ(EXTI2_IRQn); //使能中断线2//中断线3-PE3HAL_NVIC_SetPriority(EXTI3_IRQn,2,2); //抢占优先级为2,子优先级为2HAL_NVIC_EnableIRQ(EXTI3_IRQn); //使能中断线2//中断线4-PE4HAL_NVIC_SetPriority(EXTI4_IRQn,2,3); //抢占优先级为2,子优先级为3HAL_NVIC_EnableIRQ(EXTI4_IRQn); //使能中断线4}
中断服务函数:
//中断服务函数void EXTI0_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); //调用中断处理公用函数}void EXTI2_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); //调用中断处理公用函数}void EXTI3_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); //调用中断处理公用函数}void EXTI4_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); //调用中断处理公用函数}
