waterml930 2016-06-22 12:59 采纳率: 0%
浏览 1557

求助:VC++串口接收数据问题

1.首先是打开串口,打开成功发送握手命令如下:

void CMainFrame::OnMenuconnectbox()
{
    // TODO: 在此添加命令处理程序代码
    BOOL bRet = m_serial.Open(GetSafeHwnd(),WM_COMM_MESSAGE,nCom,dwBaudRate,byByteSize,byParity,byStopBits);
    if(bRet)
    {
        //ShowMessage("成功打开串口!");
        m_wndOutput.m_wndOutputBuild.AddString(_T("成功打开串口!"));
        unsigned char szData[1]={0x7e};//发送握手命令
        m_serial.SendData(szData,1);
    }
    else
    {
        //ShowMessage("打开串口失败!");
        m_wndOutput.m_wndOutputBuild.AddString(_T("打开串口失败!"));
    }
} 

2、在串口消息里收到判断回复,握手成功后发送数据下载命令,上位机接到下载命令后开始发送数据,每次发送2048个字节,循环发送2M数据,消息响应函数如下:


    LRESULT CMainFrame::OnCommMessage(WPARAM wParam,LPARAM lParam)
{
    m_wait = 0;
    int len=128;
    static unsigned char szData[2048];

    CFile * pFile;

    //  创建数据保存文件

    switch(wParam)
    {
    case MSG_READ:
        {
        //  unsigned int pp = m_serial.ReadData(szData,len);
            if(m_serial.ReadData(szData,len))
            {
                //ShowMessage(CString(szData));
                int pp = sizeof(szData);
                CString str,str1;
                CString strForder;
                str.Format("%0x",szData[0]);
                f.Write(szData,len);
                m_wndOutput.m_wndOutputBuild.AddString(str);
                if (szData[0] == 0x7f/*0x5b*/)//握手命令
                {
                    m_comflag = true;
                    m_wndOutput.m_wndOutputBuild.AddString("串口通讯握手成功!");
                unsigned char pSend[1]={0x76};//发送握手命令
              m_serial.SendData(pSend,1);

                    //写入刚才读取的文件
                    FILE *pFileOut=fopen("C:\\2.jpg","wb");
                    fwrite(pBuf,1,len,pFileOut);
                    fclose(pFileOut);
                    free(pBuf); //释放


                }


            }
        }
        break;
    case MSG_WRITE:
        {
            unsigned char *p=(unsigned char*)lParam;
            CString str/* = CString(p)*/;
            str.Format("%0x",*p);
            m_wndOutput.m_wndOutputBuild.AddString(str);
            Sleep(500);
        }
        break;
    default:
        {
        }
        break;
    }
    return 0L;
}

现在的问题是握手命令和下载命令都可以正常收到,但是对方收到下载命令后发送的数据却收不到,并且断点跟踪OnCommMessage(WPARAM wParam,LPARAM lParam)并没有进入响应更新缓冲区,求助各位指教!

  • 写回答

1条回答 默认 最新

  • devmiao 2016-06-22 14:26
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算