Serial Communication in C++ (Visual Studio 2010, .NET 4.5)

Serial Communication in C++ (Visual Studio 2010, .NET 4.5)

本文关键字:NET 2010 Studio in Communication C++ Visual Serial      更新时间:2023-10-16

我有一个关于从Arduino通过串行端口接收数据的澄清问题。具体来说,我正在使用Sparkfun Pro Micro 5v/16MHz,并尝试在C++中编写一个简单的GUI,以通过串行端口发送消息,然后接收Arduino板上运行的代码中指定的几个响应之一。

我知道在Arduino

上运行的通信和代码是有效的,因为我已经尝试使用Arduino IDE中的串行监视工具,并且能够发送和接收适当的响应。

通过我创建的C++ GUI 发送消息时,我看到消息发送时流量 LED 闪烁,导致我相信通过 GUI 发送C++是有效的,但关于接收消息的任何内容都不起作用。

我的一些代码:

private: System::Void serialPort1_DataReceived(System::Object^  sender, System::IO::Ports::SerialDataReceivedEventArgs^  e)
        {
            String^ testStr = serialPort1->ReadExisting();
            log_textBox->Text += testStr + "n";
        }

这是一个非常简单的事件处理程序,分配给我的SerialPort对象的DataReceived事件,该对象是我的窗体的一部分。我在里面设置了一个断点,它永远不会被触发。我有点茫然,我已经用Arduino或硬件做了大量的工作,所以我不完全确定我的调试选项是什么。

如果有人有任何调试建议或想法,我做错了什么,我将不胜感激。此外,如果我没有提供任何信息,请告诉我需要什么,我会对其进行编辑!

谢谢-K

在找到一个谈论设置的晦涩评论后,终于想通了这一点。

事实证明,我需要将串行端口的 DTREnabled 属性设置为 True 而不是 false,以便触发 DataReceived 处理程序。此设置从未在任何有关串行端口通信的 MSDN 文档中设置。如果您正在阅读本文并遇到类似的问题,请确保 DTREnabled、RTSEnabled 都设置为 true,甚至可能将握手设置为请求发送。也许其中一个或所有这些最终会修复它。

就我而言,只有DTREnabled需要是真的。我不太明白这些设置的作用,但你有它。