串口不工作,但在超级终端工作

本文关键字:工作 超级终端 串口 | 更新日期: 2023-09-27 18:14:23

我用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。例如:' r

您的串行端口是如何配置的?

查看此网站:https://code.msdn.microsoft.com/windowsdesktop/SerialPort-brief-Example-ac0d5004

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

你的textBoxX1.Text.Trim()包含结束字符吗?(_terminator):)

EDIT:整个项目发送数据到com服务器。http://www.codeproject.com/Articles/678025/Serial-Comms-in-Csharp-for-Beginners

我真的认为你应该在你发送给COM的文本中添加'r'n,这将告诉COM端口行已经完成并将读取它。

Try this:

_port.Write(textBoxX1.Text.Trim() + "'r'n");