这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板评测】2、PWM控制LED灯亮度

共1条 1/1 1 跳转至

【STM32WBA55CG开发板评测】2、PWM控制LED灯亮度

助工
2024-12-08 10:00:28     打赏

本文根据et’s Do!STM32WBA55无线MCU开发大作战活动要求,实现STM32WBA55 PWM控制LED灯亮度

一、LED确定

STM32WBA55CG开发板板载3个LED,先确定要控制哪个LED。

LD3->PB8image.png

PB8可以复用为TIM1_CH1

image.png二、STM32CuteMX配置

1、BSP配置

选择LD1用于PWM手动、自动提示。亮表示手动调节PWM占空比,灭表示需要B2、B3手动调节PWM占空比。

选择B1、B2、B3。

B1:PWM手动、自动控制;B2:手动增加PWM占空比时间;B3:手动减少PWM占空比时间。

选择VCOM用于串口打印信息。

image.png2、TIM1配置

image.png

image.png

时钟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占空比自动调节改变亮度。





关键词: STM32WBA55CG     评测     PWM    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]