C# 从usb串行端口读取时出现奇怪数据

C# 从usb串行端口读取时出现奇怪数据,c#,serial-port,C#,Serial Port,我正在尝试从串行端口读取数据。当我使用USB适配器时,我得到的是垃圾而不是发送的东西 我所期望的(并通过普通串行端口获得) 通过USB串行端口(0x00 0x3F…)连接时得到的信息 而且,当我使用Putty连接时,即使通过USB串行端口,它也会显示正确的文本 这里有什么问题?Putty如何“修复”损坏的数据 编辑:添加用于读取的代码 SerialPort p = new SerialPort(Conf.Value("ExternalClockPort"), int.Parse(Conf

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

我所期望的(并通过普通串行端口获得)

通过USB串行端口(0x00 0x3F…)连接时得到的信息

而且,当我使用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));
}

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

_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);
}

我已经得到了你问题的答案。我遇到了相同的问题,解决方法如下: 我的奇偶校验被设置为奇数而不是偶数,在我将奇偶校验改为偶数之前,我一直在考虑这个问题


我的平价=平价。偶数

请显示用于从串行端口读取的代码。您是否将ReadLine与某些编码集一起使用?添加了读取代码。我使用ASCII编码。问题是它在不同的串行端口上的行为不同。看起来您使用了错误的波特率/串行端口设置。我在它自己的线程中这样做,所以p.Read()阻塞并不重要。datareceived事件是否处理数据?它本身不处理数据,只是在端口准备接收数据时发出信号。任何时候都不能从端口读取数据,必须使用事件。Java中没有SerialPort预定义类??要在java中完成此任务,我需要做什么??请建议。
    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));
}
_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);
}