
int bytes = serialPort1BytesToRead; //读取数据长度
byte[] buffer = new byte[bytes];
serialPort1Read(buffer, 0, bytes); //读取串口数据
serialPort1ReadLine()是输入缓冲区中直到首次出现NewLine值,出现异常参见csdn
对于粘贴出的代码:
首先确认使用的串口是SerialPort2还是SerialPort1,截图中你调用BytesToRead使用的是SerialPort1,而定义的响应函数名为serialPort2_DataReceived,是不是串口调用出现了问题; 其次串口serialPort2的响应,定义为
thisserialPort2DataReceived += new SystemIOPortsSerialDataReceivedEventHandler(thisserialPort2_DataReceived);
其声明为
private void serialPort2_DataReceived(object sender, SystemIOPortsSerialDataReceivedEventArgs e)
依据你贴出的程序来看,明明是串口2的响应函数,你却用串口1调用BytesToRead(),自然会出现异常
电脑的串口的波特率也是有上限的,不是你想要多少都行的,这是要受硬件限制的,对于异步串行通信,波特率能达到256000已经是最大限定了,通常的电脑只支持到128000。虽然支持到128000,可是实际真要做到这个波特率,通信就变成很不稳定了,收发数据很容易会出现错误。你那要求921600,就是空想。再说了,什么设备需要这么高的波特率。非要这么高,用CAN总线吧,可以达到1M的波特率。
我能想到的是对串口通信的函数增加信号量进行线程间控制
相关的几个函数名如下:
CreateSemaphore(NULL,1,1,NULL)
WaitForSingleObject
ReleaseSemaphore
以上就是关于windows10 c#串口 *** 作 无法接收数据全部的内容,包括:windows10 c#串口 *** 作 无法接收数据、有关windows下串口编程的问题,波特率较高、windowAPI串口通信时,一个串口,多个线程都可能对其进行写 *** 作,如何避免出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)