【问题标题】:Accessing COM-port with Windows 10使用 Windows 10 访问 COM 端口
【发布时间】:2017-02-13 12:14:58
【问题描述】:

我有一些愚蠢的代码来访问 Windows COM 端口(只是一些最相关功能的伪代码):

// open device:
COMMTIMEOUTS timeouts;
DCB          ComSettings;

memset(&ComSettings,0,sizeof(ComSettings));
ComSettings.DCBlength=sizeof(DCB);
*fd=CreateFile(serialParams>port,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
GetCommState(*fd,&ComSettings);
ComSettings.BaudRate=9600;
ComSettings.ByteSize=8;
ComSettings.Parity=NOPARITY;
ComSettings.fParity=0;
ComSettings.StopBits=ONESTOPBIT;
ComSettings.fOutX=FALSE;
ComSettings.fInX=FALSE;
ComSettings.fBinary=TRUE;
ComSettings.fDtrControl=DTR_CONTROL_DISABLE;
ComSettings.fRtsControl=RTS_CONTROL_DISABLE;
ComSettings.fAbortOnError=FALSE;

SetCommState(*fd,&ComSettings);

timeouts.ReadIntervalTimeout        =MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier =0;
timeouts.ReadTotalTimeoutConstant   =0;
timeouts.WriteTotalTimeoutMultiplier=0;
timeouts.WriteTotalTimeoutConstant  =250;

SetCommTimeouts(*fd, &timeouts);

从串口读取数据是通过

ReadFile()

和写作

WriteFile()

在我的特殊情况下,该设备是作为串行接口连接的 USB 小工具,速度设置和其他东西并不重要。

此代码适用于包括 8.1 在内的所有 Windows 变体,但对于 Windows 10,一些用户报告无法与设备通信。可惜我没有相关的Win10版本进行测试。

所以我的问题是:Windows 10 中是否存在一些可能导致此类行为或需要对串行端口通信进行一些更改的问题/重要更改?

谢谢!

****** 更新 ********************************* ******************************************

正如对此的更新:函数 SetCommState() 失败并出现错误 87 (ERROR_INVALID_PARAMETER)。在这里,我设置自己的参数、使用从 GetCommState() 接收的数据还是完全初始化和配置 DCB 结构都没有关系。那么...这是 Win 10 的 SetCommState() 中的已知错误吗?

请注意:它仅在 5 例中的 4 例中失败,因此它不是系统错误,而是随机错误!

【问题讨论】:

  • 我不知道有什么理由可以否决这个问题......但这些人在大多数情况下都没有胆量不发表任何评论......

标签: winapi serial-port windows-10


【解决方案1】:

最后:这似乎是一个 Windows 问题,微软已经废弃了 usbser.sys 驱动程序。有很多关于这个问题的线程:

https://answers.microsoft.com/en-us/windows/forum/windows_10-hardware-winpc/usb-serial-interface-problems-with-windows-10/562943cb-9a65-4900-98ef-03ba453d2742

https://answers.microsoft.com/en-us/insider/forum/insider_wintp-insider_devices/windows-10-serial-usb-problems/438de66f-7294-4c06-b4fb-89b45d005ca0

第二个是最有趣的:它以“我们仍然有问题”结尾 - 然后被 MS 工作人员关闭。

我个人发现了一个旧的 Windows 10 安装,usbser.sys 运行良好 - 在应用所有可用的 Windows 补丁(包括 usbser.sys 的更新)后,问题出现了。

【讨论】:

    【解决方案2】:

    当 RealTerm 在相同的端口上工作时,我们还遇到了 COM 端口上的 ReadFile 不返回任何内容的问题。 事实证明,Windows 没有正确激活,导致了这些问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2011-09-05
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多