利用串口调试助手确定串口有接收到数据!
做了一个打开串口的按钮:
if (!m_MSComm.get_PortOpen())
{
m_MSComm.put_Settings(_T("19200,N,8,1"));
m_MSComm.put_RThreshold(1);
m_MSComm.put_PortOpen(TRUE);
// m_btn_receivedata.EnableWindow(FALSE);
MessageBox(_T("打开串口成功"));
}
是不是这个地方执行完之后,直接就会触发控件的OnComm函数呢,那为什么不响应呢!
通过CLASS WIZARD创建的OnComm函数:
void CSerialPortDlg::OnMscomm()
{
MessageBox(_T("data is coming"));
}
执行函数时没有响应,求助啊!

解决方案 »

  1.   

    if(m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(FALSE);m_ctrlComm.SetCommPort(1); //选择com1
    if( !m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(TRUE);//打开串口
    else
    AfxMessageBox("cannot open serial port");m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位m_ctrlComm.SetInputMode(1);   // 以二进制方式检取数据
    m_ctrlComm.SetRThreshold(1);
    //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
    m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
    m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据