WS2812B使用備忘

在淘寶賣的ws2812b rgb燈雖然都是同一名稱,但是各家的數據格式都有有微小的不同,參考各家數據手冊會發現高低電平的時間有許多不同。

如在淘寶“南方光電”買的ws2812b數據手冊如下:
南方光電
再如“糊糊蝶照明”RGB燈條的數據手冊:
糊糊蝶照明
網上還有其他版本的數據手冊,時間也不一樣,有興趣可以搜一搜。
以上時間差距會讓顏色不準,在使用的時候要注意。
除了手冊差異(數據差異)導致的問題,還有不同寫法io反轉速度差異引起的時間不準。
如:
1.用庫函數

 GPIO_SetBits(GPIOB,GPIO_Pin_5);
 GPIO_ResetBits(GPIOB,GPIO_Pin_5);

這樣寫的反轉頻率大約爲2.7MHz,週期361ns

2.用寄存器GPIOx_ODR

GPIOB->ODR |= GPIO_Pin_5;
 GPIOB->ODR &=~ GPIO_Pin_5;

這樣寫的反轉頻率小於18MHz,週期大於55.55ns

3、用寄存器 GPIOB->BRR和GPIOB->BSRR

GPIOB->BRR = GPIO_Pin_5;
GPIOB->BSRR = GPIO_Pin_5;

這樣寫的反轉頻率大約爲18MHz,週期55.55ns

由於我們需要0.3us的延時,所以直接排除庫函數,而用寄存器BRR和BSRR應該是最好的選擇。
在stm32f103 72MHz主頻下,一個__nop();爲1/72M=13.9ns。

所以,對於RGB燈條,
T0H=T1L=55.5ns+1813.9ns;
T0L=T1H=55.5ns+61
13.9ns;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章