我有一些愚蠢的代码来访问Windows COM端口(只是最相关的功能的一些伪代码):访问COM端口与Windows 10
// 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小工具l接口和速度设置和其他事情并不重要。
此代码与所有Windows版本(包括8.1)一起工作正常,但对于Windows 10,某些用户报告与设备没有可能的通信。不幸的是,我没有相关的Win10版本进行测试。
所以我的问题:是否有一些问题/在Windows 10中可能会导致此类行为或需要在串行端口通信中的一些变化的重要更改?
谢谢!
****** 更新 ************************************* *****************************
正如更新到此:函数SetCommState()失败,出现错误87(ERROR_INVALID_PARAMETER )。如果我使用从GetCommState()接收的数据或者我完全初始化并配置了DCB结构,那么设置自己的参数并不重要。所以......这是Win 10的SetCommState()中的一个已知错误?
只是要注意:它只在5个案例中的4个失败,所以它不是一个系统性错误,而是一个随机错误!
我不知道可能存在什么理由downvote这个问题...但并不奇怪,这些人是在大多数情况下无胆够不给予任何评论...... – Elmi