日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

APT32F102-SIO模块控制WS2812

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 APT32F102-SIO模块控制WS2812 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.硬件電路

2.??數據協議采用單線歸零碼的通訊方式, 像素點在上電復位以后, DIN端接受從控制器傳輸過來的數據, 首先送過來的24bit數據被第一個像素點提取后, 送到像素點內部的數據鎖存器, 剩余的數據經過內部整形處理電路整形放大后通過DO端口開始轉發輸出給下一個級聯的像素點, 每經過一個像素點的傳輸, 信號減少24bit。 像素點采用自動整形轉發技術, 使得該像素點的級聯個數不受信號傳送的限制, 僅僅受限信號傳輸速度要求 。

圖片來自網絡-

3.程序處理

????????

/*************************************************************/ //SIO Functions //驅動RGB LED(ws2812), RGB DATA = 24bit; 驅動數據輸出排列方式:GRB /*************************************************************/ void SIO_CONFIG(void) {SIO_DeInit();//SIO_IO_Init(SIO_PB01); //配置IO為SIO模式//tx clk =4MHz, Ttxshift = 1/4 = 250ns;發送每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 原始數據 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);//發送輸出測試delay_nms(1000);//....} }

0x07,?? ?0x00,?? ?0x00,//rgb1? 此處是對應編碼格式。

bit1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?bit 0?

????????

符合時序

總結

以上是生活随笔為你收集整理的APT32F102-SIO模块控制WS2812的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。