【问题标题】:Serial connection is opening all ports?串行连接打开所有端口?
【发布时间】: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


【解决方案1】:

“问题”是我自己的工作场所问题,重新启动我的电脑,我开始收到错误 COM 端口的错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-09-02
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多