【STM32】驅(qū)動(dòng)WS2812
本文以?SPI方式驅(qū)動(dòng)進(jìn)行說(shuō)明

一、WS2812驅(qū)動(dòng)數(shù)據(jù)結(jié)構(gòu)

采用24BIT? G-R-B順序發(fā)送:
????????紅色數(shù)據(jù):00000000? 11111111? ?? 00000000
????????綠色數(shù)據(jù):11111111? ? 00000000? ?00000000?
????????藍(lán)色數(shù)據(jù):00000000? 00000000? ?11111111?
二、WS2812數(shù)據(jù)時(shí)序
? ?來(lái)解釋下上文的? 0? 1

由圖可知數(shù)據(jù)碼型的 “0”、“1”? ?是由一段先高后低電平的信號(hào)組成,時(shí)間為 ns 級(jí)。
三、SPI發(fā)送時(shí)序關(guān)聯(lián)燈數(shù)據(jù)時(shí)序
????????SPI發(fā)送時(shí)模式可以選擇 8bit模式
????????假設(shè)發(fā)送全高那么? ? ? ?____|- - - - - - - -|___? ? ?1 1 1?1 1 1 1 1
????????假設(shè)發(fā)送一半一半? ? ??____|- - - - _ _ _?_|___? ?1 1 1 1 0 0 0 0
????????此時(shí)發(fā)送的模式是不是和 2812數(shù)據(jù)時(shí)序非常類似,此時(shí)我們需要計(jì)算SPI 高低數(shù)據(jù)位的個(gè)數(shù)即可。
四、SPI發(fā)送時(shí)序計(jì)算
????????假設(shè)MCU主頻設(shè)置為??56M
????????2812一個(gè)碼的時(shí)間范圍t?為? ?800ns ~ 1380ns
????????換算成 SPI波特率? ?1/?(t/8)? ?=? 1/(100ns ~? 172ns)? ??
????????????????????????????????????>>>>? 5.8M ~ 10M
????????設(shè)置SPI 波特率為? ?56M / 8? =? 7M
????????單個(gè)bit 的發(fā)送時(shí)間:t1? = 1/7M? ?=?143ns
????????對(duì)于2812 “0碼”? ?取??143 * 2 = 286ns? ;143 * 6 = 858ns? 滿足T0H? T0L
????????對(duì)于2812 “1碼”? ?取??143 * 6 = 858ns? ;143 * 2 = 286ns? 滿足T1H? T1L
? ? 所以 對(duì)于SPI發(fā)送來(lái)說(shuō)
????????2812 “0碼”? SPI 發(fā)送? ?1100 0000? ? 轉(zhuǎn)為16進(jìn)制? 0xC0
????????2812 “1碼”? SPI 發(fā)送? ?1111 1100? ???轉(zhuǎn)為16進(jìn)制??0xFC
? 五、總結(jié)
????????紅色數(shù)據(jù):00000000??11111111? ???00000000
????????等價(jià)于
????????SPI發(fā)送? {0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
????????????????????????0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
????????????????????????0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
????????????????????????????}
????????
【STM32】驅(qū)動(dòng)WS2812的評(píng)論 (共 條)
