无法尝试从串行端口接收数据

嗨我有一个端口连接到我的电脑,它不断发送数据,我的目标是从它接收数据并打印出来。 问题是我真的不知道它发送的是什么类型的数据,我该怎么读它…

private void Button_Receive_Data_Click(object sender, EventArgs e) { GroupBox_Serial_Transmit.Enabled = false; #region string Port_Name = ComboBox_Available_SerialPorts.SelectedItem.ToString(); int Baud_Rate = Convert.ToInt32(ComboBox_Standard_Baundrates.SelectedItem); COMport = new SerialPort(Port_Name, Baud_Rate); #endregion COMport.ReadTimeout = 3500; //3.5 sekundes try { COMport.Open(); if (COMport.IsOpen == true) { TextBox_System_Log.Text = Port_Name + Environment.NewLine + Baud_Rate; ReceivedData = COMport.ReadExisting(); this.Invoke(new EventHandler(ShowData)); GroupBox_Serial_Transmit.Enabled = true; } else { MessageBox.Show("Unable to Write to COM port "); GroupBox_Serial_Transmit.Enabled = true; COMport.Close(); } } catch (TimeoutException SerialTimeOutException) { MessageBox.Show(SerialTimeOutException.ToString()); COMport.Close(); GroupBox_Serial_Transmit.Enabled = true; } } private void ShowData(object sender, EventArgs e) { TextBox_System_Log.Text = ReceivedData; } 

这是我的代码,它试图打开端口并读取数据。 我尝试调试它,ReadExising函数返回一串我无法理解的符号。 我尝试了几种方法,但没有一种方法,现在我很绝望。 对不起,可能会有一些不完整的代码行,因为我是SerialPort通信的完全初学者。

你所能希望的是串行发送可读文本。 在这种情况下,您的主要目标是找出波特率。 由于您是初学者,只需安装docklight(或者picocom或您可用的任何工具)。 尝试从最高(115200)[ 检查以下注释 ]和8个数据开始的每个波特率,向下,对于您检查的每个波特率,使用停止位和奇偶校验。

或者(感谢Trevor的灵感)你可以运行一个工具来检查重复的1和0。 例如,如果您的流是110011001100000011110011,那么一个好的候选者是115200/2。 有111000111000111000000111000111111111,一个好的候选人是115200/3等

为了完整起见,上述方法可能是不确定的,因为数据“可能”实际上是1100110011001100.这是没有意义的,因为这是一种非有效的编码,但与原始问题一致,“我们不知道”串行发送的内容。

现在你的希望是你最终偶然发现了正确的配置并且实际上得到了可读的文本。 如果这样做,您可以返回C#并设置正确的配置并恢复调试。

如果您没有找到,则表示数据采用二进制格式,我们无法确定正确的传输配置和数据内容。

您的下一个赌注是保存足够长的日志并使用hex编辑器打开它。


笔记:

即使您可能收到一些设备信息(例如波特率9600),仍建议采用上述步骤。 事实OP偶然发现错误的信息,而9600没有工作,115200没有。

115200被认为是UART的最大值。 但是通过适当的界面,您可以达到230400和460800 ……甚至更多。 要使此答案面向未来,请validation硬件和串行驱动程序支持的接口最大值