STM32
直播中

fansz

8年用户 1236经验值
擅长:制造/封装
私信 关注
[问答]

定时器做PWM输出时,定时器回调函数只能执行一次,是什么原因?

定时器做PWM输出时,初始化定时器时执行HAL_tiM_PWM_Init( TIM1_Handler);时进入回调函数里初始化GPIO引脚;如果需要再重新初始化一次定时器时,在执行上面这行初始化时,程序并不再进入回调函数里执行,请问有没有大神知道是什么原因?谢谢!

回帖(2)

吴巧芬

2024-5-30 09:22:36
一般来讲,不要反复初始化。


你若需要再次调用HAL_TIM_PWM_Init( TIM1_Handler)做底层初始化的话,可以先将  htimx.State改为HAL_TIM_STATE_RESET。


当然,如果你不基于目前库设计流程,自行组织代码的话就没这个环节。
举报

study875

2024-5-30 14:32:08
根据您的描述,我将分步分析可能的原因:

1. 首先,确保您使用的是正确的库和函数。在STM32 HAL库中,初始化定时器PWM输出时,应使用HAL_TIM_PWM_Init()函数。同时,确保您已经正确配置了定时器和PWM通道。

2. 其次,检查您的回调函数是否正确设置。在HAL_TIM_PWM_Init()函数中,您需要指定一个定时器回调函数,例如:

```c
void TIM1_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM1) {
        // 您的回调函数代码
    }
}
```

3. 接下来,确保您在初始化定时器时正确设置了回调函数。在HAL_TIM_PWM_Init()函数调用之前,您需要使用HAL_TIM_RegisterCallback()函数注册回调函数:

```c
HAL_TIM_RegisterCallback(&htim1, HAL_TIM_PWM_PULSE_FINISHED_CB_ID, TIM1_PWM_PulseFinishedCallback);
```

4. 如果您需要重新初始化定时器,确保在重新初始化之前,先使用HAL_TIM_DeInit()函数对定时器进行去初始化操作。这样可以确保定时器的配置被清除,然后再次使用HAL_TIM_PWM_Init()函数进行初始化。

5. 最后,检查您的代码逻辑,确保在重新初始化定时器时,没有其他代码干扰回调函数的执行。

综上所述,可能的原因包括:

- 回调函数未正确设置或注册。
- 重新初始化定时器时,未先进行去初始化操作。
- 代码逻辑问题导致回调函数未被正确执行。

希望这些信息能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我能够更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分