无法从串口获取数据
问题描述:
我正在使用串口通讯。 我在程序中插入了这段代码。 我能够向设备发送数据并且无法从设备读取数据。 在调试模式下,我只能得到serialport.BytesToRead = 0. 我可以知道为什么会发生?无法从串口获取数据
while (serialport.BytesToRead > 0)
{
int byte_count = serialport.BytesToRead;
byte[] buffer = new byte[byte_count];
int read_count = serialport.Read(buffer, 0, byte_count);
string echo = ASCIIEncoding.ASCII.GetString(buffer, 0, read_count);
echo = System.Text.Encoding.UTF8.GetString(buffer);
Console.WriteLine(echo);
}
答
首先使用另一个程序,如Putty或超级终端来验证设备和连接是否正常工作,并仔细检查您是否使用了正确的端口,波特率,奇偶校验,停止位和数据位。如果使用这样的程序无法从设备中获取任何内容,那么它将无法使用您自己的代码。
接下来关注握手。一个常见的错误是将它保持在零,然后不打开DtrEnable和RtsEnable信号。设备在认为你离线时不会发送任何内容。 SysInternals' PortMon utility可以很方便,它会告诉你在设备驱动程序级别发生了什么。
答
什么时候从串口读取?你在发送之后是否尝试阅读?在这种情况下,您可能会尝试阅读,然后才能从端口读取任何内容。
您应该使用DataReceived
事件来读取数据。
请注意,在收到所有数据之前,此事件可能会触发,因此您可能必须通过多次调用DataReceived
来检索数据,直到获得所有应有的数据为止。