请问在pwm中调整下一个周期的占空比的问题。我现在用Timer4的第二通道产生pwm,利用预装载功能,在每个pwm更新周期前设置下一个周期的占空比,但好像临停止的时候(脉冲流的尾段)会送多一个到两个错误的脉冲。
请帮忙看看是什么问题。
代码是这样的:
......
......
if (buff[t]&0x08) TIM4->CCR2=50; else TIM4->CCR2=130; //(A处)
while (!(TIM4->SR&1)) ;
TIM4->SR&=~1; //清除更新事件标志
if (buff[t]&0x04) TIM4->CCR2=50; else TIM4->CCR2=130; //(B处) //这里不等A处设置的pwm时间周期结束,就直接再写入新的参数,利用预装载功能
while (!(TIM4->SR&1)) ; //检查更新事件。这里等待的是A处设置的pwm时间周期结束
TIM4->SR&=~1;
if (buff[t]&0x02) TIM4->CCR2=50; else TIM4->CCR2=130; //(C处)
while (!(TIM4->SR&1)) ;
TIM4->SR&=~1;
if (buff[t]&0x01) TIM4->CCR2=50; else TIM4->CCR2=130; //(D处)
while (!(TIM4->SR&1)) ; //这里等待的是C处设置的pwm时间周期结束
TIM4->SR&=~1; //D处设置的pwm时间周期这时还没有结束
}
TIM4->CR1|=1<<3; //到最后了,改单脉冲模式,这个脉冲结束时,定时器自动停止。但这里好像会送多一到两个错误脉冲出去。
或者有否其他更好的处理方面?
请帮忙。
谢谢。
|