GD32F330 Timer DMA例程 PWM为0产生额外尖波

GD32F330其例程中使用DMA产生PWM波时,有如下三个数字。 249/499,749。当我们想设置第四个PWM输出0%占空比时,却发现示波器上出现了一个短暂的高电平。而并非是0%占空比。

uint16_t buffer[4] = {249, 499, 749,0};

经过研究 是因为没有使能影子寄存器,每次DMA的数据直接写入CH0CV,而内存到寄存器之间需要时间,所以PWM会出现短暂的按照上一个值发生了一次PWM,其后新的通道值写入,其从高电平跳转到了低电平,现象就是这样短暂的PWM波形。那么解决问题也比较简单,直接使能影子寄存器即可。

timer_channel_output_shadow_config(PWM_TIMER, PWM_TIEMR_CHANNEL, TIMER_OC_SHADOW_ENABLE);

直接从寄存器窗口中勾选或者取消勾选,可以快速看到差别。

使能之前

使能之后

posted @ 2022-04-23 15:07  北风Z  阅读(681)  评论(0编辑  收藏  举报