使用 "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_Callback
和HAL_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。
我在 STM32 微控制器的项目中使用 HAL 库。
在 STM 提供的示例代码中,他们使用 HAL_GPIO_EXTI_Callback
作为按钮中断。然而,我在class中了解到,我们需要使用IRQHandler来处理中断。
所以我的问题是什么时候我们使用HAL_GPIO_EXTI_Callback
和HAL_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。