【STM32】驱动WS2812
本文以 SPI方式驱动进行说明

一、WS2812驱动数据结构

采用24BIT G-R-B顺序发送:
红色数据:00000000 11111111 00000000
绿色数据:11111111 00000000 00000000
蓝色数据:00000000 00000000 11111111
二、WS2812数据时序
来解释下上文的 0 1

由图可知数据码型的 “0”、“1” 是由一段先高后低电平的信号组成,时间为 ns 级。
三、SPI发送时序关联灯数据时序
SPI发送时模式可以选择 8bit模式
假设发送全高那么 ____|- - - - - - - -|___ 1 1 1 1 1 1 1 1
假设发送一半一半 ____|- - - - _ _ _ _|___ 1 1 1 1 0 0 0 0
此时发送的模式是不是和 2812数据时序非常类似,此时我们需要计算SPI 高低数据位的个数即可。
四、SPI发送时序计算
假设MCU主频设置为 56M
2812一个码的时间范围t 为 800ns ~ 1380ns
换算成 SPI波特率 1/ (t/8) = 1/(100ns ~ 172ns)
>>>> 5.8M ~ 10M
设置SPI 波特率为 56M / 8 = 7M
单个bit 的发送时间:t1 = 1/7M = 143ns
对于2812 “0码” 取 143 * 2 = 286ns ;143 * 6 = 858ns 满足T0H T0L
对于2812 “1码” 取 143 * 6 = 858ns ;143 * 2 = 286ns 满足T1H T1L
所以 对于SPI发送来说
2812 “0码” SPI 发送 1100 0000 转为16进制 0xC0
2812 “1码” SPI 发送 1111 1100 转为16进制 0xFC
五、总结
红色数据:00000000 11111111 00000000
等价于
SPI发送 {0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
}