1. void EXIT_Init(void)
    2. {
    3. GPIO_InitTypeDef GPIO_Init;
    4. __HAL_RCC_GPIOA_CLK_ENABLE(); //开启对应 GPIO 时钟
    5. __HAL_RCC_GPIOE_CLK_ENABLE(); //开启对应 GPIO 时钟
    6. GPIO_Init.Pin = GPIO_PIN_0;
    7. GPIO_Init.Mode = GPIO_MODE_IT_RISING; //上升沿触发
    8. GPIO_Init.Pull = GPIO_PULLDOWN; //上升沿触发则默认状态为低
    9. HAL_GPIO_Init(GPIOA, &GPIO_Init); //初始化 PA0 引脚
    10. GPIO_Init.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;
    11. GPIO_Init.Mode = GPIO_MODE_IT_FALLING; //下降沿触发
    12. GPIO_Init.Pull = GPIO_PULLUP; //下降沿触发则默认状态为高
    13. HAL_GPIO_Init(GPIOE, &GPIO_Init); //初始化 PE2、PE3、PE4
    14. //中断线0-PA0
    15. HAL_NVIC_SetPriority(EXTI0_IRQn,2,0); //抢占优先级为2,子优先级为0
    16. HAL_NVIC_EnableIRQ(EXTI0_IRQn); //使能中断线0
    17. //中断线2-PE2
    18. HAL_NVIC_SetPriority(EXTI2_IRQn,2,1); //抢占优先级为2,子优先级为1
    19. HAL_NVIC_EnableIRQ(EXTI2_IRQn); //使能中断线2
    20. //中断线3-PE3
    21. HAL_NVIC_SetPriority(EXTI3_IRQn,2,2); //抢占优先级为2,子优先级为2
    22. HAL_NVIC_EnableIRQ(EXTI3_IRQn); //使能中断线2
    23. //中断线4-PE4
    24. HAL_NVIC_SetPriority(EXTI4_IRQn,2,3); //抢占优先级为2,子优先级为3
    25. HAL_NVIC_EnableIRQ(EXTI4_IRQn); //使能中断线4
    26. }

    中断服务函数:

    1. //中断服务函数
    2. void EXTI0_IRQHandler(void)
    3. {
    4. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); //调用中断处理公用函数
    5. }
    6. void EXTI2_IRQHandler(void)
    7. {
    8. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); //调用中断处理公用函数
    9. }
    10. void EXTI3_IRQHandler(void)
    11. {
    12. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); //调用中断处理公用函数
    13. }
    14. void EXTI4_IRQHandler(void)
    15. {
    16. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); //调用中断处理公用函数
    17. }