tnjk.net
当前位置:首页 >> 串口接收 不完整 >>

串口接收 不完整

《 串口中怎样接收一个完整数据包的解析 》 这篇博文应该会对这个问题有帮助。 使用时间来判断一个完整的包 比较通用吧。

首先说明的是单片机中断是不可能有重入的,也就是必须一个中断结束另一个中断才能开始。所以你的程序可能有问题,不妨贴上来看看。

byte[] data = new byte[1]{(byte)serialPort1.ReadByte()};改为 int n = serialPort1.BytesToRead;byte[] data = new byte[n];serialPort1.Read(data, 0, n);

串口的默认停止符是0A,你出现0A,它就会停止接收,所以需要在VISA Configure Serial Port(VISA配制串口)控件的启用终止符(T)端口上连一个值为False的常量

串口收数据,有时候一次本来就收不完整,你需要有个接受缓存,收到的数据全部放到缓存中,当收集完整了,才开始干你的事情,收不完整,我经常遇到到,都是这样解决的 for(k=0;k

你试试改下SerialPort 的Handshake设置,应该是这个原因.之前我也遇到过,一个属性一个属性的改,才找出来是这个原因.

没办法保证能够一次全部接收,只能自己缓存起来处理。比如,发送数据时候增加带有长度的数据头以及末尾的校验,用 select 对串口做非阻塞读取,读到数据后检查是否完整,不完整就接着读,直到获得完整数据再处理。

你调用ReadFile函数,一次接收多少字节,取决于两个因素: (1)串口缓冲区实际有多少 (2)你打算取多少 ReadFile()函数的第三个参数表示你打算取多少,但如果你想去1024个,串口缓冲区只有500个,那你最多只能取500个。实际取了多少,会放到Re...

原因:串口内部是用一个线程DataReceived触发事件,但它是不断触发的,界面收到通知的时候串口内部状态实际上可能已经发生变化。 解决:自己建立一个byte或string的队列,拼接拆分(这就要求必须有自定义的终止符)

设置一下接收延时 设个500ms应该可以了

网站首页 | 网站地图
All rights reserved Powered by www.tnjk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com