串口USART UART 接收结束标志是怎么回事 这是一种自己定义的协议 没有通用协议

原文链接:http://www.openedv.com/posts/list/53847.htm

f(USART_RX_STA&0x40)
                {
                    if(Res!=0x0a)
                    {
                        USART_RX_STA=0;//
                    }
                    else 
                    {
                        USART_RX_STA|=0x80;
                    }
                }
=======================================
关于原子历程里面的这段函数  如果数据包里含有0x01 0x02 0x03  0x0d 0x03 0x05 0x0d 0x0a 这种数据是不是就接收不到我想要的数据了啊  有点疑问

最佳答案




毫无疑问是的, 

0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了, 
0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行 
像在windows超级终端里一条数据输入完按回车正好来了个0D 0A,表示数据发完了 

串口如何检测数据接收完毕或串口接收超时,这个问题是个老大难问题,没有好的协议支持,就要浪费单片机大量的资源去解决这个问题。 

比如浪费一个定时器,每次在中断里接到一个字节就开启定时器去记时,9600大概1MS一个字节,定时器到3MS中断检查有没收到数据了就表示数据帧结束了, 

又比如串口绑在DMA通道上,通过串口的空闲中断来判断接收完成 

问题在于现在有大量的工业通讯协议如MODBUS等没有帧结束标志,实在令人发指

你可能感兴趣的:(电子技术)