【发布时间】: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