
![]() 有人利用STM32G474芯片的高精度定时器实现两对互补输出,即用到TIMA和TIMB两个定时单元分别输出两对互补信号。 ![]() 可是他发现两个定时器单元输出的同频PWM波形存在着明显的相位差,就像下面的截图一样。 ![]() 但是他希望二者的输出完全同步且无相位差,那有没有办法做到呢? 这是可以的。我们让HRTIM的定时单元基于某个触发事件来同步启动。对于HRTIM来说,可以利用外部触发输入信号或通用定时器TIM1的触发输出信号来同步HRTIM各定时单元的启动。这里就如何使用TIM1的触发输出作为HRTIM的同步信号让HRTIM的定时器单元同步启动做下简单介绍。 HRTIM的各个单元间的同步操作是通过HRTIM里的Master TIMER进行管理的,所以要实现HRTIM各单元间的同步就必须启用Master TIMER,显然,除了启用TIMA/TIMB外,还得使能Master TIMER。 关于同步配置可以参考下面截图: ![]() ![]() 这里对Master TIMER的配置主要是开启它,让它能工作,能管理同步事件即可。 经过上面的配置,再对TIMA/TIMB做“同步事件启动定时器的配置”后,二者就能做到同步启动了,加上二者配置了相同的PER周期值,这样就可以输出如下图所示的同步同相信号了。 ![]() 如果说除了TIMA/TIMB的输出保持同步同相外,还希望中途不时修改周期及占空比且不破坏同相,那又怎么办呢? 即如何在输出频率和占空比可调的情况下仍然保持着两个定时器的输出同步呢? 我们可以开启TIMA或TIMB的更新中断,在其中任意一个定时器的更新中断服务程序里同时修改两个定时器的计数周期值和比较值,并开启预装功能,让参数在下一个溢出更新事件到来时生效,这样就可以做到既能调整定时器的周期值和比较值,又能保证二者的输出同步。 下面简单介绍下实现过程。 Master TIMER的配置没啥特别的,主要是让它工作起来,能让HRTIM的定时单元的同步起作用。TIMA和TIMB的配置这里基本一样,二者的配置差别主要体现在比较值不一样而已。 来看看TIMA的相关配置。重点留意下面截图中下划线标识的地方。主要配置内容包括设置PER、CMP1的参数,开启同步启动、使能预装功能、启用TIM更新中断,对TIMA-TA1/TA2的输出进行配置。 ![]() ![]() 上面是TIMA的基本配置,因为TIMB的配置跟TIMA的相比,除了CMP值不同外,其它基本一样,这里就不重复贴图了。 配置完成后,生成HAL类初始化代码。然后添加如下用户代码。
上面的代码行,基本功能就是开启TIM1,它的TRGO输出信号作为HRTIM-TIMA/TIMB的同步启动信号。如果没有这行代码,此时的TIMA/TIMB是不会工作的。 我在TIMA的更新中断服务程序里修改TIMA/TIMB的PER/CMP的值,查看输出结果。
|
经验分享 | STM32U5系列TIMER+DMA+DAC应用演示
经验分享 | STM32G4 UART+TIMER+DMA应用示例
经验分享 | STM32定时器同步启动示例及应用提醒
经验分享 | STM32 TIMER+DMA输出PWM异常二案例
经验分享 | 更改STM32定时器周期后的输出疑问分析
基于定时器捕获测量脉宽的应用示例
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法