STM32呼吸灯的原理就是利用PWM技术控制LED的亮度变化,以实现呼吸灯效果。
PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,是一种控制方法,主要应用于各种电子设备的控制器中。从控制电路的输出来看,PWM是一种将脉冲宽度作为控制目标的调制技术。它通过控制每个脉冲的宽度和频率,来控制输出电平的平均值,从而达到控制电路的目的。例如,在电机控制器中,PWM技术可以通过改变电机绕组的电流方向和大小来控制电机的转速和转向。在LED灯控制器中,PWM技术可以通过短时间的开关灯电压,来控制LED的明暗和亮度。
(注:本文实验基于STM32F407IGH6+CubeMX5.3)
具体实现过程如下:
1,配置GPIO口为PWM输出模式,设置对应的频率和占空比;
2,设置RCC为外部晶振模式
3,打开PWM,使用HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
4,设置比较寄存器:
void TIM13_Set_Compare(uint32_t compare) //定时器捕获
{
TIM13->CCR1 = compare; //通过修改comepare值来影响占空比
}
5,初始化:int32_t compare = 0; //led比较值
uint8_t dir = 0; //增长方向向上
6,开启开启PWM信号产生器:HAL_TIM_PWM_Start(&htim13, TIM_CHANNEL_1);
7,在主循环中设置一个计数器,每次循环时改变计数器的值,作为PWM输出的占空比;
while (1)
{
if(!dir) //向上增长
{
compare += 10;
if(compare >= 1000)
{
compare = 1000-1;
dir = 1;
}
}
else{ //向下增长
compare -= 10;
if(compare<=0)
{
compare = 0;
dir = 0; //向上
}
}
TIM13_Set_Compare(compare); //设置CCR的值
HAL_Delay(20);
}
}