首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC++ MSCOMM 控件屬性修改未生效:串口參數運行時動態設置的正確方法

     編輯:程式設計綜合問答

問題現象

在屬性頁或代碼中修改 MSCOMM.CommPort、Settings (波特率、數據位等) 後,實際串口通信參數未變化。

原因

MSCOMM 控件的屬性設置必須在 PortOpen = True **之前** 完成,或在關閉端口後重新打開才能生效。運行中直接修改 Settings 字符串不會自動調用底層 SetCommState。

正確流程

// 1. 關閉端口 (如果已打開)
if (m_mscomm.get_PortOpen()) m_mscomm.put_PortOpen(FALSE);

// 2. 設置參數
m_mscomm.put_CommPort(3); // COM3
m_mscomm.put_Settings(_T("9600,n,8,1")); // 波特率 9600, 無校驗, 8 數據位, 1 停止位
// 或分別設置
m_mscomm.put_InBufferSize(1024);
m_mscomm.put_OutBufferSize(1024);

// 3. 打開端口
m_mscomm.put_PortOpen(TRUE);
if (!m_mscomm.get_PortOpen()) {
    AfxMessageBox(_T("串口打開失敗"));
    return;
}

動態切換波特率示例

void CMyDlg::OnCbnSelchangeComboBaud() {
    CString strBaud;
    m_comboBaud.GetWindowText(strBaud); // "9600"
    CString settings;
    settings.Format(_T("%s,n,8,1"), strBaud);
    
    BOOL wasOpen = m_mscomm.get_PortOpen();
    if (wasOpen) m_mscomm.put_PortOpen(FALSE);
    m_mscomm.put_Settings(settings);
    if (wasOpen) m_mscomm.put_PortOpen(TRUE);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved