由于本人刚入门不久,大部分时候,写程序都是需要参考原子哥的例程进行修改,最近接到一个项目是驱动WS2812三基 {MOD}灯,原子哥例程里边没有这方面的例程(可能我没找到),但是网上一搜索,一大片,就在某网站看了个教学视频,正好是驱动WS2812贴片的,心里大喜,心想老子真是需要什么来什么,看完之后大体明白方法,就是通过DMA不断改变PWM的占空比,来实现灯颜 {MOD}的变化,那就开始ctrl+C和ctrl+V吧,干了一番,终于出来颜 {MOD}了,可是一看跟自己想的完全不一样,几经修改最后终于成功了,基本能够按照自己的要求来显示了,但是(重点来了),发现LEd显示的时候,总会有别的灯光的颜 {MOD}一闪而过,后来拿过来示波器看了一下波形,在传输的PWM波形中,最前边总是有一个小的尖波,脉宽不定,从而会导致PWM偶尔会出现错位的现象,经过对比发现跟那位大神的例程没什么区别呀,最后通过研究说明手册,了解到DAM采用 TIM_DMACmd(TIM3,TIM_DMA_Update,ENABLE);这种方式更新的时候,要直接操作CCR的影子寄存器,而不是去操作预装再寄存器,具体是操作CCMR寄存器,使能OCXFE标志位,失能OCXPE标志位,从而能能够实现在定时器溢出之前,占空比已经更新完成。以下是部分代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>