串口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串口,然後对其发送信号? 跪求回答! 可行比加分!!
用C++编程一个串口,用Dev C++编译软件出现No such file or directory一个头文件找不到咋解决。