yinxiangxv 发表于 2025-5-4 08:47

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

本帖最后由 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同步?

febgxu 发表于 2025-6-10 13:13

如何选择合适的定时器和配置参数以实现最佳效果?

mattlincoln 发表于 2025-6-10 13:48

若LED在低占空比下出现闪烁,应如何调整PWM频率

yiyigirl2014 发表于 2025-6-10 15:14

这个初始化不是都是在MX里配置就行了吗,需要自己一步一步从头配置吗

lihuami 发表于 2025-6-10 15:34

可对比不同定时器(如TIM1与TIM3)的性能差异,为复杂应用提供参考。

elsaflower 发表于 2025-6-10 16:46

对于高功率 LED ,如何设计外部驱动电路

sdlls 发表于 2025-6-10 17:46

提供了丰富的代码示例, 更好地理解和应用PWM、定时器和呼吸灯控制。

fengm 发表于 2025-6-10 18:28

在配置PWM时,是否需要特别注意某些参数的设置?

maqianqu 发表于 2025-6-10 19:24

当多个 PWM 通道同时工作时,如何避免通道间的干扰

saservice 发表于 2025-6-10 20:01

如何选择预分频器(Prescaler)和自动重载值(ARR)以平衡PWM分辨率和频率?

macpherson 发表于 2025-6-10 20:38

​​STM32C092RC的PWM模块与Timer的协同配置​​

sanfuzi 发表于 2025-6-10 22:07

控制多个LED的呼吸效果,如何分配定时器通道并避免资源冲突?

linfelix 发表于 2025-6-10 22:46

最大支持多大频率的PWM输出?            

macpherson 发表于 2025-6-12 13:27

通过中断或主循环调整占空比,两者在实时性和资源占用上有何差异?

plsbackup 发表于 2025-6-12 14:26

呼吸灯亮度变化采用线性增减还是非线性曲线

robincotton 发表于 2025-6-12 15:32

通过DMA自动更新PWM占空比            

sdlls 发表于 2025-6-12 16:01

是否需要引入全局变量存储亮度状态 ?
页: [1] 2
查看完整版本: 【STM32C092RC 测评】+NUCLEO-C092RC开发板pwm+timer+控制呼吸