STM32 — PWM介绍和使用PWM实现呼吸灯效果

简介: STM32 — PWM介绍和使用PWM实现呼吸灯效果

PWM介绍

STM32F103C8T6 PWM资源:

高级定时器(TIM1):7路

通用定时器(TIM2~TIM4):各4路

PWM输出模式:

  • PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向 下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
  • PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向 下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。

PWM占空比

是一个脉冲周期内,高电平的时间与整个周期时间的比例

由TIMx_CCRx寄存器决定,通常设置CNT < CCRx为有效电平中的高电平,则CRR/ARR决定占空比,例如CRR为100,ARR为500,则占空比为20%

PWM周期与频率公式:

假如:PSC = 71Hz,ARR = 499Hz,Tclk = 72M Hz,

则T为 72 x 500 / 72000000 = 0.5ms

频率为 1 / T = 2kHz

使用PWM点亮LED灯实现呼吸灯效果

LED灯为什么可以越来越亮,越来越暗?

这是由不同的占空比决定的。

如何计算周期/频率?

假如频率为 2kHz ,则:PSC=71,ARR=499,上面已经讲过

LED灯连接到哪个定时器的哪一路?

通过看产品手册:

打开CubeMX配置STM32F103C8T6


1. 在 SYS 选项里,将 Debug 设为 Serial Wire

2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator

3. 时钟配置

4.配置定时器设置PWM,有效电平设置为Low(低电平),因为LED灯低电平亮

5.示例代码:

    // 使能 Timer4 第3通道 PWM 输出
    HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
 
  uint16_t pwmVal = 0; // 调整PWM占空比
  uint8_t swap = 1; // 设置改变方向。1:占空比越来越大;0:占空比越来越小
 
  while (1)
  {
    HAL_Delay(1);
    
    if(swap)
        pwmVal++;
    else
        pwmVal--;
    
    if(pwmVal > 500)
        swap = 0;
    else if(pwmVal == 0)
        swap = 1;
    
    //修改比较值,修改占空比
    __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
  }
相关文章
|
1月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
1月前
|
存储
【STM32基础 CubeMX】PWM输出
【STM32基础 CubeMX】PWM输出
298 0
|
9月前
STM32F0单片机 PWM + ADC 控制有刷电机
STM32F0单片机 PWM + ADC 控制有刷电机
|
10月前
STM32使用PWM脉冲呼吸灯
对于灯等来说有很多种方法,前面介绍了一些基础的点灯方法,比如直接点灯,按键控制点灯,按键中断点灯,但都是比较简单的一些方法也很基础,要问我有没有什么高级点的点灯方法,答案是有的,在这我要介绍一种高级点灯的方法就是使用PWM进行点灯。
153 0
STM32使用PWM脉冲呼吸灯
|
12天前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
45 2
|
1月前
|
传感器
|
12天前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
41 4