課程設(shè)計(jì)結(jié)束接著5天小長(zhǎng)假喇潘,盤一盤我吃灰了好久的ws2812燈帶。
第1天梭稚,因?yàn)橄M苯佑肬SB傳數(shù)據(jù)颖低,使用STM32用CubeMX生成代碼,使用USB虛擬COM口
第2天弧烤,發(fā)現(xiàn)hal庫(kù)沒(méi)有現(xiàn)成的控制ws2812的庫(kù)忱屑,決定換用Arduino開(kāi)發(fā)STM32,在庫(kù)里找到了一個(gè)USB_SERIAL
第3天,翻遍了中英文互聯(lián)網(wǎng)沒(méi)找到USB_SERIAL的用法莺戒,啃源碼啃了一天伴嗡,不知道為什么沒(méi)法發(fā)送只能接收。編譯FastLED的時(shí)候爆了一大片紅从铲,無(wú)力排查
第4天瘪校,滾回CubeMX,使用DMA+TIM來(lái)控制ws2812名段。跟著別人的例子調(diào)了一天阱扬,PWM可以輸出1.25us周期的信號(hào)了,但DMA就是不搬數(shù)據(jù)……
第5天伸辟,掏出吃灰許久的ESP32麻惶,刷上MicroPython。半天把燈點(diǎn)亮了信夫,再半天處理BUG窃蹋,大喊一聲
人生苦短,我用Python
from machine import Pin
import sys
import neopixel
TPM2_START = 0xC9
TPM2_TYPE_DATA = 0xDA
TPM2_TYPE_CMD = 0xC0
TPM2_TYPE_RESP = 0xAA
TPM2_END = 0x36
TPM2_ACK = 0xAC
LED_NUM = 60
np = neopixel.NeoPixel(Pin(23), LED_NUM)
def tpm2():
for i in range(1):
header = sys.stdin.buffer.read(1)
if header[0] != TPM2_START:
break
header = sys.stdin.buffer.read(3)
data_len = header[1] << 8
data_len |= header[2]
data = sys.stdin.buffer.read(data_len)
for i in range(data_len / 3):
np[i] = (data[3*i], data[1+3*i], data[2+3*i])
sys.stdin.buffer.read(1)
np.write()