原创 【意法半导体 STM32 WL55】4、定时器的妙用

2025-5-25 13:15 58 0 分类: MCU/ 嵌入式 文集: 试用活动

PWM(脉冲宽度调制)技术通过调控LED的导通时间,即信号周期中的占空比,实现了LED亮度的精细调节,从而巧妙地创造出呼吸灯效果。该技术融合了LED对电流变化的敏感响应特性与人眼的视觉暂留效应,是电子工程领域中的一项经典且极具实用价值的技术。作为深入学习开发板PWM功能与定时器应用的理想切入点,PWM技术通过精确控制占空比,使得LED亮度能够连续、平滑地变化,模拟出如呼吸般自然的亮度循环。实现这一效果的关键在于定时器的精准定时功能,它负责精确控制PWM信号的周期与占空比。通过设定定时器的计数值与重装载值,可以精确确定PWM信号的周期长度,并通过调整周期内输出电平的时间来改变占空比,进而实现对LED亮度的精确控制。

硬件方面用到就是GPIO章节的LED(红灯),我们这次通过定时器的基本定时功能和高级应用PWM实现红灯的呼吸灯效果。

LED_RED配置为TIM2_CH4:

截图.png

接下来打开定时器2和通道4,并配置为PWM输出:

image.png

然后是进行定时器参数的配置:

image.png

接下来配置定时器16为基本定时器:

image.png

定时10ms,用于修改占空比。

我们在初始化阶段需要启动定时器:


HAL_TIM_Base_Start_IT(&htim16);

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);

__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_4,0);


接下来就是软件功能的实现,LED的呼吸灯效果:


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

if (htim->Instance == TIM16) {

HAL_IncTick();

if(LED_ChangeFlag == 1)

{

Tim_cnt++;

if(Tim_cnt <= 100){

__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_4,Tim_cnt*1);

}

else if(Tim_cnt > 100 && Tim_cnt <= 200){

__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_4,(200-Tim_cnt)*1);

}

else if(Tim_cnt>=200)

Tim_cnt = 0;

}

}

}


效果如下:

3.gif

作者: 无言的朝圣, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-4014618.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
0
关闭 站长推荐上一条 /2 下一条