其他分享
首页 > 其他分享> > 11.1 串口接受数据问题

11.1 串口接受数据问题

作者:互联网

问题点

①如果串口通讯的数据很长,在进入串口回调函数时,只是刚开始收到前几位数据,如果此时去读取,数据读取会不完整。
②如果接受完数据,没有做丢弃串口缓存区数据,会造成上次数据的未接受的部分,出现在本次接受数据的头部

优化点

①进入回调时,增加延时;(延时时间为串口波特率/8)
②增加数据长度判断;(判断本次数据是否为既定的通讯长度)
③增加串口缓存区清除步骤。(每次数据处理完成后,将接受缓存区清空,避免数据堆叠)

				Delay(9600/8);  //①***********延时必须要加,延时时间为 波波特率(9600)/ 8(bit)  ms
 				//存储接收的字符串
                string strReceive = string.Empty;
                string AnyID = string.Empty;
                //
                if (serialPort3 != null)
                {
                    //读取接收到的字节长度
                    int n = serialPort3.BytesToRead;
                    //定义字节存储器数组
                    byte[] byteReceive = new byte[n];
                    //接收的字节存入字节存储器数组
                    serialPort3.Read(byteReceive, 0, n);
                    //把接收的的字节数组转成字符串
                    strReceive = BitConverter.ToString(byteReceive);
                    if (byteReceive.Length == 5) //② 数据长度判定
                    {
                   			... //数据处理过程
                   }
                }
                serialPort3.DiscardInBuffer();//③丢弃串口缓存区数据  防止数据堆叠
  /不阻塞UI及线程延时//
  public void Delay(int milliSecond)
        {
            int start = Environment.TickCount;
            while (Math.Abs(Environment.TickCount - start) < milliSecond)
            {
                Application.DoEvents();
            }
        }
                    

标签:字节,11.1,延时,串口,接受,数据,byteReceive,string
来源: https://blog.csdn.net/wint_1996/article/details/121076791