从usb串口读取时的奇怪数据

时间:2011-12-28 10:19:22

标签: c# serial-port

我正在尝试从串口读取数据。当我使用USB适配器时,我会得到垃圾而不是发送垃圾。

我的期望(并获得正常的序列端口)

 0001 C0  23:33:41.9114 00
 0001 C1  23:34:17.8207 00
 0001 RT  00:00:35.90   00
n0002
 0002 C0  23:34:32.8372 00
 0002 C1  23:42:36.2617 00
 0002 RT  00:08:03.42   00
n0003
 0003 C0  23:42:44.3947 00

通过USB串口(0x00 0x3F ...)

连接时得到的信息
003F003F783F003F003F003F003F003F
003F003F003F003F003F3F3F3F003F00
3F3F78003F003F003F003F003F780000
3F003F783F003F003F003F003F003F00
3F003F003F003F003F3F3F3F003F003F
3F78003F003F00

此外,当我使用Putty进行连接时,即使通过USB串口也能显示正确的短信。

这里有什么不对? Putty如何“修复”腐败数据。

编辑:添加了用于阅读的代码

    SerialPort p = new SerialPort(Conf.Value("ExternalClockPort"), int.Parse(Conf.Value("ExternalClockBaud")), Parity.None, 8, StopBits.Two);
p.Handshake = Handshake.RequestToSend;
p.Open();
byte[] buffer = new byte[512];
String command = "";
while (!Done)
{
    int cnt = p.Read(buffer, 0, buffer.Length);
    File.AppendAllText(this.appDataDirectory + "ExternalClock.log", ASCIIEncoding.ASCII.GetString(buffer, 0, cnt));
    command = ExternalClock.parseCommand(command + ASCIIEncoding.ASCII.GetString(buffer, 0, cnt));
}

2 个答案:

答案 0 :(得分:1)

好的,所以你需要注册一个事件DataRecieved并从中读取端口数据。另外,请确保您的端口初始化值正确。

_sp = new SerialPort(Conf.Value("ExternalClockPort"), int.Parse(Conf.Value("ExternalClockBaud")), Parity.None, 8, StopBits.Two);
_sp.DataReceived += new SerialDataReceivedEventHandler(Port_DataReceived);
_sp.Open();


private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    int totalBytes = _sp.BytesToRead;
    byte[] buffer = new byte[totalBytes];
    _sp.Read(buffer, 0, totalBytes);
}

答案 1 :(得分:0)

我已经回答了你的问题。我遇到了同样的问题,解决方法如下: 我的奇偶校验设置为Odd而不是Even,直到将奇偶校验更改为Even为止,我一直遇到这个确切的问题。

myParity = Parity.Even;