C语言 如何在stm32中使用多个定时器捕获中断

dhxwm5r4  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(154)

i有两个来自tim1ch1和tim4ch1的捕获中断,当i只使用tim1 ch1时,i可以使用if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1),但如果i同时使用tim4ch1中断呢?可以使用以下格式吗?对不对?你能提醒我一下吗。我将无法尝试它作为软件,所以我想问专业人士关于这些类型的主题。

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
        if (htim->Instance == htim1.Instance) {
           // to do sth
        } 
    else if (htim->Instance == htim4.Instance) {
         // to do sth
        }
    }
}
2hh7jdfx

2hh7jdfx1#

这似乎是一个非常奇怪的处理方式。ISR告诉您哪个计时器引发了中断。你不需要检查结构就能弄清楚。
你可能想要更像是:

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    if (htim == &htim1)
    {
        // handle TIM1 interrupts
    }
    else if (htim == &htim4)
    {
        // handle TIM4 interrupts
    }
}

这些“处理”部分中的每一个都可以测试哪个通道导致中断。如果您只启用了您关心的中断,那么可能没有什么需要检查的。

相关问题