STM32G0 HAL EXTI 回调实现是错误的。根据 UM2319 rev 1 第 3.11.2 节,它说: 用户必须从 stm32g0xx_it.c 调用 HAL_GPIO_EXTI_IRQHandler() 并实现 HAL_GPIO_EXTI_Callback() STM32G0 HAL 不遵循此流程,而所有其他 HAL 系列(例如:F0、F4、F7、G4、L1)HAL 都遵循此流程。 在实际代码中,STM32G0 HAL 驱动程序在 stm32g0xx_hal_gpio.c 中实现 EXTI 中断处理程序,如下所示:
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin){ /* EXTI line interrupt detected */ if (__HAL_GPIO_EXTI_GET_RISING_IT(GPIO_Pin) != 0x00u) { __HAL_GPIO_EXTI_CLEAR_RISING_IT(GPIO_Pin); HAL_GPIO_EXTI_Rising_Callback(GPIO_Pin); } if (__HAL_GPIO_EXTI_GET_FALLING_IT(GPIO_Pin) != 0x00u) { __HAL_GPIO_EXTI_CLEAR_FALLING_IT(GPIO_Pin); HAL_GPIO_EXTI_Falling_Callback(GPIO_Pin); }}
|