电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
GD32VF103之PWM配置
分 享
扫描二维码分享
GD32VF103之PWM配置
gd32
兆易创新
PWM
gcrisis
关注
发布时间: 2020-11-06
丨
阅读: 1049
![](https://cf02.ickimg.com/bbsimages/202011/ef273fc9b665cadbcfdf92de9c1230a9.png) pwm在嵌入式系统中扮演者非常重要的角色,它可以控制显示屏和led的亮度、可以控制电机的转速和舵机的角度,通过pwm将数字的电压输出信号转化成了模拟电压的输出,通过控制占空比就可以调节输出的平均电压。 pwm输出是基于定时器的一个功能,使用它需要进行下面的配置(以定时器1为例,定时器0没有成功): **1、时钟使能; 2、定时器配置; 3、gpio配置; 4、通道配置; 5、打开定时器; 6、更新比较值,改变pwm输出。** ###1、时钟使能 首先我们要打开外设的时钟,包括GPIO的时钟和定时器的时钟。gpioa在APB2使能寄存器中配置,定时器1在APB1使能寄存器中。这些在前面的文章中已经介绍过,这里就不细说了。 ![](https://cf02.ickimg.com/bbsimages/202011/a8a4a36c529031ae9956559dd60cdcdc.png) ![](https://cf02.ickimg.com/bbsimages/202011/be2dd9d0a6558f9de43e488c570751f3.png) 代码如下: ![](https://cf02.ickimg.com/bbsimages/202011/9e47b7ad202eb22d1b3901be25ed5d5b.png) ###2、定时器配置 定时器的配置比较简单,设置一下预分频,设置计数方向、对齐模式、自动重载值就可以了。自动重载值决定了pwm的周期。 ![](https://cf02.ickimg.com/bbsimages/202011/65a8fb8079ccc4b0ce397e739125aab7.png) 定时器108分频后是1Mhz,所以2000的重载值周期为2ms。 ###3、gpio配置 我这里使用定时器1的通道1,对应的GPIO是A1。设置A1为AFIO 推挽输出。 ![](https://cf02.ickimg.com/bbsimages/202011/1398cadce984e724f5ed59e8abb2b6cf.png) ###4、通道配置 pwm是输出,所以要将通道配置为输出模式,寄存器是通道控制寄存器0,bit[9:8]设置为00,表示通道1是输出,bit[14:12]设置为110,表示输出比较模式配置为pwm0。 ![](https://cf02.ickimg.com/bbsimages/202011/327a57416fa5123938e8fba52639377d.png) ![](https://cf02.ickimg.com/bbsimages/202011/e49f29ec33f873da073b820dbe6aeb93.png) 设置通道的极性并使能通道,寄存器是通道控制寄存器2,bit[5:4]这里设置为11,通道低电平有效。 ![](https://cf02.ickimg.com/bbsimages/202011/b793bb163dd639e3eba03fd8bbe42ab0.png) 比较寄存器在输出模式下存放了即将于计数器进行比较的值,它决定了输出pwm的占空比。主程序中就是改变它的值来调整pwm的输出。 ![](https://cf02.ickimg.com/bbsimages/202011/9b74ecc8e9f101bde6a704b51ffe61b1.png) 代码如下: ![](https://cf02.ickimg.com/bbsimages/202011/cb4ddf73199b0febd87037520009d92a.png) ###5、打开定时器 上面都设置好后打开定时器就可以了。 ![](https://cf02.ickimg.com/bbsimages/202011/9a417676bceaba7daa791f11e1f4140c.png) ###6、更新比较值,改变pwm输出 在主程序中设置比较寄存器为500 ![](https://cf02.ickimg.com/bbsimages/202011/dd797efa965321011915df8db255924e.png) 得到波形如下所示: ![](https://cf02.ickimg.com/bbsimages/202011/60a9708fdc249e789fc08b4d04e4aea0.png) 设置比较寄存器为1500 ![](https://cf02.ickimg.com/bbsimages/202011/324d297ae77f639312bf78bbc25cbe19.png) 得到波形如下: ![](https://cf02.ickimg.com/bbsimages/202011/00e83c77276f7f2e5e0a06994d23e18b.png)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
gcrisis
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交