打印

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

[复制链接]
3261|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
你用逻辑分析仪抓一下波形

使用特权

评论回复
5
xch| | 2025-3-14 14:51 | 只看该作者
int main(void)
{
        timer3_init();
        pwm_config1();
        uint16_t pwm_val =500;
        uint8_t dir = 1;
       pwm_duty_config(TM2,pwm_val);
      while(1);
}

这样子能不能亮?pwm_val  换不同初始值试试

使用特权

评论回复
6
丙丁先生| | 2025-3-16 08:22 | 只看该作者
500毫秒吗?循环执行吗?定时器可以循环中断吗?时间会冲突吗?

使用特权

评论回复
7
丙丁先生| | 2025-3-16 08:24 | 只看该作者
  timer3_init()
{

}

是什么样的?

使用特权

评论回复
8
yzdel7| | 2025-3-17 23:40 | 只看该作者
1. 你检查一下你的timer设置是否正确,在中断里将T1000ms_flag置1,确定1000ms置1一次。
2. 检查你的PWM输出设置,是否初始化正确,给固定值看看占空比,确定 pwm_duty_config 里给相关的比较寄存器写入了正确的值。

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝