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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

DMX512标准发送及代码整理

發布時間:2023/12/14 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DMX512标准发送及代码整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 協議詳解
  • 來源:DMX512是由USITT(美國劇院技術協會)提出的,是一種標準數字接口控制調光器的方式,協議多用于舞臺、景觀燈的控制,全稱為USITT DMX512-A。

    硬件依托:基于rs485硬件接口,波特率為250kbps =250000bps,是主從式的異步串行傳輸協議,即一個主機向多個從機發送11位的數據幀,從機只接收和判斷收到的數據幀是否丟棄還是使用。

    數據格式:波特率25000bps對應每bit的持續時間是4us,發送一個數據幀的時間:4*11=44us。一個完整的DMX512數據包組成:BREAK信號、MAB信號和SC(start code)信號,以及512個數據幀;一個數據幀組成:1bit低電平起始位、8bit數據位(0-255)、2bit停止位。

    信號位說明:BREAK是一個DMX512數據包的啟示控制信號,代表一個數據包發送完的復位標志,BREAK的信號是低電平有效,持續時間88us-1S,典型值100us。MAB信號代表一個數據包開始發送,因為BREAK和START CODE的起始位都是低電平,故加入MAB來區分,所以MAB是高電平,持續時間8us-1s,通常取12us。START CODE是起始碼,和普通的數據幀一樣,數據位為0x0

  • 代碼設計
  • DMX512協議發送設計:DMX512的數據幀格式和串口的格式差不多,可以基于串口來發送數據幀,要求是把串口的數據位設為9位(多了一位停止位)。512個數據幀解決了后,主要就是要形成BREAK和MAB,這里用的定時器做的us延時來實現。

    步驟1:初始化一個485串口,波特率設置為250000bps、9bit數據位、一位停止位、tx模式。

    步驟2:初始化定時器,參考網上教程寫us延時函數。

    步驟3:實現UART_MODE(int mode)函數,該函數是將uart的tx腳進行IO口初始化的,發送BREAK和MAB的時候要把tx腳初始化為上拉輸出,發送數據幀時要把tx設置為復用推挽輸出。

    示例代碼:

    Int pDMX_buf;

    UART_MODE(io模式);

    GPIOC->BRR = GPIO_PIN_TX; //把tx腳輸出低電平的BREAK位

    Delay_us(100);

    GPIOC->BSRR = GPIO_PIN_TX; //把tx腳輸出高電平的MAB位

    Delay_us(12);

    UART_MODE(uart模式);

    for(pDMX_buf = 0; pDMX_buf <= 512; pDMX_buf++) //0:startcode ?1-512:調光數據

    {

    ????????if(pDMX_buf == 0)

    ????????{

    ????????????????UART4->DR = 0x00; //第一幀數據0x00

    ????????????????while((UART4->SR & 0X40) == 0); //確保數據發送完成

    ????????}

    ????????else

    ????????{

    ????????????????UART4->DR = 0x100 | dmx_buf[pDMX_buf];//數據幀的第九位要為高

    ????????????????????????while((UART4->SR & 0X40) == 0); //確保數據發送完成

    ????????}

    }

    總結

    以上是生活随笔為你收集整理的DMX512标准发送及代码整理的全部內容,希望文章能夠幫你解決所遇到的問題。

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