MFC串口使用几种波特率轮询嵌入式板 本帖最后由 ek_guoarm 于 2013-09-09 21:45:14 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢楼上的回答,但还是没解决问题: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; } 内存泄漏,大伙帮我看看. 如何从dll中显示引用类 请教! 请问如何实现一个5ns-20ns的延时 大家好。。我想问一下现在看<WINDOWS核心编程>这本书还有用吗。。 ATL下怎么开辟多线程? 关于注册窗口类的入门问题,需要高手来答疑 ORACLE监听问题 请教winsock(超初级) 如何用程序将一个htm页面作为桌面背景 寻找软件界面外包 拖动图片留下阴影了
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;
}