打印
[STM32C0]

【STM32C092RC 测评】+NUCLEO-C092RC开发板pwm+timer+控制呼吸

[复制链接]
840|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yinxiangxv 于 2025-5-26 22:30 编辑

采用工具进行相关的配置,选择好对应的封装?

这里开启了tim1,tim2对应的通道,同时进行相关参数的配置
根据时钟树的显示,这里面不再对时钟的频率进行修改,采用默认方式。

那么下面看看对应的关键配置,因为tim1是高级计时器,所以参数比较多,但是这里用到的比较有限

同理,tim2是一个普通计时器,只要简单正确配置就可以了
那么看看关键代码:
/* USER CODE BEGIN 2 */
  // Start the PWM channels for both LEDs
  // Note: Use the correct Timer handle and Channel defined by your configuration
  if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2) != HAL_OK) // For LED on PC9
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1) != HAL_OK) // For LED on PA5
  {
    Error_Handler();
  }


  // --- Variables for breathing effect ---
  // Set PWM_MAX_VALUE to your timer's ARR (Auto-Reload Register) value
  // Assuming ARR was set to 999 for both timers in CubeMX for a 0-1000 range
  uint32_t pwm_max_value = 999;
  uint32_t brightness = 0;
  int8_t step = 5; // How much to change brightness each step
  uint8_t delay_ms = 10; // Delay between steps, controls breathing speed


  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
          // --- Fade In ---
              for (brightness = 0; brightness <= pwm_max_value; brightness += step)
              {
                // Clamp brightness to max value in case step overshoots
                if (brightness > pwm_max_value) {
                    brightness = pwm_max_value;
                }

                // Set the PWM duty cycle (Compare value) for both LEDs simultaneously
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, brightness); // LED on PC9
                __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, brightness); // LED on PA5

                HAL_Delay(delay_ms); // Adjust delay for breathing speed
              }

               // Ensure brightness is exactly max value after loop
              __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, pwm_max_value);
              __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pwm_max_value);
              HAL_Delay(delay_ms * 10); // Optional: Pause briefly at full brightness


              // --- Fade Out ---
              // Start slightly below max to avoid issues with unsigned wrap-around if step doesn't divide evenly
              for (brightness = pwm_max_value; brightness > 0; )
              {
                 // Decrement first, then check bounds
                 if (brightness <= step) { // Prevent underflow for unsigned int
                      brightness = 0;
                 } else {
                     brightness -= step;
                 }

                // Set the PWM duty cycle (Compare value) for both LEDs simultaneously
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, brightness); // LED on PC9
                __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, brightness); // LED on PA5

                HAL_Delay(delay_ms); // Adjust delay for breathing speed
              }

              // Ensure brightness is exactly 0 after loop
              __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0);
              __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 0);
              HAL_Delay(delay_ms * 10); // Optional: Pause briefly when off

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


并且构建成功:
继续新的探索

使用特权

评论回复
沙发
AdaMaYun| | 2025-6-8 19:56 | 只看该作者
PWM设置还是非常实用的

使用特权

评论回复
板凳
sdlls| | 2025-6-10 09:35 | 只看该作者
涵盖了STM32C092RC的基本特性、开发环境搭建、PWM和定时器的配置与使用

使用特权

评论回复
地板
robincotton| | 2025-6-10 12:02 | 只看该作者
是否需要启用多个PWM通道或使用DMA同步?

使用特权

评论回复
5
febgxu| | 2025-6-10 13:13 | 只看该作者
如何选择合适的定时器和配置参数以实现最佳效果?

使用特权

评论回复
6
mattlincoln| | 2025-6-10 13:48 | 只看该作者
若LED在低占空比下出现闪烁,应如何调整PWM频率

使用特权

评论回复
7
yiyigirl2014| | 2025-6-10 15:14 | 只看该作者
这个初始化不是都是在MX里配置就行了吗,需要自己一步一步从头配置吗

使用特权

评论回复
8
lihuami| | 2025-6-10 15:34 | 只看该作者
可对比不同定时器(如TIM1与TIM3)的性能差异,为复杂应用提供参考。

使用特权

评论回复
9
elsaflower| | 2025-6-10 16:46 | 只看该作者
对于高功率 LED ,如何设计外部驱动电路

使用特权

评论回复
10
sdlls| | 2025-6-10 17:46 | 只看该作者
提供了丰富的代码示例, 更好地理解和应用PWM、定时器和呼吸灯控制。

使用特权

评论回复
11
fengm| | 2025-6-10 18:28 | 只看该作者
在配置PWM时,是否需要特别注意某些参数的设置?

使用特权

评论回复
12
maqianqu| | 2025-6-10 19:24 | 只看该作者
当多个 PWM 通道同时工作时,如何避免通道间的干扰

使用特权

评论回复
13
saservice| | 2025-6-10 20:01 | 只看该作者
如何选择预分频器(Prescaler)和自动重载值(ARR)以平衡PWM分辨率和频率?

使用特权

评论回复
14
macpherson| | 2025-6-10 20:38 | 只看该作者
​​STM32C092RC的PWM模块与Timer的协同配置​​

使用特权

评论回复
15
sanfuzi| | 2025-6-10 22:07 | 只看该作者
控制多个LED的呼吸效果,如何分配定时器通道并避免资源冲突?

使用特权

评论回复
16
linfelix| | 2025-6-10 22:46 | 只看该作者
最大支持多大频率的PWM输出?              

使用特权

评论回复
17
macpherson| | 2025-6-12 13:27 | 只看该作者
通过中断或主循环调整占空比,两者在实时性和资源占用上有何差异?

使用特权

评论回复
18
plsbackup| | 2025-6-12 14:26 | 只看该作者
呼吸灯亮度变化采用线性增减还是非线性曲线

使用特权

评论回复
19
robincotton| | 2025-6-12 15:32 | 只看该作者
通过DMA自动更新PWM占空比              

使用特权

评论回复
20
sdlls| | 2025-6-12 16:01 | 只看该作者
是否需要引入全局变量存储亮度状态 ?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

327

帖子

0

粉丝