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标准发送及代码整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: API Guides Contacts
- 下一篇: skyline软件体系及工作流程