本文根据et’s Do!STM32WBA55无线MCU开发大作战活动要求,实现STM32WBA55 PWM控制LED灯亮度
一、LED确定
STM32WBA55CG开发板板载3个LED,先确定要控制哪个LED。
LD3->PB8
PB8可以复用为TIM1_CH1
二、STM32CuteMX配置
1、BSP配置
选择LD1用于PWM手动、自动提示。亮表示手动调节PWM占空比,灭表示需要B2、B3手动调节PWM占空比。
选择B1、B2、B3。
B1:PWM手动、自动控制;B2:手动增加PWM占空比时间;B3:手动减少PWM占空比时间。
选择VCOM用于串口打印信息。
2、TIM1配置


时钟100Mhz
100/(99+1)=1Mhz
周期:1Mhz/(4999+1)=200Hz
占空比:2500/(4999+1)=50%
三、程序
1、增加一个函数用于控制PWM占空比
/* USER CODE BEGIN 0 */
void TIM_SetTIM1Compare1(uint32_t compare)
{
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, compare); // compare为新的占空比值
}
/* USER CODE END 0 */2、启动TIM
/* USER CODE BEGIN 2 */
/* Start channel 1 */
if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1) != HAL_OK)
{
/* PWM Generation Error */
Error_Handler();
}
/* USER CODE END 2 */3、while(1)
/* USER CODE BEGIN WHILE */
while (1)
{
if(compareManual==0)
{
compareVal+=10;
}
if(compareVal>2500) compareVal=0;
TIM_SetTIM1Compare1(compareVal); //改变PWM占空比
HAL_Delay(10);
/* USER CODE END WHILE */4、EXIT 回调函数
/* USER CODE BEGIN 4 */
void BSP_PB_Callback(Button_TypeDef Button)
{
switch(Button)
{
case B1: //PWM占空比手动、自动控制
if(compareManual==0){
BSP_LED_On(LD1);
compareManual=1;
printf("manual\r\n");
}
else
{
BSP_LED_Off(LD1);
compareManual=0;
printf("auto\r\n");
}
//BSP_LED_Toggle(LD1);
break;
case B2: //手动增加占空比
compareVal+=100;
break;
case B3: //手动减少占空比
compareVal-=100;
break;
default:
break;
}
}四、运行效果
蓝灯亮时,需要手动按B2、B3调节PWM占空比调节红灯亮度。

蓝灯灭时,红灯PWM占空比自动调节改变亮度。

我要赚赏金
