主题 : 串口通信程序问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 40393
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
综合积分: 4 分
注册时间: 2011-03-18
最后登录: 2011-10-18
楼主  发表于: 2011-10-18 14:28

 串口通信程序问题

管理提醒: 本帖被 xoom 从 WinCE技术交流区 移动到本区(2011-10-18)
    串口通信问题:我在TE6410上做了一个串口调试程序,当PC向TE6410发送ABC时,接收正常,当TE6410向PC发送111111之后,再由PC向他发送ABC时接收到的却是ABC111具体接收程序如下:/定义串口接收数据函数类型
void CALLBACK CSerialSampleDlg::OnSerialRead(void * pOwner,BYTE* buf,DWORD bufLen)
{
BYTE *pRecvBuf = NULL; //接收缓冲区
//得到父对象指针
CSerialSampleDlg* pThis = (CSerialSampleDlg*)pOwner;
//将接收的缓冲区拷贝到pRecvBuf种
pRecvBuf = new BYTE[bufLen];
CopyMemory(pRecvBuf,buf,bufLen);

//发送异步消息,表示收到串口数据,消息处理完,应释放内存
pThis->PostMessage(WM_RECV_SERIAL_DATA,WPARAM(pRecvBuf),bufLen);

}

// 串口接收数据处理函数
LONG CSerialSampleDlg::OnRecvSerialData(WPARAM wParam,LPARAM lParam)
{
CString strOldRecv = L"";
CString strRecv = L"";
//串口接收到的BUF
CHAR * pBuf = (CHAR*)wParam;
//串口接收到的BUF长度
DWORD dwBufLen = lParam;

//接收框
CEdit *pEdtRecvMsg = (CEdit*)GetDlgItem(IDC_EDT_RECV);
ASSERT(pEdtRecvMsg != NULL);

//得到接收框中的历史文本
pEdtRecvMsg->GetWindowTextW(strOldRecv);

//
    strRecv = CString(pBuf);
//将新接收到的文本添加到接收框中
strOldRecv = strOldRecv +L"\r\n"+strRecv;
pEdtRecvMsg->SetWindowTextW(strOldRecv);

//释放内存
delete[] pBuf;
pBuf = NULL;
return 0;
}

单步执行时,只要TE6410向PC机发送111111之后,pRecvBuf在没有执行CopyMemory(pRecvBuf,buf,bufLen);
语句前的数据就是111111