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-PA0
HAL_NVIC_SetPriority(EXTI0_IRQn,2,0); //抢占优先级为2,子优先级为0
HAL_NVIC_EnableIRQ(EXTI0_IRQn); //使能中断线0
//中断线2-PE2
HAL_NVIC_SetPriority(EXTI2_IRQn,2,1); //抢占优先级为2,子优先级为1
HAL_NVIC_EnableIRQ(EXTI2_IRQn); //使能中断线2
//中断线3-PE3
HAL_NVIC_SetPriority(EXTI3_IRQn,2,2); //抢占优先级为2,子优先级为2
HAL_NVIC_EnableIRQ(EXTI3_IRQn); //使能中断线2
//中断线4-PE4
HAL_NVIC_SetPriority(EXTI4_IRQn,2,3); //抢占优先级为2,子优先级为3
HAL_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); //调用中断处理公用函数
}