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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

APT32F102-SIO模块控制WS2812

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 APT32F102-SIO模块控制WS2812 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.硬件電路

2.??數(shù)據(jù)協(xié)議采用單線(xiàn)歸零碼的通訊方式, 像素點(diǎn)在上電復(fù)位以后, DIN端接受從控制器傳輸過(guò)來(lái)的數(shù)據(jù), 首先送過(guò)來(lái)的24bit數(shù)據(jù)被第一個(gè)像素點(diǎn)提取后, 送到像素點(diǎn)內(nèi)部的數(shù)據(jù)鎖存器, 剩余的數(shù)據(jù)經(jīng)過(guò)內(nèi)部整形處理電路整形放大后通過(guò)DO端口開(kāi)始轉(zhuǎn)發(fā)輸出給下一個(gè)級(jí)聯(lián)的像素點(diǎn), 每經(jīng)過(guò)一個(gè)像素點(diǎn)的傳輸, 信號(hào)減少24bit。 像素點(diǎn)采用自動(dòng)整形轉(zhuǎn)發(fā)技術(shù), 使得該像素點(diǎn)的級(jí)聯(lián)個(gè)數(shù)不受信號(hào)傳送的限制, 僅僅受限信號(hào)傳輸速度要求 。

圖片來(lái)自網(wǎng)絡(luò)-

3.程序處理

????????

/*************************************************************/ //SIO Functions //驅(qū)動(dòng)RGB LED(ws2812), RGB DATA = 24bit; 驅(qū)動(dòng)數(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時(shí)間是250nsSIO_TX_Init(SIOCLK_EN,11); ////TXCR1 TXCR0--空閑輸出L//TXBUFLEN = 8-1 TXCNT =24-1// D0 D1 不使用//默認(rèn)電平為低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ā)送輸出測(cè)試delay_nms(1000);//....} }

0x07,?? ?0x00,?? ?0x00,//rgb1? 此處是對(duì)應(yīng)編碼格式。

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

????????

符合時(shí)序

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。