我正在尝试从串口读取数据。当我使用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));
}
答案 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;