最近看不少人玩ws2812b。我搜了一下找到个比较好的。
这个程序是spi+dma的,我修改了下在F030F4上面跑着挺好。大概的意思是E表示1。8表示0。一个字节处理两位。
我想了一下UART+DMA,没有时间做。如果用UART,设置到2.4M,每个位400nS(spec.: 250-550), 反转一下,每三位处理一个bit,高高低表示1(800+400),低低高表示0(800+400)。 这样start+76位,543,210,总共一个字节处理3个位,停止位因为反转了就是低电平,间隔时间不足50uS,应该没影响。
如此,每24/3=8个字节处理一个灯,比SPI的12个字节更少。个位有什么看法。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
而CPU生成数据所需的时间远远小于32us
那么就有了使用双缓冲,乒乓操作的条件
两个缓冲区,每个缓冲区处理25个LED,总共占用RAM:SPI 25*12*2 = 600bytes; USART 25*24*2 = 1200bytes,而且扩展到更长的灯带时不需要增加缓冲区长度
DMA传输完成中断产生后,最后两个个字节(SPI是半字)数据一个在移位寄存器中发送,另一个在TDR寄存器中等待发送,中断函数里面等待TXE标志位置位,重新配置DMA
一周热门 更多>