Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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_Microcontroller - Fatal编程技术网

与微控制器的C#串行通信问题

与微控制器的C#串行通信问题,c#,serial-port,microcontroller,C#,Serial Port,Microcontroller,我在Visual Studio C#环境中与嵌入式设备进行串行通信时遇到问题,当前的解决方案是使用以下配置与putty会话进行通信: 波特率>9600 数据位>8 停止位>1 奇偶校验>无 流量控制>RTS/CTS 每次建立连接时,putty终端上都会显示一个菜单,显示控制器的可用命令 我尝试了以下从MS示例中借用的方法: public class PortChat { static bool _continue; static SerialPort _serialPort

我在Visual Studio C#环境中与嵌入式设备进行串行通信时遇到问题,当前的解决方案是使用以下配置与putty会话进行通信:

  • 波特率>9600
  • 数据位>8
  • 停止位>1
  • 奇偶校验>无
  • 流量控制>RTS/CTS
每次建立连接时,putty终端上都会显示一个菜单,显示控制器的可用命令

我尝试了以下从MS示例中借用的方法:


public class PortChat
{
    static bool _continue;
    static SerialPort _serialPort;

    public static void Main()
    {

        // Create a new SerialPort object with default settings.
        _serialPort = new SerialPort();

        _serialPort.PortName = "COM4";
        _serialPort.BaudRate = 9600;
        _serialPort.Parity = Parity.None;
        _serialPort.DataBits = 8;
        _serialPort.StopBits = StopBits.One;
        _serialPort.Handshake = Handshake.RequestToSend;


        // Set the read/write timeouts
        _serialPort.ReadTimeout = 5000;
        _serialPort.WriteTimeout = 5000;

        _serialPort.Open();
        Thread.Sleep(1000);
    }

}

在“port.Open”之后读取端口会导致异常,请参见第一个屏幕截图。 写入端口也会导致异常,请参见第二个屏幕截图。 我错过了什么

多谢各位


ReadLine等待,直到它看到SerialPort.NewLine字符串。如果未在SerialPort.ReadTimeout内到达,则会引发TimeoutException。增加超时时间或使用
ReadExisting()

见:

根据MSDN:
[SerialPort.ReadTimeout]获取或设置读取操作未完成时发生超时之前的毫秒数。

见:

默认情况下,ReadLine方法将阻塞,直到收到一行。如果不需要此行为,请将ReadTimeout属性设置为任何非零值,以在端口上没有可用的行时强制ReadLine方法引发TimeoutException。


请参阅:

也许会有帮助。@Louis Go谢谢Louis,但这不是同一件事,我可以使用相同的端口设置与putty通信,不会出现任何问题,也不会对port.open引发异常。您的.Net framework是否比4.0更新?我记得旧版本是有缺陷的。对不起,没什么帮助。@Louis Go,如果我使用_serialPort.ReadExisting()的话,它是框架版本4.5;打开端口后,我总是得到一个“”字符串。如果我将读/写超时设置为2秒,这是足够的,那么两个都会超时。我想知道这是否与RTS/CTS流量控制有关?但是putty怎么处理得这么顺利?@user3255590在
\u serialPort.Read
中有原始数据吗?
ReadExisting()
方法返回serialPort数据接收缓冲区中的所有字符。因此,当调用此方法时,您只能得到一半的消息。最好的方法是使用
DataReceived
事件,当字符通过串行端口时触发该事件,并使用
ReadExisting
获取字符。我这里有一个很好的例子:@Baddack,我不知道如何将您的示例集成到我的代码中:我们如何处理您的函数?private void serialPort1_DataReceived(对象发送方,System.IO.Ports.SerialDataReceivedEventArgs e)
mySerialPort.DataReceived+=新的SerialDataReceivedEventHandler(DataReceivedHandler)将创建DataReceived事件。请参阅Microsoft示例: