C# 串行端口不';t实际打开VirtualCOM端口
我有一个微控制器,通过USB CDC/ACM连接到电脑。当我试图用一个使用SerialPort的应用程序打开端口时,我在微控制器上什么也看不到。在使用RealTerm、TeraTerm、PuTTy等时,我可以轻松地在micro中设置断点,并观察端口打开/写入/读取/关闭事件被触发,但在我的应用程序中,什么都没有。没有给出错误,应用程序似乎认为一切正常。打开后,即使我在micro上看不到任何东西,其他终端应用程序也无法再连接到该端口,但一旦我在我的应用程序中关闭它,它们就会再次工作。此外,如果我试图在打开后写入端口,应用程序就会挂起。那么我错过了哪一步呢 这是我的密码:C# 串行端口不';t实际打开VirtualCOM端口,c#,wpf,serial-port,C#,Wpf,Serial Port,我有一个微控制器,通过USB CDC/ACM连接到电脑。当我试图用一个使用SerialPort的应用程序打开端口时,我在微控制器上什么也看不到。在使用RealTerm、TeraTerm、PuTTy等时,我可以轻松地在micro中设置断点,并观察端口打开/写入/读取/关闭事件被触发,但在我的应用程序中,什么都没有。没有给出错误,应用程序似乎认为一切正常。打开后,即使我在micro上看不到任何东西,其他终端应用程序也无法再连接到该端口,但一旦我在我的应用程序中关闭它,它们就会再次工作。此外,如果我试
using System;
using System.ComponentModel;
using System.IO.Ports;
using System.Windows;
using System.Windows.Controls;
namespace SerialApp
{
public partial class MainWindow : Window
{
static SerialPort _serialPort = new SerialPort();
static byte[] read_buffer = new byte[4096];
static byte[] getSerialNumberCmd = { 0x6D, 0x69, 0x6E, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
public MainWindow()
{
InitializeComponent();
}
private void comboBoxPorts_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string port = comboBoxPorts.SelectedIndex.ToString();
port = "COM" + port;
_serialPort.PortName = port;
_serialPort.BaudRate = 115200;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.Handshake = Handshake.None;
_serialPort.ReadBufferSize = 4096;
_serialPort.WriteTimeout = 500;
_serialPort.ReadTimeout = 500;
}
private void button_Click(object sender, RoutedEventArgs e)
{
try
{
if (_serialPort.IsOpen) _serialPort.Close();
if (_serialPort != null)
{
_serialPort.Open();
_serialPort.DataReceived += Serial_DataReceived;
comboBoxPorts.IsEnabled = false;
buttonClosePort.IsEnabled = true;
buttonOpenPort.IsEnabled = false;
label1.Content = "Connected to " + _serialPort.PortName;
}
else
{
label1.Content = "Choose a COM port.";
}
}
catch(Exception ex)
{
label1.Content = "Invalid COM port.";
}
}
private void Serial_DataReceived(object s, SerialDataReceivedEventArgs e)
{
_serialPort.Read(read_buffer, 0, 64 + 12);
}
private void Window_Closing(object sender, CancelEventArgs e)
{
if (_serialPort.IsOpen)
{
_serialPort.Close();
}
if (_serialPort != null)
{
_serialPort.Dispose();
}
}
private void buttonClosePort_Click(object sender, RoutedEventArgs e)
{
if (_serialPort.IsOpen)
{
_serialPort.Close();
buttonClosePort.IsEnabled = false;
buttonOpenPort.IsEnabled = true;
comboBoxPorts.IsEnabled = true;
label1.Content = "Choose a COM port.";
}
}
private void buttonGetSerial_Click(object sender, RoutedEventArgs e)
{
try
{
if (_serialPort.IsOpen)
{
_serialPort.Write(getSerialNumberCmd, 0, 64);
}
}
catch(Exception ex)
{
_serialPort.Close();
labelSerialNumber.Content = ex.Message;
}
}
}
}
顺便说一句,我尝试在另一个完全不同系列的微控制器上执行相同的操作,我看到了相同的行为。尝试添加以下内容:
_serialPort.DtrEnable = true; //enable Data Terminal Ready
_serialPort.RtsEnable = true; //enable Request to send
有关完整的代码示例,请参见。这篇文章是为Windows窗体编写的,但您应该能够根据自己的情况使用大部分代码。哦,亲爱的sweet merciful@user9938谢谢!这简直让我发疯。我还没见过其他地方用过。