为什么stm32中断需要回调函数?
void EXTI0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_IRQn 0 */
/* USER CODE END EXTI0_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
/* USER CODE BEGIN EXTI0_IRQn 1 */
/* USER CODE END EXTI0_IRQn 1 */
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
}
为什么我们需要回调函数而不是只在 EXTI0_IRQHandler 中编写代码? 感谢您的回答!
void EXTI0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_IRQn 0 */
/* USER CODE END EXTI0_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
/* USER CODE BEGIN EXTI0_IRQn 1 */
/* USER CODE END EXTI0_IRQn 1 */
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
}
Why we need a callback function instead of just writting the code in EXTI0_IRQHandler?
Thanks for your answer!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您完全可以直接在
EXTI0_IRQHandler
中编写代码。HAL 提供了中断处理程序,可以为您完成一些样板工作。例如,清除中断标志、检查错误并调用错误处理程序等。
在您的情况下,回调还会接收触发中断的 GPIO 引脚号。如果您手动编写处理程序,则必须从中断标志/状态寄存器中找出答案。
You can absolutely write the code in
EXTI0_IRQHandler
directly.The HAL provides the interrupt handlers that can do some boilerplate work for you. For example, clearing the interrupt flags, checking for errors and calling the error handlers etc.
In your case, the callback also receives the GPIO pin number that triggered the interrupt. If you wrote the hander manually, you would have to figure that out from the interrupt flags/status registers.
简短回答:它只是清除相关的中断标志。如果你自己清除它就不需要它。
长答案:抽象、可移植性。他们保留它以供将来使用。如果需要的话,未来的mpu加上新的外设都可以妥善处理...
Short answer: It just clears the related interrupt flag. If you clear it by yourself you don't need it.
Long answer: Abstraction, portability. They are keeping it for future use. If needed, future mpu with new peripherals can be handled properly...