本文根据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占空比自动调节改变亮度。