Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 串行端口不工作,但在超级终端中工作_C#_Serial Port_Hyper V - Fatal编程技术网

C# 串行端口不工作,但在超级终端中工作

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.

我用C#实现应用程序串口,并用它发送数据。 但是不要工作。 我发送“A”字符,我的硬件不工作 但我通过超级终端应用程序或SimpleTerm发送它,并且工作正常

我的代码应用程序:

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");