32G12K64 PWMA_CCR1有些值不能使用吗 | 没事了
测试过程中发现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;
}
}
应该是我开了三路PWM,中断触发间隔的问题,把三个ccr值调整下暂时没事了 CCR1可以是任意值。
页:
[1]