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
这可能更容易调试,因为您可以在处理程序中放置一个断点。如果您从未收到任何数据,那么您可能遇到了握手问题。
我正在尝试从通过 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
这可能更容易调试,因为您可以在处理程序中放置一个断点。如果您从未收到任何数据,那么您可能遇到了握手问题。