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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?