cs32g030用定时器做呼吸灯的延迟

[复制链接]
5348|5
 楼主| red666 发表于 2025-3-13 14:42 | 显示全部楼层 |阅读模式
int main(void)
{
        timer3_init();
        pwm_config1();
        uint16_t pwm_val =500;
        uint8_t dir = 1;
        while(1)
        {               
                if(T1000ms_flag==1)//1000ms触发一次
                {
                        T1000ms_flag=0;
                        pwm_val +=0;
                        pwm_duty_config(TM2,pwm_val);
                        if(pwm_val>=1000)
                        pwm_val=100;
                }
        }
}
pwm_val +=0; 灯可以亮,pwm_val +=10(或其他值)灯不亮;
飞思啦 发表于 2025-3-13 15:59 | 显示全部楼层
会不会是这一句代码, pwm_duty_config(TM2,pwm_val);,有问题,加0等于值没有变,其代码内部逻辑可能发现新值和老值一样,就return掉了,如果发现值发生了变化,就尝试去更新pwm的值,但是因为函数写的有问题,导致值并没有更新进去,或者更新进去的是一个固定为0的值,导致你的灯不亮,没变化效果?
xionghaoyun 发表于 2025-3-14 09:30 | 显示全部楼层
占空比太低 不亮的
xionghaoyun 发表于 2025-3-14 09:31 | 显示全部楼层
你用逻辑分析仪抓一下波形
xch 发表于 2025-3-14 14:51 | 显示全部楼层
  1. int main(void)
  2. {
  3.         timer3_init();
  4.         pwm_config1();
  5.         uint16_t pwm_val =500;
  6.         uint8_t dir = 1;
  7.        pwm_duty_config(TM2,pwm_val);
  8.       while(1);
  9. }

这样子能不能亮?pwm_val  换不同初始值试试
yzdel7 发表于 2025-3-17 23:40 | 显示全部楼层
1. 你检查一下你的timer设置是否正确,在中断里将T1000ms_flag置1,确定1000ms置1一次。
2. 检查你的PWM输出设置,是否初始化正确,给固定值看看占空比,确定 pwm_duty_config 里给相关的比较寄存器写入了正确的值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

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