串口通信时,断开再接上时,接收数据出错的问题

mochen5460 2008-07-15 05:41:01
总是描述:
  51单片机:不停地通过串口循环发送字符“0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c”
  PC机:通过串口调试助手接收查看。
  开始的时候没问题,如果PC机在接收过程中,在调试助手里关闭串口,然后再找开串口,这时接收到的数据就会出错,比如可能接收到"0x0e,0x2e,0x4e,0x6e...",再关闭,再打开,可能又是正确的。正确的概率大概在50%左右。如果每发送一个字符,延时一段时间,正确的概率会增大。

问:1。为什么会出现这种情况?
  2。怎么样才能保证每次关闭再打开时,接收到的数据都是正确的?
...全文
554 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huating 2008-07-18
  • 打赏
  • 举报
回复
我觉得2楼的说法应该可能性大一些,我这边有一个国外产品的仪表,是用串口读的,也曾经会出现这么一个问题,不过它的正确率要高的多,它发送数据与延时的时间比大约是1:2,这是用示波器来读出的.这样你读起来基本不会遇到这样的问题,只会是偶尔出一下而已.可者你刚才说的.0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c你循环发送这些,你可以在每句这个之后加一个0X0D,0X0A.可能也有一定的用处.
shuiyan 2008-07-17
  • 打赏
  • 举报
回复
那只是一种可能,说实话我没碰到过,只是根据传输机制猜测的。
但你用的51单片机,传输再快也不应该那么巧能赶上这个间隙呀,所以我才觉得有意思的。

或许是另外的原因。换一个串口信息工具,反复打开关闭。再找一个以前好的另外的板子来试试,看看是不是PC的串口有问题。

当然这些工作有意义的前提是你的板子硬件电路没问题。
mochen5460 2008-07-17
  • 打赏
  • 举报
回复
我觉得2楼所说的可能性比较大,有没有什么方法解决呢?如果一味加大延时,实时性又会受到影响。
大肚肥肥 2008-07-17
  • 打赏
  • 举报
回复
个人感觉5楼说的比较靠谱。

先要清理串口缓存
hualei24 2008-07-16
  • 打赏
  • 举报
回复
看下是不是干扰的问题
fouryu 2008-07-16
  • 打赏
  • 举报
回复
调试助手在打开时有没有清空一下串口的接受缓存?
maluyazi 2008-07-16
  • 打赏
  • 举报
回复
看看两个系统的地线接的是否可靠,有时候容易忽略这个问题,数据错误的很严重。
ALazyworm 2008-07-16
  • 打赏
  • 举报
回复
Purge Comm Buffer first
shuiyan 2008-07-15
  • 打赏
  • 举报
回复
这个是因为发送的间隔太短,与波特率有了一定的重合区域了。
串口关闭,再打开,打开的瞬间就开始进行采样了。此时采样得到的值,可能是正确值的一部分,比如0x35的5,和后一个0x36之间本来有一个停止位,有一个开始位,采样时会将5(4bit)+停止位(1bit)+开始位(1bit)+3(4bit)当成一次传输,并获得对应的值。

所以你会发现,发送完一个后,延时一段时间就减少出错,因为延时一段时间了,采样已经超过一次传输,无法获得开始信号,就不会产生(错误的)采样值了。

不过,这个也太巧了,程序也算有意思了。
mochen5460 2008-07-15
  • 打赏
  • 举报
回复
印象中,这不只是单片机的问题,以前也遇到过2台PC机串口通信时有类似的问题。

27,375

社区成员

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

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