- 简述
- 硬件平台
- STM8
- 解码原理
-
DMX512实际是异步串口通信;
-
选用带串口功能的单片机,并且把串口频率设置为250Kbps;
-
因为有个起始码的原因,DMX512实际发的是513个数据帧;
-
做为起始码,数据帧为0,且第9位为0;后面的512个数据帧,第9位为1,根据这个特点,只要用串口工作方式3来判断第9位为0还是为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; } }
-
-
总结
-
无
-
-
参考资料
-
DMX协议官方文档:https://www.docin.com/p-2151506316.html
-
【0】灯光亮化——————DMX数据接收
最新推荐文章于 2024-01-06 11:29:04 发布