我就按他书上的第一个程序输入,编译连接都没问题,但是用串口助手来调试,发现编的窗口只能发送,不能接受,为什么呢?谢谢!初始化串口如下:m_ctrlComm.SetCommPort(1);//选择端口1
    m_ctrlComm.SetSettings("4800,N,8,1");//波特率,校验位
    m_ctrlComm.SetInputMode(1);//设置接收数据模式是二进制
    m_ctrlComm.SetRThreshold(1);//有字符产生响应事件
    m_ctrlComm.SetInBufferCount(0);//清空接收缓冲区
    m_ctrlComm.SetInputLen(1);//一次从接收缓冲区读取一个字节
    m_ctrlComm.SetPortOpen(TRUE);//打开串口
事件消息处理: // TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len ,k;
BYTE rxdata[2048];//设置为byte数组
CString strtemp;
if (m_ctrlComm.GetCommEvent()==2)  事件值为2表示接受缓冲区有字符
{
variant_inp=m_ctrlComm.GetInput();读缓冲区
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
m_strEditRXData2+=strtemp;
}
}
UpdateData(FALSE);
}窗口内容很简单就一个接受界面,一个发送界面和一个发送按钮。

解决方案 »

  1.   

    m_ctrlComm.SetSettings("4800,N,8,1");//波特率两边一样么
    m_ctrlComm.GetInput();//这句加到初始化的最后一句
    先试试吧
      

  2.   

    初始化串口如下: m_ctrlComm.SetCommPort(1);选择端口1 m_ctrlComm.SetInputMode(1);设置接收数据模式是二进制 m_ctrlComm.SetInBufferSize(1024);
    m_ctrlComm.SetOutBufferSize(512);
    m_ctrlComm.SetSettings("9600,n,8,1"); if (!m_ctrlComm.GetPortOpen())
            m_ctrlComm.SetPortOpen(TRUE);
            m_ctrlComm.SetRThreshold(1);
             m_ctrlComm.SetInputLen(0);
         m_ctrlComm.GetInput();
    不好意思刚才把初始化程序粘贴错了,这次是书上的程序,运行还是不行
      

  3.   

    OnComm()中单步调试
    看有没有进入if (m_ctrlComm.GetCommEvent()==2)
      

  4.   

    没有进入if (m_ctrlComm.GetCommEvent()==2)
    ,怎么回事呢,明明按书上写的?