STM32
直播中

发生的方式

8年用户 1226经验值
擅长:处理器/DSP
私信 关注

stm32用tim输出pwm似乎先使能一次cen再设置cnt才有用,为什么?

设计是用tim输出Pwm控制呼吸灯,有时要求其只亮或只灭,直到状态变化。这个功能我准备用修改cnt,关闭cen的方式实现。实验中我发现必须要使能cen一次,哪怕之后立刻关掉,设置cnt才会正常起作用。请问这是为什么,有什么更好的方式修改

回帖(1)

张玲

2024-9-29 16:37:04
在STM32中,使用定时器(TIM)输出PWM信号时,确实需要先使能计数器(CEN),然后再设置计数器(CNT)的值。这是因为STM32的定时器设计和工作原理。

1. **计数器使能(CEN)**:当计数器使能后,定时器开始计数。计数器的值会根据预设的时钟频率递增或递减。

2. **计数器值(CNT)**:计数器的值决定了PWM信号的占空比。当CNT的值达到预设的比较值(ARR,自动重载寄存器)时,PWM信号的状态会改变(从高电平变为低电平或从低电平变为高电平)。

3. **为什么需要先使能CEN**:在STM32中,CNT的值只有在计数器使能后才会更新。如果你在使能CEN之前设置CNT的值,那么这个值可能不会被立即应用,因为CNT的更新是在计数器的下一个更新事件时发生的。这就是为什么你发现需要先使能CEN,然后再设置CNT的值。

4. **实现只亮或只灭**:你可以通过设置CNT的值来控制PWM信号的占空比,从而实现只亮或只灭的效果。例如,如果你想让LED一直亮,可以将CNT设置为ARR的值,这样PWM信号将始终保持高电平。如果你想让LED一直灭,可以将CNT设置为0,这样PWM信号将始终保持低电平。

5. **更好的方式**:如果你需要在运行中动态改变PWM信号的占空比,可以通过以下步骤实现:
   - 使能计数器(CEN)。
   - 在需要改变PWM信号时,更新CNT的值。
   - 如果需要停止PWM信号,可以禁用CEN。

6. **代码示例**:
   ```c
   // 使能定时器
   TIM_Cmd(TIMx, ENABLE);
   
   // 设置CNT的值
   TIM_SetCounter(TIMx, new_value);
   
   // 如果需要停止PWM信号
   TIM_Cmd(TIMx, DISABLE);
   ```

通过这种方式,你可以灵活地控制PWM信号,实现不同的功能需求。
举报

更多回帖

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