stm32使用cubemx配置pwm呼吸灯

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于有效电平的时间占据整个信号周期的百分比。PWM是脉冲宽度调制。有效电平持续的时间占整个周期的百分比称为占空比

一、pwm是什么?

脉冲宽度调制(PWM) 是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度中设置为高(5v或3.3v)和低(0v)。通常,我们将PWM的高电平称为1,低电平为0。

二、使用步骤

代码如下(示例):

话不多说,我们直接开始
我使用的是stm32f103rct6这块板子,我们直接开始
首先打开cubemx
创建工程
在这里插入图片描述
在这里插入图片描述
到这里我们开始对工程的基本配置
首先开启晶振,
在这里插入图片描述
然后开始配置时钟树
在这里插入图片描述
接下来我们开始pwm
在这里插入图片描述
开启定时器二频道一的pwm
接下来我们
在这里插入图片描述
在这里插入图片描述
接下来我们基本配置完成了
下面开始保存工程,打开工程了
在这里插入图片描述
在这里插入图片描述
完成创建过后
打开工程
我们需要在这里添加如下代码
在这里插入图片描述

  uint16_t pwmVal = 0;  //占空比大小(CCRx的大小)
    uint8_t direction = 1;  //呼吸灯方向: 1. 越来越亮   2. 越来越暗

在这里添加如下
在这里插入图片描述

   HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);

这里添加如下
在这里插入图片描述

   HAL_Delay(3);  //控制呼吸灯呼吸速率
                   //控制占空比大小,即修改CCRx的大小
        if(direction){
            pwmVal++;
        }else{
            pwmVal--;
        }
        //设置了ARR为499,因此每计数500为一个周期
        if(pwmVal > 500){ 
            direction = 0;  //改变呼吸灯方向
        }else if(pwmVal == 0){
            direction = 1;  //改变呼吸灯方向
        }
        //修改定时器4通道三的PWM的占空比
        __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,pwmVal);

到这里就配置好了

我们就完成了一个pwm呼吸灯的配置了
采用的定时器二频道二

三、pwm理解

io口如何产生一个pwm,无非就是做一个高低电平周期性的变化,这种思想很重要,确定频率就可以确定周期(T=1/f)也就是在一个周期内产生pwm的时间可以确定下来了,如何改变占空比确定了时间,高电平的时间不就是想要的占空比么,比如要产生一个频率1khz,占空比为70%的pwm,根据频率我们知道了周期为1ms,产生一个占空比为70%的不就是0.7ms的时间给高电平么,我们用定时器中断的方式,使0.1ms产生一次中断,计数中断次数,中断处理函数前七次中断都给高电平就ok了

总结

本人在学习STM32过程中发现网上的PWM相关知识比较散乱,对于小白或新手而言会有很多不了解的地方。因此,这里结合自己的学习过程,将PWM这一版块的知识整合,如有错误之处,请批评指正!方法。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值