APT32F102-SIO模块控制WS2812
生活随笔
收集整理的這篇文章主要介紹了
APT32F102-SIO模块控制WS2812
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.硬件電路
2.??數(shù)據(jù)協(xié)議采用單線歸零碼的通訊方式, 像素點在上電復位以后, DIN端接受從控制器傳輸過來的數(shù)據(jù), 首先送過來的24bit數(shù)據(jù)被第一個像素點提取后, 送到像素點內(nèi)部的數(shù)據(jù)鎖存器, 剩余的數(shù)據(jù)經(jīng)過內(nèi)部整形處理電路整形放大后通過DO端口開始轉(zhuǎn)發(fā)輸出給下一個級聯(lián)的像素點, 每經(jīng)過一個像素點的傳輸, 信號減少24bit。 像素點采用自動整形轉(zhuǎn)發(fā)技術, 使得該像素點的級聯(lián)個數(shù)不受信號傳送的限制, 僅僅受限信號傳輸速度要求 。
圖片來自網(wǎng)絡-
3.程序處理
????????
/*************************************************************/ //SIO Functions //驅(qū)動RGB LED(ws2812), RGB DATA = 24bit; 驅(qū)動數(shù)據(jù)輸出排列方式:GRB /*************************************************************/ void SIO_CONFIG(void) {SIO_DeInit();//SIO_IO_Init(SIO_PB01); //配置IO為SIO模式//tx clk =4MHz, Ttxshift = 1/4 = 250ns;發(fā)送每bit時間是250nsSIO_TX_Init(SIOCLK_EN,11); ////TXCR1 TXCR0--空閑輸出L//TXBUFLEN = 8-1 TXCNT =24-1// D0 D1 不使用//默認電平為低SIO_TX_Configure(SIO_IDLE_LOW,SIO_TX_LSB,7,23,0,0,SIO_OBH_4BIT,SIO_OBL_4BIT,7,1); }void SIO_TXBUF_Send(CSP_SIO_T *sio,const uint32_t *pwData, uint32_t hwSize) {uint32_t i;for(i = 0; i < hwSize; i++){sio->TXBUF = pwData[i];while(!(sio->RISR &SIO_TXBUFEMPT));}while(!sio->RISR &SIO_TXDNE);sio->ICR = SIO_TXDNE; }/***************************************************/ //send /**************************************************/ //rgb 原始數(shù)據(jù) uint8_t byDipData[24*3] = {//R G B0x07, 0x00, 0x00,//rgb10x00, 0x07, 0x00,//rgb20x00, 0x00, 0x07,//rgb30x00, 0x07, 0x00,//rgb40x07, 0x00, 0x00,//rgb50x00, 0x07, 0x00,//rgb60x00, 0x00, 0x07,//rgb70x00, 0x07, 0x00, //rgb80x07, 0x00, 0x00,//rgb90x00, 0x07, 0x00,//rgb100x00, 0x00, 0x07,//rgb110x00, 0x07, 0x00,//rgb120x07, 0x00, 0x00,//rgb130x00, 0x07, 0x00,//rgb140x00, 0x00, 0x07,//rgb150x00, 0x07, 0x00, //rgb160x07, 0x00, 0x00,//rgb170x00, 0x07, 0x00,//rgb180x00, 0x00, 0x07,//rgb190x00, 0x07, 0x00,//rgb200x07, 0x00, 0x00,//rgb210x00, 0x07, 0x00,//rgb220x00, 0x00, 0x07,//rgb230x00, 0x07, 0x00, //rgb24 };static uint32_t sio_led_data_conver(uint8_t byData) {uint8_t i;uint32_t wData = 0xaaaa;for(i = 0; i < 8; i++){if(byData & 0x80)wData |= (0x01 << (2*i));byData = byData << 1;}return wData; }static void set_led_rgb_store(uint32_t *pwLeddData,uint32_t hwLedNum) {//led*(pwLeddData+hwLedNum*3) = sio_led_data_conver(byDipData[hwLedNum*3+1]) ; //G*(pwLeddData+hwLedNum*3+1) = sio_led_data_conver(byDipData[hwLedNum*3]); //R*(pwLeddData+hwLedNum*3+2) = sio_led_data_conver(byDipData[hwLedNum*3+2]); //B }void led_rgb_display(uint8_t *byColData, uint32_t hwLedNum) {uint32_t i;uint32_t wRgbData[72];for(i = 0; i < hwLedNum; i++) //hwLedNum = 8{set_led_rgb_store(wRgbData,i);}for(i = 0; i < hwLedNum; i++){SIO_TXBUF_Send(SIO0, &wRgbData[3*i],3);} }/***************************************************/ //main /**************************************************/ int main(void) {delay_nms(1000);APT32F102_init();//while(1){SYSCON_IWDCNT_Reload();//....led_rgb_display(byDipData, 24);//發(fā)送輸出測試delay_nms(1000);//....} }0x07,?? ?0x00,?? ?0x00,//rgb1? 此處是對應編碼格式。
bit1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?bit 0?
????????
符合時序
總結
以上是生活随笔為你收集整理的APT32F102-SIO模块控制WS2812的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelRealSense d415深
- 下一篇: 学习大数据开发需要读的书籍有哪些?大数据