簡體   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