C ++中的串行通信(Visual Studio 2010,.NET 4.5)

时间:2013-10-26 00:34:44

标签: c++ visual-studio-2010 serial-port arduino

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

我知道在Arduino上运行的通信和代码是有效的,因为我已尝试在Arduino IDE中使用串行监控工具,并能够发送和接收相应的响应。

通过我创建的C ++ GUI发送消息时,我看到消息发送时流量指示灯闪烁,这让我相信通过C ++ GUI发送是有效的,但没有任何关于接收消息的信息。

我的一些代码:

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

这是一个非常简单的事件处理程序,分配给我DataReceived对象的SerialPort事件,该事件是我表单的一部分。我在其中设置了一个断点,它永远不会被触发。我有点不知所措,我用Arduino或硬件完成了一项不存在的工作,所以我不完全确定我的调试选项。

如果有人有任何调试建议或想法我做错了我会非常感激。另外,如果我没有提供任何信息,请告诉我需要什么,我会编辑它!

谢谢你, -K

1 个答案:

答案 0 :(得分:0)

在找到一篇关于设置的晦涩评论后,最终想出了这个。

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

在我的情况下,只有DTREnabled必须是真的。我不太明白这些设置是做什么的,但是你有它。