串口接收问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口接收问题相关的知识,希望对你有一定的参考价值。

串口接收中0x55,0xAA,0x3C,0xC3等来作为开始和结束的标志,那如果要接收的数据中刚好有0x55,0xAA,0x3C那该怎么办
我说的接收的数据中刚好有0x55,0xAA,0x3C,0xC3就是指他们出现的顺序和开始和结束标志一样,这时候该怎么处理??
具体的说,我接收的数据里面有起始帧(4字节),命令帧(1字节),数据帧(n字节),和结束帧(4字节)。数据量大,难保数据里面不包含有起始帧,数据帧的长度也可能会是一样的,这些都是不得不考虑的情况。

你的意思是说:帧头和帧尾都是0x55,0xAA,0x3C,0xC3,这样如果在数据中有0x55,0xAA,0x3C,0xC3的时候,就会自动判断这是一帧结尾,而不是当做数据?有几种 解决方法,你看那个适合你:1,修改你的帧头和帧尾,减小能够出现上述情况的可能,一般帧头和帧尾是不一样的吧;
2,如果你发送接收的数据格式是一样的话,你的数据多长也有规定,在里面规定个数据类型的字节数,我先判断这个类型,然后已知数据长度,根据这个长度直接判断帧尾,如果是我的数据,再根据你的协议,取数据就行了。简单说就是我得到数据后先判断数据类型。
参考技术A 哈哈,如果将55、AA、3C、C3一起使用呢?假设只有满这4个字节的组合条件才算开始和结束,这样就避开在正文中出现这些字节的情况,除非是恰好有4个字节组合成这个序列。
应该是这样:起始-命令-长度-数据-结束
在判断了“起始”、“命令”和“长度”之后,协议就根据“长度”规定的数值接收规定长度的数据而不需要加以判断,这样就避免了在“数据”中又出现了“起始”帧,这样该简单吧?这样的好处就是可以不要“结束帧”。

当然可以使用应答机制,即A向B以上面的协议发送数据之后,B向A返回一个确定ACK,这样保证一次传输的准确。来自:求助得到的回答本回答被提问者采纳
参考技术A “那些该记得的人” tx 说的很详细;

觉得 都是协议里应该考虑的内容!

STM32 串口为啥只能接收发送的部分数据

程序BUG,或者接受缓冲的数组变量满了,不过基本上可以确定是程序问题 参考技术A 这个跟stm32没有关系,跟你的程序有关系。

以上是关于串口接收问题的主要内容,如果未能解决你的问题,请参考以下文章

STM32串口中断接收问题

STM32F4 DMA接收串口定长数据,串口每秒来1000个数据,使用DMA-Normal模式

STM32F4 DMA接收串口定长数据,串口每秒来1000个数据,使用DMA-Normal模式

stm32 开启接收中断 PC 发送两次 为啥串口只接收到一次

STM32 串口为啥只能接收发送的部分数据

matlab串口接收数据的问题