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

共2条 1/1 1 跳转至

【NUCLEO-WBA55CG开发板评测】DIY蓝牙小台灯之PWM控制台灯亮度

工程师
2024-12-11 21:13:54     打赏

简介:

        感谢社区提供的板卡评测机会,板子收到后一直没来得及研究,按照视频教程先使用PWM板子输出控制台灯灯条亮度。本次试验供电模块及MOS管按照视频资料链接购买的,灯条从家里闲置的台灯上拆除下来使用。

PWM 输出配置

      PWM 的初始化配置 只要在STM32CubeMX 简单配置即可生成 对应通路的初始化配置代码。PWM配置如下。


image.png 

TIM2 的PWM 通路输出的PAD为PA6

image.png

对应在板子的PIN脚如下

image.png

按照资料的方式连接电路。

image.png

image.png


功能验证

硬件接线连接完毕后,我们在代码中添加PWM 初始化配置,及按键按下更新PWM 占空比代码。

初始化代码如下

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */
  MX_APPE_Config();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* Configure the peripherals common clocks */
  PeriphCommonClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_GPDMA1_Init();
  MX_RAMCFG_Init();
  MX_RTC_Init();
  MX_RNG_Init();
  MX_ICACHE_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
 
  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,00);
  
  /* USER CODE END 2 */

  /* Init code for STM32_WPAN */
  MX_APPE_Init(NULL);

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    MX_APPE_Process();

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


在按键回调中更新PWM 输出占空比。

extern TIM_HandleTypeDef htim2;

static void Button_TriggerActions(void *arg)
{
  ButtonDesc_t *p_buttonDesc = arg;

  p_buttonDesc->longPressed = BSP_PB_GetState(p_buttonDesc->button);

  static uint32_t pwm = 0;
  
  pwm += 99;
  
  if(pwm >= 1000)
    pwm = 0;
  
  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,pwm);
  
  LOG_INFO_APP("Button %d pressed\n", (p_buttonDesc->button + 1));
  switch (p_buttonDesc->button)
  {
    case B1:
      UTIL_SEQ_SetTask(1U << TASK_BUTTON_1, CFG_SEQ_PRIO_0);
      break;
    case B2:
      UTIL_SEQ_SetTask(1U << TASK_BUTTON_2, CFG_SEQ_PRIO_0);
      break;
    case B3:
      UTIL_SEQ_SetTask(1U << TASK_BUTTON_3, CFG_SEQ_PRIO_0);
      break;
    default:
      break;
  }

  return;
}

#endif

/* USER CODE END FD_LOCAL_FUNCTIONS */

/*************************************************************
 *
 * WRAP FUNCTIONS
 *
 *************************************************************/

void UTIL_SEQ_Idle( void )
{
#if ( CFG_LPM_LEVEL != 0)
  HAL_SuspendTick();
  UTIL_LPM_EnterLowPower();
  HAL_ResumeTick();
#endif /* CFG_LPM_LEVEL */
  return;
}


上电后灯条已经被点亮,示波器查看PA6波形也已经正确输出了PWM信号。

image.png

通过板子上的按键也按照预期的调节灯条亮度

1f97275027f9fd3c00255f296228f93f[00-00-04--00-00-16].gif





院士
2024-12-12 16:59:52     打赏
2楼

谢谢分享。


共2条 1/1 1 跳转至

回复

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