WS2812彩灯@32G12K128,最多同时驱动682个,DMA支持USART1-SPI或USART2-SPI驱动
WS2812三基色彩灯@32G12K128,USB===最多同时驱动682个三基色彩灯,更多的灯可以分多次传输
===USART1/串口1的USART1-SPI, 无需反相,用DMA支持,不占CPU时间
可以驱动第1路独立的 WS2812灯带网络
===USART2/串口2的USART2-SPI, 无需反相,用DMA支持,不占CPU时间
可以驱动第2路独立的 WS2812灯带网络
===还有标配的独立 SPI
可以驱动第3路独立的 WS2812灯带网络
STC32G12K128的串口1或串口2工作于SPI-DMA模式,输出控制WS2812三基色彩灯 !
使用 SPI-MOSI 输出直接驱动WS2812 三基色彩灯,
DMA传输,8K SRAM 轻松驱动最多682个灯并且不占用CPU时间 !
本例使用P1.3/MOSI输出信号(用户可以切换到别的脚)直接驱动WS2812。
只用到MOSI驱动WS2812,但由于SPI的3个信号是捆绑在一起的
===MISO不能做它用。
===SCLK如要做其他用途,可设置为高阻输入,作为输入使用
本例P1.4-MISO被SPI占用,不能做他用。
这 SPI 留了这么个绝活 支持 WS2812B !!!
本例驱动24个灯,接成环状。
SPI发送288字节,DMA启动后自动发送完所有的数据(本例发送时间810us),不占CPU时间。
每个灯3个字节,分别对应绿、红、蓝则,MSB先发.
800KHz码率,
数据0(1/4占空比): H=0.3125usL=0.9375us,
数据1(3/4占空比): H=0.9375usL=0.3125us,
RESET>=50us.
高电平时间要精确控制在要求的范围内,
低电平时间不需要精确控制, 大于要求的最小值并小于RES的50us即可.
WS2812S的标准时序如下:
TH+TL = 1.25us±150ns, RES>50us
T0H = 0.25us±150ns = 0.10us - 0.40us
T0L = 1.00us±150ns = 0.85us - 1.15us
T1H = 1.00us±150ns = 0.85us - 1.15us
T1L = 0.25us±150ns = 0.10us - 0.40us
两个位数据之间的间隔要小于RES的50us.
SPI方案:
本例使用USART1-SPI模式的P1.3-MOSI输出驱动信号直接驱动WS2812。
由于使用SPI主机模式,则P1.4、P1.5被SPI占用,不能做他用。
用SPI传输, 速度3.0~3.5MHz,以3.2MHz为最佳, MSB先发, 每个字节高4位和低4位分别对应一个位数据, 1000为数据0, 1110为数据1.
SPI数据位 D7 D6 D5 D4 D3 D2 D1 D0
SPI数据 1 0 0 0 1 1 1 0
WS2812数据0 WS2812数据1
SPI数据高半字节对应的WS2812数据0-->0x80, 数据1-->0xe0,
SPI数据低半字节对应的WS2812数据0-->0x08, 数据1-->0x0e,
主频25.6MHz, SPI分频8 = 3.2MHz. 最佳.
电路预览(附件带PDF电路):
完整的例子,好,有空,练练 dma果然牛逼啦 dma好东西 又学一招,以前用软件模拟驱动,占用太多MCU时间了 厉害了
页:
[1]