在屬性頁或代碼中修改 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);
}