【问题标题】:Read characters from serial port in c#从 C# 中的串口读取字符
【发布时间】:2013-03-22 04:14:32
【问题描述】:

您好,我正在使用 Read() 方法从串口读取 10 个字符,例如 0123456789。实际上字符是由PIC单片机发送的。

这是我的代码:

serialPort1.PortName = "com4";
serialPort1.BaudRate = 9600;
serialPort1.Open();
char[] result = new char[10];
serialPort1.Read(result, 0, result.Length);
string s = new string(result);
MessageBox.Show(s);
serialPort1.Close();

当我运行代码时,会出现一个消息框并且只显示第一个字符。消息框中只显示“0”。

我哪里出错了??

【问题讨论】:

标签: c# serial-port


【解决方案1】:

你做错的是没有注意 Read() 的返回值。它告诉你读取了多少字节。

串行端口是非常慢的设备,在典型的波特率设置为 9600 时,传输一个字节需要一毫秒。对于现代处理器来说,这是一个巨大的时间,它可以轻松地在一毫秒内执行数百万条指令。 Read() 方法会在 一些 字节可用时立即返回,如果您人为地让程序变慢,那么您只能获得全部 10 个字节,以便驱动程序有足够的时间来接收所有这些字节。

一个简单的解决方法是继续调用 Read() 直到你得到它们:

char[] result = new char[10];
for (int len = 0; len < result.Length; ) {
   len += serialPort1.Read(result, len, result.Length - len);
}

另一种常见的解决方案是发送一个唯一字符来指示数据的结束。换行 ('\n') 是一个很好的选择。现在它变得简单多了:

string result = serialPort.ReadLine();

现在还支持任意响应长度。只需确保数据不包含换行符即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多