繁体   English   中英

C#SerialPort无法从Arduino Micro接收

[英]C# SerialPort can't receive from Arduino Micro

尝试在.NET Framework 4.6.1 SerialPort和Arduino Micro之间进行通信时,我可以成功将字节发送到Micro,但无法接收。 尝试执行回声测试,Arduino接收正常工作(并且RX点亮),但TX失败-未发送字节或错误。 我将代码尽可能地精简到了Arduino仅每秒写入一个字符的地方,而C#应用程序只是在循环中读取,但是没有收到字节。 Micro TX指示灯不亮,并且Serial.write调用返回0。我已经打开/关闭了所有可以找到的流控制/握手设置,没有任何区别。 确认的奇偶校验/停止位等。我可以在测试应用程序和RealTerm之间来回切换,一切都可以在RealTerm上正常运行,将其关闭,然后启动C#SerialPort应用程序和nada。 SerialPort怎么可能失败呢?

C#

class Program
{
    static void Main(string[] args)
    {
        readPacket();
    }

    private static void readPacket()
    {
        var spd_Port = new SerialPort("COM4", 115200);
        spd_Port.ErrorReceived += Spd_Port_ErrorReceived;
        spd_Port.Open();

        while (true)
        {
            while (spd_Port.BytesToRead > 0)
            {
                Console.WriteLine(spd_Port.ReadChar());
            }
            Thread.Sleep(10);
        }
    }

    private static void Spd_Port_ErrorReceived(Object sender, SerialErrorReceivedEventArgs e)
    {
        Console.WriteLine(e);
    }
}

Arduino的

void setup()
{
    // set all pins as inputs (except serial pins)
    init_pins();

    pinMode(ARD_LED, OUTPUT);
    digitalWrite(ARD_LED, HIGH);

    // Configure serial port
    Serial.begin(115200);
}

int i = 0;
void loop()
{
    int j = Serial.write(0x24);
    if (j)
    {
        digitalWrite(ARD_LED, i == 0 ? HIGH : LOW);
        i = (i + 1) % 2;
    }

    delay(1000);
}

请尝试启用DTRRTS

_serialPort.DtrEnable = true;
_serialPort.RtsEnable = true;

编辑

根据gregsmi的说法,它通过启用DTR或RTS进行工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM