你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32C0评测】2、PWM实现呼吸灯

[复制链接]
网络孤客 发布时间:2024-3-8 17:30

上一篇介绍了基本开发环境搭建,详见【STM32C0评测】1、开箱、环境搭建、按键点灯

这篇主要目的是:使用TIM1输出PWM方式,利用Nucleo-C031C6板载LED实现呼吸灯效果

STM32CubeIDE太方便了,继续使用开始工作

一、GPIO配置

1、还是先从电路图开始,板载LD4是由PA5驱动

灯电路图.jpg

查看数据手册,PA5可以作为TIM1_CH1输出或TIM1_CH3N(通道3反相)输出,简单点就用TIM1的通道1

PA5功能.jpg

2、新建Nucleo-C031C6板项目,修改配置(新建过程不详细说明)

把PA5配置为TIM1_CH1

修改GPIO配置.jpg

从左边选择TIM1,按下图设置。

pwm1.jpg

其中预分频系数为47(48-1),即分频后为1MHz

自动重载值为999(1000-1),程序只需控制Pulse值就能设置占空比(占空比=Pulse/(自动重载值+1))

Pulse.jpg

3、生成代码

二、程序代码

红框为写的代码

PWM程序.jpg

初始化代码

uint16_t PWM_Value = 0; //定义循环变量,这个变量会用作控制占空比

int16_t Direction = 1; //控制方向: 1为增亮;-1为减弱.

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //启动PWM功能

循环体内代码

HAL_Delay(50); //延时函数控制变化速度,这里设置50m改变一次占空比

PWM_Value += Direction; //如果Direction=1则亮度逐渐增加,如果为-1,亮度逐渐减弱

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, PWM_Value*PWM_Value); //修改Pluse(也就是修改占空比),为了效果更好,每次Pulse值为PWM_Value的平方

if (PWM_Value == 31) //因为自动重载值+1 = 1000,PWM_Value的平方值不能超过(31*31=991),如果亮度达到最亮,方向变为减弱

Direction = -1; else // 如果达到最暗,方向变为增亮

if (PWM_Value == 0)

      Direction = 1;

三、效果

不会上视频,上一张微亮的图

微亮.jpg

配置.jpg
pwm.jpg
收藏 评论0 发布时间:2024-3-8 17:30

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版