串口通信 怎样知道本机是否完整接收到对方发过来的数据

cjb734120250 2011-05-14 01:07:10
我在PC上面用WinAPI做串口通信 有几个问题想各位帮帮忙
1.对方发了10个字符过来 我要怎样知道本机是否完整收到对方发过来的数据呢?
比如PC1发了1234567890 我可能只收到了12345

2.我的程序不知道为什么,收到的数据经常断开的。
比如PC1发了1234567890 我可能只收到了12345 然后下次才收到67890,为什么呢?



分数在这里 http://topic.csdn.net/u/20110510/21/aeea586e-70cc-4705-a2e0-9f32fc393fb6.html 问题解决后把这里的分也给他
...全文
684 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjb734120250 2011-05-17
  • 打赏
  • 举报
回复
其实我是监视别人发过来的数据 他有没有协议我不知道啊 但是我就想知道他发送的完整的信息是什么啊
对方发送的信息都是一大堆一大堆的 我很难知道哪条打哪条···
qjj2857 2011-05-17
  • 打赏
  • 举报
回复
你自己发送自己接收,那自己写个小协议
别人发射,估计就没办法了吧
Bknightrcm 2011-05-16
  • 打赏
  • 举报
回复
正在做USB通信、、、也正在做数据打包这个部分、、、你可以网上搜下PPP协议、、、、按照这个思路来自己做些修改、、、
AnYidan 2011-05-16
  • 打赏
  • 举报
回复
1 在协议中规定好每次写多少数据
2 每次发送时包含此次的数据长度(自己定义一个 frame 的结构)

自己判断你是否接收到完整的数据,没有则继续等待,实际上与第一个问题相关,
觅食的猫猫 2011-05-16
  • 打赏
  • 举报
回复
还有这么个好事..[Quote=引用 4 楼 cjb734120250 的回复:]
走过路过不要错过 谁来答分就给谁了啊! 我问题已经解决了 现在只想把分花出去!
[/Quote]
xjq2003 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cjb734120250 的回复:]
走过路过不要错过 谁来答分就给谁了啊! 我问题已经解决了 现在只想把分花出去!
[/Quote]恭喜,恭喜
Frankfu001 2011-05-16
  • 打赏
  • 举报
回复
可能是波特率问题
MHBBCRCPJ 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cjb734120250 的回复:]
不是很懂 2楼能详细点吗?
[/Quote]

db 10,"1234567890"

db "1234567890",0

最好是用第一种,以太网用的就是和这种类似的协议,后面那个会使0无法使用。
cjb734120250 2011-05-15
  • 打赏
  • 举报
回复
走过路过不要错过 谁来答分就给谁了啊! 我问题已经解决了 现在只想把分花出去!
dceacho 2011-05-15
  • 打赏
  • 举报
回复
ClearCommError(_hComReceive, &dwErrorFlags, &ComStat);
dwBytesRead = min(dwBytesRead, (DWORD)ComStat.cbInQue);

还有一个问题就是为什么ComStat.cbInQue获得的数值和发送的字符数不匹配呢?
我就是根据ComStat.cbInQue的值来接收数据的

c++?

对C++不熟,不过用VC++写过一个接收单片机发的串口数据程序
当时的做法是直接开辟一个256字节的缓冲区,收到几个字节就按顺序丢几个字节到缓冲区,
假如先收到"12345"
缓冲区为"54321"xxxxxxxxxx
再收到"7890"
缓冲区为"0987654321"xxxxxxxxx
然后在缓冲区里去查找帧标记
到目前还没出过问题
炼气士 2011-05-15
  • 打赏
  • 举报
回复
虽然对串口通讯了解不多,但是判断的方法我所知道的一般为2种,1是超时等待,超过一定时间,则认为接收完毕,2是根据约定的协议的数据特征来判断,比如长度或者是特征字段。如果分段接收的,你可以自己进行组包
cjb734120250 2011-05-14
  • 打赏
  • 举报
回复
ClearCommError(_hComReceive, &dwErrorFlags, &ComStat);
dwBytesRead = min(dwBytesRead, (DWORD)ComStat.cbInQue);

还有一个问题就是为什么ComStat.cbInQue获得的数值和发送的字符数不匹配呢?
我就是根据ComStat.cbInQue的值来接收数据的
cjb734120250 2011-05-14
  • 打赏
  • 举报
回复
不是很懂 2楼能详细点吗?
DISINHUI 2011-05-14
  • 打赏
  • 举报
回复
1. 自定义协议。例如,首字节是本次发送的字节数。
或者设置引导字节。或者设置结束字节。
2. 断开,是因为可能你用的中断方式进行传送。如果你的接收代码是连续的话。

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧