DMX512标准发送及代码整理
來源:DMX512是由USITT(美國劇院技術(shù)協(xié)會)提出的,是一種標(biāo)準(zhǔn)數(shù)字接口控制調(diào)光器的方式,協(xié)議多用于舞臺、景觀燈的控制,全稱為USITT DMX512-A。
硬件依托:基于rs485硬件接口,波特率為250kbps =250000bps,是主從式的異步串行傳輸協(xié)議,即一個主機向多個從機發(fā)送11位的數(shù)據(jù)幀,從機只接收和判斷收到的數(shù)據(jù)幀是否丟棄還是使用。
數(shù)據(jù)格式:波特率25000bps對應(yīng)每bit的持續(xù)時間是4us,發(fā)送一個數(shù)據(jù)幀的時間:4*11=44us。一個完整的DMX512數(shù)據(jù)包組成:BREAK信號、MAB信號和SC(start code)信號,以及512個數(shù)據(jù)幀;一個數(shù)據(jù)幀組成:1bit低電平起始位、8bit數(shù)據(jù)位(0-255)、2bit停止位。
信號位說明:BREAK是一個DMX512數(shù)據(jù)包的啟示控制信號,代表一個數(shù)據(jù)包發(fā)送完的復(fù)位標(biāo)志,BREAK的信號是低電平有效,持續(xù)時間88us-1S,典型值100us。MAB信號代表一個數(shù)據(jù)包開始發(fā)送,因為BREAK和START CODE的起始位都是低電平,故加入MAB來區(qū)分,所以MAB是高電平,持續(xù)時間8us-1s,通常取12us。START CODE是起始碼,和普通的數(shù)據(jù)幀一樣,數(shù)據(jù)位為0x0
DMX512協(xié)議發(fā)送設(shè)計:DMX512的數(shù)據(jù)幀格式和串口的格式差不多,可以基于串口來發(fā)送數(shù)據(jù)幀,要求是把串口的數(shù)據(jù)位設(shè)為9位(多了一位停止位)。512個數(shù)據(jù)幀解決了后,主要就是要形成BREAK和MAB,這里用的定時器做的us延時來實現(xiàn)。
步驟1:初始化一個485串口,波特率設(shè)置為250000bps、9bit數(shù)據(jù)位、一位停止位、tx模式。
步驟2:初始化定時器,參考網(wǎng)上教程寫us延時函數(shù)。
步驟3:實現(xiàn)UART_MODE(int mode)函數(shù),該函數(shù)是將uart的tx腳進(jìn)行IO口初始化的,發(fā)送BREAK和MAB的時候要把tx腳初始化為上拉輸出,發(fā)送數(shù)據(jù)幀時要把tx設(shè)置為復(fù)用推挽輸出。
示例代碼:
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:調(diào)光數(shù)據(jù)
{
????????if(pDMX_buf == 0)
????????{
????????????????UART4->DR = 0x00; //第一幀數(shù)據(jù)0x00
????????????????while((UART4->SR & 0X40) == 0); //確保數(shù)據(jù)發(fā)送完成
????????}
????????else
????????{
????????????????UART4->DR = 0x100 | dmx_buf[pDMX_buf];//數(shù)據(jù)幀的第九位要為高
????????????????????????while((UART4->SR & 0X40) == 0); //確保數(shù)據(jù)發(fā)送完成
????????}
}
總結(jié)
以上是生活随笔為你收集整理的DMX512标准发送及代码整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: API Guides Contacts
- 下一篇: skyline软件体系及工作流程