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

目录

PWM介绍

PWM输出模式:

PWM占空比:

PWM周期与频率公式:

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

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

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

3. 时钟配置

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

5.示例代码:


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);
  }
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱嵌入式的小佳同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值