最近再做一个项目,串口通信,但是只能受到一次数据后面怎么也收不到,我想了好久?难道微软提供的系统函数有问题?测试好久,发现居然是对方发送数据过快导致收数据回调函数无响应,我推测内存回调时候发生异常或者卡死,因为对方连发后软件直接卡死无响应,后来测试时间放慢后就正常了,看了很多论坛帖子发现都不是回答很清楚或者不能解决问题。所以我从实际中给出具体方法:
(1)让对方减慢发送数据速度
(2)如果对效率有要求,可以尝试下面代码(来自微软官方API:https://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.datareceived(v=vs.100).aspx)
using System; using System.IO.Ports; class PortDataReceived { public static void Main() { SerialPort mySerialPort = new SerialPort("COM1"); mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceviedHandler); mySerialPort.Open(); Console.WriteLine("Press any key to continue..."); Console.WriteLine(); Console.ReadKey(); mySerialPort.Close(); } private static void DataReceviedHandler( object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); Console.WriteLine("Data Received:"); Console.Write(indata); } }
(3)使用其他串口类库。我找到一个windows api写的类库,正在测试中,到时候把结果发上来
(4)如果有大神路过可以把自己解决方法留在评论区,供大家一起参考