STM32的PWM调用TIM_SetCompare无反应

请问stm32的动态输出PWM调用TIM_SetCompare进行修改占空比只有第一次是有效的是什么原因?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 文章:STM32 PWM输出之TIM_SetCompare函数的应用 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: STM32 PWM输出之TIM_SetCompare函数的应用中的 函数的应用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    想必输出PWM大家都应该会了吧,但是如何更加灵活方便的使用PWM,可能大家还存在着问题,今天我给大家介绍一下TIM_SetCompare这个函数,让大家能够随时随地输出PWM。

    /**
      * @brief  Sets the TIMx Capture Compare1 Register value
      * @param  TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
      * @param  Compare1: specifies the Capture Compare1 register new value.
      * @retval None
      */
    void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
    {
      /* Check the parameters */
      assert_param(IS_TIM_LIST8_PERIPH(TIMx));
      /* Set the Capture Compare1 Register value */
      TIMx->CCR1 = Compare1;
    }
    

    这个是STD的标准库函数,这个函数的功能是就是用来输出PWM的。在深入了解这个函数之前我们先看一个图片。在这里插入图片描述
    这个图片表示的是各个定时器下能够输出PWM的GPIO口。我们以PA1为例,从表中可以看出PA1位于定时器5的CH2。对于PA1我们怎么让他输出PWM呢?首先就是先把配置给配置好,让他能够输出PWM,在此基础上,才能随心所欲的使用他输出PWM。
    好了,废话不多说,开始我们的重点,这个函数TIM_SetCompare1,这个函数有四个,分别是TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4。位于CH1那一行的GPIO口使用TIM_SetCompare1这个函数,位于CH2那一行的GPIO口使用TIM_SetCompare2这个函数。以此类推。我们再看这个函数的参数,第一个参数传入相应定时器,(定时器6,7除外)。使用的GPIO口位于哪个定时器那一列就传入哪个定时器。第二个参数是输出PWM的高电平的时间。这个值如果大于周期的值,将会与周期保持一致。用第二个参数除以周期就得占空比。比如我想要使用PA1输出PWM,则应该这样写TIM_SetCompare2(TIM5,Compare)。Compare是输出高电平的时间。你想要在哪里使用PWM就在哪里调用这个函数。GPIO口,占空比,周期都可以随意设置,是不是很方便啊。

    PS:文中可能有些地方概念些许有点问题,但是目前实测该方法可行,之后深入学习了解之后,再来勘误。 2021年2月21日 更


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^