繁体   English   中英

在 windows COM 端口上禁用 CTS 流控制

[英]Disable CTS flow control on windows COM port

我正在使用SetCommState配置 COM 端口。

        if (!BuildCommDCBA(
                 "baud=9600 parity=N data=8 stop=1",
                &dcbSerialParams))
            return;
        SetCommState(myCOMHandle, &dcbSerialParams);

这似乎启用了我的硬件不支持的 CTS 流控制

        _COMMCONFIG cfg;
        DWORD sz = sizeof(cfg);
        if (!GetCommConfig(
                myCOMHandle, // Handle to the Serial port
                &cfg,
                &sz))
            std::cout << "GetCommConfig FAILED\n";
        DCB dcb = cfg.dcb;
        std::cout << "\nBaudRate " << dcb.BaudRate
                  << "\nfBinary " << dcb.fBinary
                  << "\nfParity " << dcb.fParity
                  << "\nfOutxCtsFlow " << dcb.fOutxCtsFlow ...

输出

BaudRate 9600
fBinary 1
fParity 0
fOutxCtsFlow 1

我试过使用

"baud=9600 parity=N data=8 stop=1 octs=off"

但这给出了相同的结果。

我也尝试过从 BuildCommDCBA 重写 output

dcbSerialParams.fOutxCtsFlow = 0;

        if (!BuildCommDCBA(
                 "baud=9600 parity=N data=8 stop=1",
                &dcbSerialParams))
            return;
        dcbSerialParams.fOutxCtsFlow = 0;
        SetCommState(myCOMHandle, &dcbSerialParams);

但这也给出了相同的结果。

BuildCommDCBA的文档说明了这一点

模式语法有较旧和较新的 forms。 BuildCommDCB function 支持 forms。 但是,您不能将两个 forms 混合在一起。

较新形式的模式语法允许您显式设置 DCB 结构的流控制成员的值。 如果您使用较旧形式的模式语法,则 BuildCommDCB function 设置 DCB 结构的流控制成员,

这当然似乎与我的问题有关。 但是我找不到模式语法的新旧 forms 的描述。 我看过这个

我可以假设我使用的是较新的吗? 为什么要设置 fOutxCtsFlow? 我怎样才能强制它取消设置?

根据MSDN

BuildCommDCB function 仅调整 DCB 结构中受 lpDef 参数影响的那些成员...

因此,您需要确保所有其他字段都具有可接受的值。 最简单的方法是初始化

DCB dcbSerialParams = { 0 };

这应该通过将所有相关值设置为FALSE0来禁用所有流控制。 只要您的字符串设置了所有其他重要的东西(波特率、奇偶校验、停止位和数据大小),这应该没问题。 特别是,您将获得:

fBinary = FALSE;
fNull = FALSE;
fErrorChar = FALSE;
fParity = FALSE;
fRtsControl = RTS_CONTROL_DISABLE;
fOutxCtsFlow = FALSE;
fOutX = FALSE;
fInX = FALSE;
fDtrControl = DTR_CONTROL_DISABLE;
fOutxDsrFlow = FALSE;

另一种选择是通过调用其中一个来初始化字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM