C# 串行端口不工作,但在超级终端中工作
我用C#实现应用程序串口,并用它发送数据。 但是不要工作。 我发送“A”字符,我的硬件不工作 但我通过超级终端应用程序或SimpleTerm发送它,并且工作正常 我的代码应用程序:C# 串行端口不工作,但在超级终端中工作,c#,serial-port,hyper-v,C#,Serial Port,Hyper V,我用C#实现应用程序串口,并用它发送数据。 但是不要工作。 我发送“A”字符,我的硬件不工作 但我通过超级终端应用程序或SimpleTerm发送它,并且工作正常 我的代码应用程序: if (_port.IsOpen) { _port.Close(); } _port.PortName = cmport.Text; _port.Parity = (Parity)Enum.
if (_port.IsOpen)
{
_port.Close();
}
_port.PortName = cmport.Text;
_port.Parity = (Parity)Enum.Parse(typeof(Parity), cmparity.Text);
_port.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmstopbit.Text);
_port.DataBits = Convert.ToInt32(cmdatabit.Text);
_port.BaudRate = Convert.ToInt32(cmboundrate.Text);
_port.Handshake = Handshake.None;
if (!_port.IsOpen)
{
_port.Open();
}
_port.Write(textBoxX1.Text.Trim());
串行端口是如何配置的 请访问此网站:
串行端口是如何配置的 请访问此网站:
当您使用超级终端时,它将添加回车符。 您必须在文本后添加\r。
示例:A\r当您使用超级终端时,它将添加回车符。 您必须在文本后添加\r。
示例:A\r使用Handshake.RequestToSend,从代码中删除所有的_-port.Close()调用。使用Handshake.RequestToSend,从代码中删除所有的_-port.Close()调用。当使用_-port.Write时(textBoxX1.Text.Trim()+“\r\n”);在lcd设备上打印一个空字符。我认为这是因为关闭客户端缓冲区\n或\r不是一种补救措施。请仅尝试\r或\n。它有用吗?(即使使用空字符)我尝试使用它,但不起作用。当端口USB 2.0可以发送12个字符时,但当使用USB 3.0时,当使用_port.Write(textBoxX1.Text.Trim()+“\r\n”)时,不能发送超过5个字符;在lcd设备上打印一个空字符。我认为这是因为关闭客户端缓冲区\n或\r不是一种补救措施。请仅尝试\r或\n。它有用吗?(即使使用空字符)我尝试使用它,但不起作用。当端口USB 2.0可以发送12个字符时,但当使用USB 3.0时,不能发送超过5个字符
using System;
using System.IO.Ports;
using System.Text;
namespace SerialPortExample
{
/// <summary>
/// Interfaces with a serial port. There should only be one instance
/// of this class for each serial port to be used.
/// </summary>
public class SerialPortInterface
{
private SerialPort _serialPort = new SerialPort();
private int _baudRate = 9600;
private int _dataBits = 8;
private Handshake _handshake = Handshake.None;
private Parity _parity = Parity.None;
private string _portName = "COM1";
private StopBits _stopBits = StopBits.One;
/// <summary>
/// Holds data received until we get a terminator.
/// </summary>
private string tString = string.Empty;
/// <summary>
/// End of transmition byte in this case EOT (ASCII 4).
/// </summary>
private byte _terminator = 0x4;
public int BaudRate { get { return _baudRate; } set { _baudRate = value; } }
public int DataBits { get { return _dataBits; } set { _dataBits = value; } }
public Handshake Handshake { get { return _handshake; } set { _handshake = value; } }
public Parity Parity { get { return _parity; } set { _parity = value; } }
public string PortName { get { return _portName; } set { _portName = value; } }
public bool Open()
{
try
{
_serialPort.BaudRate = _baudRate;
_serialPort.DataBits = _dataBits;
_serialPort.Handshake = _handshake;
_serialPort.Parity = _parity;
_serialPort.PortName = _portName;
_serialPort.StopBits = _stopBits;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
}
catch { return false; }
return true;
}
void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//Initialize a buffer to hold the received data
byte[] buffer = new byte[_serialPort.ReadBufferSize];
//There is no accurate method for checking how many bytes are read
//unless you check the return from the Read method
int bytesRead = _serialPort.Read(buffer, 0, buffer.Length);
//For the example assume the data we are received is ASCII data.
tString += Encoding.ASCII.GetString(buffer, 0, bytesRead);
//Check if string contains the terminator
if (tString.IndexOf((char)_terminator) > -1)
{
//If tString does contain terminator we cannot assume that it is the last character received
string workingString = tString.Substring(0, tString.IndexOf((char)_terminator));
//Remove the data up to the terminator from tString
tString = tString.Substring(tString.IndexOf((char)_terminator));
//Do something with workingString
Console.WriteLine(workingString);
}
}
}
}
_port.Write(textBoxX1.Text.Trim() + "\r\n");