DMX512标准发送及代码整理

  1. 协议详解

来源: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

  1. 代码设计

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); //确保数据发送完成

        }

}

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值