【0】灯光亮化——————DMX数据接收

  1. 简述
    1. 协议详解请参阅之前文章:https://blog.csdn.net/Linux_ARM9/article/details/106365272
  2. 硬件平台
    1. STM8
  3. 解码原理
    1. DMX512实际是异步串口通信;

    2. 选用带串口功能的单片机,并且把串口频率设置为250Kbps;

    3. 因为有个起始码的原因,DMX512实际发的是513个数据帧;

    4. 做为起始码,数据帧为0,且第9位为0;后面的512个数据帧,第9位为1,根据这个特点,只要用串口工作方式3来判断第9位为0还是为1,就可确定是否是头码;

  4. 解码流程图

  5. 例程

    1.  /*********************************************************
       * 函数名: @far @interrupt void Uart1_RxIrqHandleer(void)
       * 描述  :串口中断函数
       * 输入  :无
       * 输出  :无
       * 返回  :无 
       * 调用  :内部调用 
       **********************************************************/
      @far @interrupt void Uart1_RxIrqHandleer(void)
      {
      	if(UART1_SR & UART_RXNE)//判断是否为有效位,是只对RXNE清零;
      		UART1_SR &= 0xdf; 	
      	else
      		return ;//不是有效位;直接退出;
      	UART_DataCode = UART1_DR;
      	
      	//复位信号 00 
      	if(((UART1_CR1 & 0x80) == 0)&&(UART_DataCode == 0)) //复位信号
      	{
      		UART_BreakFlag = 1;
      		DMX_AddCount = 0;
      		DMX_ChannelCount = 0;
      		UART_ReceiveEndFlag = 0;
      		UART_DataCodeEndFlag = 1;
      		return ;
      	}
      	//起始码 00
      /*	if((UART_DataCode == 0)&&(UART_BreakFlag == 1))
      	{
      		UART_BreakFlag = 0; //本次数据包不在检测起始码;
      		UART_DataCodeEndFlag = 1;
      		return;
      	}*/
      	//数据包
      	if(UART_DataCodeEndFlag == 1)
      	{
      		if((DMX_AddCount >= DMX_AddMcu) && (DMX_ChannelCount < DMX_ChannelNum))
      		{
      			UART_DataBuf[DMX_ChannelCount] = UART_DataCode;
      			
      			DMX_ChannelCount++;
      			if(DMX_ChannelCount >= DMX_ChannelNum)
      			{
      				UART_DataCodeEndFlag = 0;
      				
      				UART_ReceiveEndFlag = 1;
      				
      				return ;
      			}
      		}
      		else
      				DMX_AddCount++;
      		return;
      	}
      }

       

  6. 总结

  7. 参考资料

    1. DMX协议官方文档:https://www.docin.com/p-2151506316.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值