串口C++问题

Posted

技术标签:

【中文标题】串口C++问题【英文标题】:Serial port C++ problem 【发布时间】:2010-11-05 10:01:54 【问题描述】:

我在 Visual Studio 上使用 c++ 连接到任何串行端口(想与 Arduino 交换)时遇到问题。

我正在使用 Arduino 操场上提供的 SerialClass,但无法打开我的端口的句柄。每次尝试都会抛出 ERROR_FILE_NOT_FOUND ..

我一直在测试许多其他表示端口的方法:

"COM1"
"COM1:"
"\\.\COM1"

但没有任何效果。

该端口在系统上可用,并且使用 Putty 或 Arduino IDE 可以正常工作。此外,它不会被其他进程阻止。

我使用的是 Windows 7 x64,但项目是 Win32。

类是用

构造的

serialPort = new Serial((char*)port);

错误字符串显示正确的端口名。

我做错了什么?

也无法打开文件。

【问题讨论】:

您可能还希望扩展该类,以便在修复错误后能够修改端口设置。它目前没有办法以编程方式配置端口,并且所有设置都是硬编码的。读取/发送的数据可能不会 mesh 与您尝试连接的 w/e。这也是一个很好的例子(来自 MS 的正确),关于如何利用他们的 .NET 框架,该框架具有直接可用的串行端口类。 msdn.microsoft.com/en-us/library/… 如果您正在寻找替代方案但仍在使用 c++,您可以尝试Qt 并使用开源的QextSerialPort 库。我使用它取得了一些非常好的成功,而且它的学习曲线非常小,考虑到大多数示例都很容易实现您想要完成的目标。 【参考方案1】:

其他人手动使用api打开串口的一个很好的例子是here。相关部分(关于您的问题)使用端口号显示它们,如下所示:

...
CreateFile("\\\\.\\COM1",GENERIC_WRITE
...

所以它可能是\\\\.\\COM1 而不是您尝试过的选项。

【讨论】:

msdn.microsoft.com/en-us/library/aa363198(v=VS.85).aspx 有一个例子表明它应该是 \\.\COM1通常 \ 是一个特殊字符,所以你必须加倍 \\ 才能得到正确的字符。 我会尝试直接使用 windows API。 arduino serialclass 中的内容非常有限,可能不足以满足您想要做的事情。我之前已经让串行课程直接使用COM1,但只有当我自己完成并完成时。 好吧,我尝试直接使用 API,但这不起作用,我知道该类非常有限,但对于我想做的事情,它应该可以很好地工作。 (只想发送大约 8 个没有响应的状态)【参考方案2】:

找到答案!

我使用 (LPCTSTR) 转换了字符串,但这不会返回有效字符串。不得不使用

const WCHAR FileFullPath[] = L"COM4" ;

用于转换。

【讨论】:

【参考方案3】:

您确定这不是 Windows 7 64 位的驱动程序问题吗?

【讨论】:

但是它不能与其他程序一起使用?!使用 putty 和 Arduino IDE 效果很好 这是一个很长的镜头,但你确定没有 UAC 问题,即。开发环境没有以管理员身份运行。特权。 也以管理员身份启动了它

以上是关于串口C++问题的主要内容,如果未能解决你的问题,请参考以下文章

如何利用C语言,C++语言打开USB串口,然後对其发送信号? 跪求回答! 可行比加分!!

怎么判断串口已发送完毕?(qt5, c++)

Qt 串口的 C++ 线程模式

QT c++不止一次打开串口

用C++编程一个串口,用Dev C++编译软件出现No such file or directory一个头文件找不到咋解决。

串口通信教程[关闭]