启动两个计时器,尽量减少它们之间的延迟

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

我正在使用 STM32 并使用两个 PWM 定时器。它们都以 50Hz 运行,当我依次启动它们(通过调用

HAL_TIM_PWM_Start()
)时,它们以 13.75us us 的偏移量开始。我想减少该偏移并将它们调整为同时启动,我怎样才能实现这一点?我使用的是STM32F439

timer stm32 real-time freertos
1个回答
0
投票

最简单的方法仍然是立即启动两个定时器,但延迟是由于 Cube/HAL 代码相对较多,可能缺乏编译器优化,也可能是中断造成的。更严谨的方式是使用定时器的主从连接,但是设置起来比较困难。

Cube/HAL不支持这个功能,所以你必须自己编写。将 HAL_TIM_PWM_Start() 的内容复制到您的函数中,并删除 __HAL_TIM_ENABLE() “调用”(这是一个宏,不执行任何其他操作,只是设置 TIMx_CR1.CEN)。为两个计时器调用此函数(它会像 Cube/HAL 一样为它们设置所有内容,但不会启动它们)。现在通过

启动两个计时器
__disable_irq();
__HAL_TIM_ENABLE(htim1);
__HAL_TIM_ENABLE(htim2);
__enable_irq();

两个波形之间仍然可能存在几个(N)周期的延迟;您可以通过在启用第一个定时器之前将第二个定时器的 TIMx_CNT 设置为 N 来补偿它。

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