[STM32U3] 【STM32U385RG 测评】+ PWM调节控制LED

[复制链接]
699|0
jinglixixi 发表于 2025-8-12 20:38 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2025-8-15 10:14 编辑

在厂家提供的例程中,提供了多个PWM通道输出固定占空比的示例,但缺少改变占空比的介绍。为此,作了一下自动改变占空比和按键改变占空比的尝试
这采用的是以PWM通道1输出脉冲来控制外挂LED模块的亮度,通道1的输出引脚为PA0,其位置如图1所示。
图片1.png
1 所用接口及引脚

实现自动改变LED模块亮度的主程序为:

  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   BSP_LED_Init(LD2);
  6.   MX_GPIO_Init();
  7.   PULSE1_VALUEP=2;
  8.   MX_TIM2_Init();
  9.   MX_ICACHE_Init();
  10.   KEY_Config();        
  11.   if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1) != HAL_OK)
  12.   {
  13.                   Error_Handler();
  14.   }
  15.   i=2;
  16.   while (1)
  17.   {
  18.                   MX_TIM2_Init();               
  19.                   PULSE1_VALUEP=(41 * i / 100);
  20.                   i=(i+2)%100;
  21.                   HAL_Delay(100);
  22.   }
  23. }

经程序的编译和下载,其效果如图2和图3所示。
图片2.png
2 亮度较弱状态

图片3.png
3 亮度较强状态


在开发板上,为用户配置了一个蓝色的测试按键,见图4所示。利用它可改变占空比的值。
图片4.png
4 用户键及引脚连接


实现按键改变占空比来调节LED模块亮度的主程序为:

  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   BSP_LED_Init(LD2);
  6.   MX_GPIO_Init();
  7.   PULSE1_VALUEP=2;
  8.   MX_TIM2_Init();
  9.   MX_ICACHE_Init();
  10.   KEY_Config();        
  11.   if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1) != HAL_OK)
  12.   {
  13.                    Error_Handler();
  14.   }
  15.   i=2;
  16.   while (1)
  17.   {
  18.                   if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==GPIO_PIN_SET)
  19.                   {
  20.                            PULSE1_VALUEP=(41 * i / 100);
  21.                            i=(i+2)%100;
  22.                            MX_TIM2_Init();        
  23.                            HAL_Delay(100);
  24.                   }
  25.   }
  26. }

经程序的编译和下载,在程序运行后,每按下一次用户键,就会增加一定的亮度,直至最亮后再重新由弱变强。

在添加OLED屏并使用A/D来提供占空比的情况下,其测试效果如图5至图7所示。
v.jpg
图5  低亮度


图6 中等亮度

图7 高亮度


演示效果:







您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

2957

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部