stm32中如何使用多个定时器捕获中断

问题描述 投票:0回答:2

我有两个来自 tim1ch1 和 tim4ch1 的捕获中断,当我仅使用 tim1 ch1 时,我可以使用

if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
,但是如果我想同时使用 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
        }
    }
}
c embedded stm32 interrupt capture
2个回答
1
投票

这似乎是一种非常奇怪的处理方式。 ISR 告诉您哪个定时器引发了中断。您无需检查结构即可弄清楚。

您可能想要更多类似的东西:

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

每个“处理”部分都可以测试哪个通道导致了中断。如果您只启用您关心的中断,则可能无需检查任何内容。


0
投票

这个想法行不通,因为我们在两个通道上连续检查 pwm 输入,并且根据以前的代码,它只会检查一个条件,不会检查第二个条件,因此它只测量通道输入。如果我错了请纠正我。

© www.soinside.com 2019 - 2024. All rights reserved.