使用 "EXTI_IRQHandler" 和 "EXTI_Callback" 有什么区别?

What is the difference between using "EXTI_IRQHandler" and "EXTI_Callback"?

我在 STM32 微控制器的项目中使用 HAL 库。

在 STM 提供的示例代码中,他们使用 HAL_GPIO_EXTI_Callback 作为按钮中断。然而,我在class中了解到,我们需要使用IRQHandler来处理中断。

所以我的问题是什么时候我们使用HAL_GPIO_EXTI_CallbackHAL_GPIO_EXTI_IRQHandler来处理中断?

在ST的示例工程中,有几个针对单个中断的函数调用:

  • 中断处理程序本身称为 EXTI15_10_Handler。它是其地址在向量 table 中指定的函数。它是中断线 EXTI15_10 的通用处理程序,默认情况下它是 "routed" 到什么都不做的默认函数。由于它是一个弱符号,您可以根据需要重新定义它。

  • 如果您使用带有标准 GPIO 的 EXTI15_10 中断线,EXTI15_10_Handler 应该调用 HAL_GPIO_EXTI_IRQHandler。这是HAL提供的功能。

  • 后一个函数是清除IT标志,然后调用HAL_GPIO_EXTI_Callback,也是一个默认什么都不做的弱函数。这是您需要实现的函数来处理您的 GPIO。