C# .net 串口接收缓冲区始终为空

C# .net serial port receive buffer always emtpy

我正在尝试从通过 USB 连接到 windows PC 的微控制器接收一些数据。正如您在下面的代码中看到的那样,我正在使用 .net SerialPort 功能执行此操作。我知道睡眠不是很优雅,但这只是我的测试代码,因为我无法让它工作。

基本上我有一个 Arduino 发送一些数据,我可以用 Arduino 串行监视器接收这些数据,但我的 c# 程序只输出空行,接收缓冲区总是空的。 (您在此处看到的确切代码将每秒输出一个零和一个空行,即使每 200 毫秒发送一个随机数也是如此) 我已经确认两端的波特率都是正确的,我也切换到具有相同结果的 raspberry pi pico。 如果有人能在这里提供帮助,我将不胜感激,据 google 所知,我必须是第一个 运行 参与其中的人 :D

using System;
using System.IO.Ports;
using System.Threading;

namespace serial_test
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort testPort = new SerialPort("COM9", 9600);

            testPort.Open();

            while (true)
            {
                Thread.Sleep(1000);
                Console.WriteLine(testPort.BytesToRead);
                Console.WriteLine(testPort.ReadExisting());
            }
        }
    }
}

您可能想要订阅端口的 DataReceived 事件,而不是 运行 无限循环。然后您可以在处理程序中创建一个变量来读取数据。

var port = (SerialPort)sender;
// Retrieve and write your data here

这可能更容易调试,因为您可以在处理程序中放置一个断点。如果您从未收到任何数据,那么您可能遇到了握手问题。