【发布时间】:2019-10-15 05:09:10
【问题描述】:
我正在用MFC创建UART接口,接口包括打开连接、发送消息和接收消息。 我以为我已经打开了端口,检查后,我的 D9 连接器位于 COM5 上,成功打开。 问题是即使将连接从COM5更改为不合理的COM535,我仍然没有收到任何错误
我试过几个COM口,有的合理,有的不合理。
这就是我初始化与坏 COM 的连接的方式:
Serial::Serial(CString &commPortName, int bitRate)
{
commHandle = CreateFile(L"\\\\.\\COM535", GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED , NULL);
if(commHandle == INVALID_HANDLE_VALUE)
{
throw("ERROR: Could not open com port");
}
else
{
// set timeouts
COMMTIMEOUTS cto = { MAXDWORD, 0, 0, 0, 0};
DCB dcb;
if(!SetCommTimeouts(commHandle,&cto))
{
Serial::~Serial();
throw("ERROR: Could not set com port time-outs");
}
// set DCB
memset(&dcb,0,sizeof(dcb));
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = bitRate;
dcb.fBinary = 1;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
if(!SetCommState(commHandle,&dcb))
{
Serial::~Serial();
throw("ERROR: Could not set com port parameters");
}
}
}
当我连接到 COM5 时,一切都很好,但我预计连接到 COM535 时会出现问题,但我没有,这不是应该的。
【问题讨论】:
-
由于您使用的是 MFC,我假设您使用的是 Windows 操作系统。这不是 C++ 问题,更多的是 Windows API 的问题。您必须查找该函数并找出在提供无效 COM 号时会产生哪些错误。
-
已经检查过了,我在CUARTDlg的构造函数中设置了Serial数据成员,当我使用Serial类的方法之一时,连接建立,编译器会返回comHandle=0xffffffff为坏尝试连接,但它没有
标签: c++ mfc serial-port