为什么stm32中断需要回调函数?

发布于 2025-01-14 12:30:33 字数 355 浏览 2 评论 0原文

   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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠檬心 2025-01-21 12:30:33

您完全可以直接在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.

私藏温柔 2025-01-21 12:30:33

简短回答:它只是清除相关的中断标志。如果你自己清除它就不需要它。

长答案:抽象、可移植性。他们保留它以供将来使用。如果需要的话,未来的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...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文