社区
硬件/系统
帖子详情
关于串口通信结束符
x___f__
2011-05-15 08:41:43
现在出现这样一个问题,就是传输数据的时候,遇到终止符数据传输就终止了。
我在传的过程中,会在每段数据的末尾加一个"&",以说明传输结束。
但传输的过程中,数据经常中途被截断。比如传输十进制数据1975892时,其二进制是1E2654,传到0X26时数据传输就被截断了。
也用"\0"做过终止符,但是碰到0时,也是传输被打断。
请问,我错在哪里,该如何解决这样的问题呢?
...全文
2883
12
打赏
收藏
关于串口通信结束符
现在出现这样一个问题,就是传输数据的时候,遇到终止符数据传输就终止了。 我在传的过程中,会在每段数据的末尾加一个"&",以说明传输结束。 但传输的过程中,数据经常中途被截断。比如传输十进制数据1975892时,其二进制是1E2654,传到0X26时数据传输就被截断了。 也用"\0"做过终止符,但是碰到0时,也是传输被打断。 请问,我错在哪里,该如何解决这样的问题呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
x___f__
2011-05-19
打赏
举报
回复
OK!谢谢各位的回答!
向立天
2011-05-17
打赏
举报
回复
[Quote=引用 9 楼 x___f__ 的回复:]
我设定dcb.EvtChar = "&",但用它的问题是在数据段中会经常出现ascii对应为"&"的数字而导致传输中断,我觉得用一个连续的多个字符作为结尾标志挺好的,但不知道该怎么实现,EvtChar 好像只能设置为单个字符,设置不了两个字符。“用一个连续的多个字符作为结尾标志”,用什么命令可以控制呢?
[/Quote]
这个不是用命令控制的
接收到数据流的时候自己对其进行解析
找到结束符之后把之前的数据按协议整理出来
zhaozidong86
2011-05-16
打赏
举报
回复
串口通信不是用WriteFile吗,怎么会是用sendto啊,这个好像是udp的发送数据吧,可以用memcpy复制数据,发送的时候在WriteFile里面制定发送长度吧
x___f__
2011-05-16
打赏
举报
回复
我设定dcb.EvtChar = "&",但用它的问题是在数据段中会经常出现ascii对应为"&"的数字而导致传输中断,我觉得用一个连续的多个字符作为结尾标志挺好的,但不知道该怎么实现,EvtChar 好像只能设置为单个字符,设置不了两个字符。“用一个连续的多个字符作为结尾标志”,用什么命令可以控制呢?
“数据段使用全字符表示,而数据头采用不涉及到字符的ascii码做标示。”我设定的数据尾是用不涉及到字符的ascii码做标示的,但是数据段我定义的是char数组,我想请问数据段使用全字符表示是什么意思,串口发送时传入的char*缓存都是用ascii码表示的,若把数据段使用全字符表示是意味着把数据段的每个数字包括正负号分别用ascii表示吗?这样的话发送时的数据缓存是不是要开到很大才行?
向立天
2011-05-16
打赏
举报
回复
[Quote=引用 6 楼 xianglitian 的回复:]
用一个连续的多个字符作为结尾标志
这样重复率会降低
比如AA55或A5A5之类的
[/Quote]补充一下
这里说的A、5是十六进制数
chenjiawei007
2011-05-16
打赏
举报
回复
LS的也是个办法,
在数据段中出现的数据是不能做数据头尾的,
你可以考虑数据段使用全字符表示,而数据头采用不涉及到字符的ascii码做标示。
向立天
2011-05-16
打赏
举报
回复
用一个连续的多个字符作为结尾标志
这样重复率会降低
比如AA55或A5A5之类的
x___f__
2011-05-15
打赏
举报
回复
我的数据都是数字,是有符号的。
x___f__
2011-05-15
打赏
举报
回复
传输的时候用unsigned char 为什么?我传的原始数据中有负数啊
x___f__
2011-05-15
打赏
举报
回复
我发送时,定义了一个char的发送缓存数组,传的时候是用的sendto函数。请问对方要连续收是什么意思?
我设的evnChar = &,但串口传输的时候,虽然原始数据是数字,但二进制位常出现&,这就导致&后的数据接不到了。
接收的时候,也是定义了一个char的数组接收缓存,但是我发现接收缓存在遇到0时就不接收了,然后我用memcpy把接收缓存赋给事先定义好的结构体,可以自动取得对应位的值。但现在数据被截断了,事先定义结构体中的一部分数据就取不到值了
chenjiawei007
2011-05-15
打赏
举报
回复
拷贝字符串时0做结束符,0后面的数据当做了无用数据,可以选择memcpy函数进行拷贝。
用户 昵称
2011-05-15
打赏
举报
回复
你传输的时候,要用unsigned char 吧,而且对方也要连续收才对。
STM32串口无
结束符
接收数据[可运行源码]
本文介绍了STM32如何通过串口接收一组数据而不需要数据有
结束符
的方法。传统的串口接收中断函数需要以特定字符(如换行符)作为结束标志,但通过使能空闲中断(USART_IT_IDLE),可以在数据组之间存在时间间隔时自动判断一组数据的接收完成。具体实现包括在串口初始化中使能空闲中断,并在中断服务程序中处理接收数据和空闲中断。空闲中断的清除需要先读取SR寄存器再读取DR寄存器,而非使用USART_ClearITPendingBit函数。这种方法适用于需要灵活处理不定长数据的场景。
树莓派与STM32
串口通信
程序
马肯依码士4020通讯协议以及
串口通信
实例
本文章包含马肯依码士4020通讯协议,
串口通信
实例,以及通过串口通讯实例调用喷码枪的方法。文章中的联系方式被盗,不要加了。这个是对的QQ1034298724
LabVIEW
串口通信
入门教程
使用Labview进行串行通信开发
c#读写串口缓冲区(起始头2位+标志1位+数据N位+结束尾2位)
在工业嘈杂的生产环境中,可能发生各种意外。 一般的数据包格式是:起始头2位+标志1位+数据N位+校验位1位+结束尾2位. 注意:这里的起始头和结束尾是2位!!!因为有些场合1位标志位容易出错。 ------------分割线------------- c#读写串口缓冲区,发送比较简单。 接收包格式:起始头+标志位+数据位+结束尾,先收到缓冲区里暂存,然后从缓冲区里检查起始位、结束尾。无效串口数据丢弃,有效数据处理。
硬件/系统
2,643
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章