问答

汇集网友智慧,解决技术难题

21ic问答首页 - cs32g030用定时器做呼吸灯的延迟

嵌入式 单片机 定时器 2G 呼吸灯 30

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

red6662025-03-13
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(或其他值)灯不亮;
回答 +关注 5
5314人浏览 5人回答问题 分享 举报
5 个回答
  • 1. 你检查一下你的timer设置是否正确,在中断里将T1000ms_flag置1,确定1000ms置1一次。
    2. 检查你的PWM输出设置,是否初始化正确,给固定值看看占空比,确定 pwm_duty_config 里给相关的比较寄存器写入了正确的值。
    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  换不同初始值试试
  • 你用逻辑分析仪抓一下波形
  • 占空比太低 不亮的
  • 会不会是这一句代码, pwm_duty_config(TM2,pwm_val);,有问题,加0等于值没有变,其代码内部逻辑可能发现新值和老值一样,就return掉了,如果发现值发生了变化,就尝试去更新pwm的值,但是因为函数写的有问题,导致值并没有更新进去,或者更新进去的是一个固定为0的值,导致你的灯不亮,没变化效果?

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