
效果虽然不错,可以节省不少MCU资源,但用一个byte的SPI数据代替WS2812一个bit,很浪费RAM资源,而且生成像素的效率也很慢。![]() ' q" j; e+ X5 u3 d 仔细一看发现 WS2812一个bit 周期是:: T& |/ T/ C& M: S5 |5 I r TH+TL=1250ns (±600ns), Min=650ns,Max=1850ns7 \6 t, N1 m+ J/ [1 k% b4 p 如果把SPI提速到4Mbits/S 的时候,SPI一个bit的周期是250ns,刚好和符合WS2812 T0H或T1L 400ns ±150ns范围。SPI 4个bit的周期刚好1000ns,刚好可以满足WS2812的时序需求。 SPI=0x8 等于 WS2812的 0 SPI=0xE 等于 WS2812的 10 B( L5 f$ q6 D7 C/ m" p4 p: l 也就变成一个SPI的byte,可以表示2个Ws2812的2个bit。一RGB像素颜色只需要 24bit/2bit = 12byte SPI速度及极性配置: ![]() 1 ^" X) O! f# _. [' u SPI只需要配置主机只发模式,这样可以节省一个IO口/ C6 N- V' c4 s k8 X0 J# Z* g ![]() & K: ~5 Y) \" b0 A b 驱动整盘WS2812都很轻松3 w" ^. y" R6 y' c! k" e ![]() ![]() 驱动库说明:; V3 a! i, e4 A; y" ` 例子使用Stm32CubMx 4.23,STM32L151C8T6,IAR/MDK工程+ f9 F8 H2 k \4 K x4 P 程序移植了Adafruit NeoPixel库函数,5 v. P. w7 b' C 采用HAL库驱动方式(struct),可以方便移植到其他STM32芯片上, 只需要分配多个struct变量,硬件稍微改下,就能分时复用,控制多串灯珠。# ]' a- y" Z- b- Q" k, }& V ![]() |