找回密码
 立即注册
查看: 73|回复: 2

32G12K64 PWMA_CCR1有些值不能使用吗 | 没事了

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-07-16 12:19:49
已绑定手机

1

主题

1

回帖

11

积分

新手上路

积分
11
发表于 2025-7-16 12:19:49 | 显示全部楼层 |阅读模式
测试过程中发现PWMA_CCR1给某些值会导致它进中断的次数从一秒五千次降到几秒一次,有大佬是看看啥情况吗?
分频系数是0,ARR是2211,仅改变中断里PWMA_CCR1的值就会有这种现象,1523卡,1530就没事。

void PWM_Init(void)
{
        PWM_PERIOD=2211;//5khz
        
        Pre_V=19;
        
        SINE_RES=(u32)(5000/Pre_V);
        
        PWM1_count=0;
        PWM3_count=SINE_RES/3;
        PWM4_count=SINE_RES/3*2;
        
        PWMA_PSCRH=0x00; //配置预分频系数
        PWMA_PSCRL=0x00;
        
        PWMA_CCER1=0X00;        //写CCMRx前必须先清零CCxE关闭通道
        PWMA_CCER2=0X00;        
        
        PWMA_CCMR1=0X60;//通道模式配置PWM模式1

        PWMA_CCMR3=0X60;
        PWMA_CCMR4=0X60;

               
        PWMA_CCER1=0X05;//配置通道输出使能和极性
        PWMA_CCER2=0X55;
        
        PWMA_ARRH=(char)(PWM_PERIOD>>8);//设置周期时间
        PWMA_ARRL=(char)(PWM_PERIOD);
        
        PWMA_ENO=0Xf3;         //使能PWM输出
        PWMA_PS=0X00;                //高级PWM通道输出
        
        PWMA_CCR1H=(char)(PWM_PERIOD>>8);//设置占空比时间
        PWMA_CCR1L=(char)(PWM_PERIOD);
        
        PWMA_CCR3H=(char)(PWM_PERIOD/3>>8);//设置占空比时间
        PWMA_CCR3L=(char)(PWM_PERIOD/3);
        
        PWMA_CCR4H=(char)(PWM_PERIOD/3*2>>8);//设置占空比时间
        PWMA_CCR4L=(char)(PWM_PERIOD/3*2);
        
        PWMA_IER=0X1B;
        
        PWMA_DTR=0X18;//设置死区时间
        
        PWMA_BKR=0X80;//使能主输出
        PWMA_CR1|=0X01;//开始计时
}
u32 ppp=0;

void PWMA_ISR() interrupt 26
{                        
               
        if(PWMA_SR1&0X01)
        {
                PWMA_SR1&=~0X01;
        }
        else if(PWMA_SR1&0X02)
        {
                EAXSFR();
                PWMA_SR1&=~0X02;
                ppp++;
                if(ppp>=5000){
                        ppp=0;
                }
                PWM_DUTY=1523;
                PWMA_CCR1H=(char)(PWM_DUTY>>8);//设置占空比时间
                PWMA_CCR1L=(char)(PWM_DUTY);
        }
        else if(PWMA_SR1&0X08)
        {
                PWMA_SR1&=~0X08;
        
        }
        else if(PWMA_SR1&0X10)        
        {
                PWMA_SR1&=~0X10;                                
               
        }
        else
        {
                        PWMA_SR1=0;
        }
}


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-07-16 12:19:49
已绑定手机

1

主题

1

回帖

11

积分

新手上路

积分
11
发表于 2025-7-16 12:46:56 | 显示全部楼层
应该是我开了三路PWM,中断触发间隔的问题,把三个ccr值调整下暂时没事了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:137
  • 最近打卡:2025-07-31 12:11:20

76

主题

6281

回帖

1万

积分

超级版主

积分
13347
发表于 2025-7-16 16:16:12 | 显示全部楼层
CCR1可以是任意值。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-1 02:45 , Processed in 0.119584 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表