本帖最后由 ek_guoarm 于 2013-09-09 21:45:14 编辑

解决方案 »

  1.   

    谢谢楼上的回答,但还是没解决问题:
    1.仿真运行,MFC串口没有运行到消息处理函数。
    2.外部用串口助手模拟200ms间隔发送,依然无效果。我的疑问是,外部数据无法进入消息处理函数的原因?上位机因此无响应的原因?贴出相关代码:
    //生成定时器线程
    countNum1 = 0;
    if(pThread == NULL)
    pThread = AfxBeginThread(CBrTimerThread, GetSafeHwnd());
    //串口有效性检查
    if ( m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
    {//串口存在
    m_Port.StartMonitoring();
    strStatus.Format("Status:Com%d Opened,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
    m_ctrlIconOpenoff.SetIcon(m_hIconRed);
    m_ctrlPortStatus.SetWindowText(strStatus);
    m_ctrlOpenPort.SetWindowText("关闭串口");
    m_bOpenPort = TRUE;
    //Added 201307 9600, 19200, 38400, 115200
    for(i = 0; i < 4; i++)
    {
    if(m_Port.InitPort(this, m_nCom, ReadBaudRate[i],m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
    {
    m_Port.StartMonitoring();
    strStatus.Format("Status:Com%d Opened,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
    m_ctrlPortStatus.SetWindowText(strStatus);
        m_Port.WriteToPort(WritePara2, 4);
    countNum1 = 0;
    RsResponse = 0;
    while(countNum1 < 10 && !RsResponse);//超时且无响应
    } if(RsResponse) break;
    }
               
    if(RsResponse == 1)
    {
    RsResponse = 0;
    m_nBaud = ReadBaudRate[i];
    m_ctrlOpenPort.SetWindowText("关闭串口");
    m_ctrlIconOpenoff.SetIcon(m_hIconRed);
    strStatus.Format("Status:Com%d Opened,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
    switch(i)
    {
    case 0:
       m_getbaudrate.SetWindowText("9600");
    break;
    case 1:
       m_getbaudrate.SetWindowText("19200");
    break;
    case 2:
       m_getbaudrate.SetWindowText("38400");
    break;
    case 3:
       m_getbaudrate.SetWindowText("115200");
    break;
    default:break;
    }
    m_bOpenPort = TRUE;
    }
    else
    {
    m_ctrlOpenPort.SetWindowText("打开串口");
    AfxMessageBox("未检测到模块\n请再次尝试...");
    m_Port.ClosePort();
    m_ctrlIconOpenoff.SetIcon(m_hIconOff);
    m_bOpenPort = FALSE;
    } //轮询结束就关闭定时线程
    ::TerminateThread(pThread->m_hThread,0);
    pThread = NULL;
    }