串口接收时出现乱码

sunnyes2008 2012-07-19 11:32:04
串口接收数据时出现乱码,怎么解决?
发送代码:
VOID CSerial2Dlg::OnSend()
{
// TODO: Add your control notification handler code here
CBitmap bitmap;
CString str;
DWORD dwTrans;
BOOL BWriteStat;
COMSTAT Comstat;
DWORD dwErrorFlages;

m_strSendText.GetWindowText(str);
if(str.IsEmpty())
return;

OVERLAPPED m_osWrite;
memset(&m_osWrite,0,sizeof(OVERLAPPED));
m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);


ClearCommError(hCom,&dwErrorFlages,&Comstat);
BWriteStat = ::WriteFile(hCom,str.GetBuffer(str.GetLength()), str.GetLength(), &dwTrans, &m_osWrite);
if(!BWriteStat)
{
if(GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(m_osWrite.hEvent,1000);

bitmap.LoadBitmap(IDB_NORMAL);
HBITMAP hBitmap = (HBITMAP)bitmap;
m_Sending.SetBitmap(hBitmap);
}
}

GetDlgItem(IDC_DISP)->SetWindowText(str);
Invalidate(FALSE);
AfxMessageBox(str);
}

接收代码:
VOID CSerial2Dlg::OnRecive()
{
// TODO: Add your control notification handler code here

CBitmap bitmap;
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
COMSTAT ComStat;
DWORD dwErrorFlags;

char str[512];
memset(str,0,sizeof(str));
DWORD dwByteRead = 512; //读取的字节数
BOOL bReadStat;

ClearCommError(hCom,&dwErrorFlags,&ComStat);
dwByteRead = min(dwByteRead,(DWORD)ComStat.cbInQue);
bReadStat = ReadFile(hCom,str,dwByteRead,&dwByteRead,&m_osRead);

if(!bReadStat)
{
if(GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(m_osRead.hEvent,2000); //等待读操作完成

bitmap.LoadBitmap(IDB_NORMAL);
HBITMAP hBitmap = (HBITMAP)bitmap;
m_Reciving.SetBitmap(hBitmap);
}
bitmap.LoadBitmap(IDB_INIT);
HBITMAP hBitmap = (HBITMAP)bitmap;
m_Reciving.SetBitmap(hBitmap);

}
PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR);
m_disp += str;
m_disp += "\r\n";
GetDlgItem(IDC_DISP)->SetWindowText(m_disp);
AfxMessageBox(str);

UpdateData(FALSE);

}
...全文
449 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnyes2008 2012-07-19
  • 打赏
  • 举报
回复
串口调试程序试一下?

我是自己写串口通信程序
三条猫 2012-07-19
  • 打赏
  • 举报
回复
用串口调试程序试一下,一步一步排除问题
sunnyes2008 2012-07-19
  • 打赏
  • 举报
回复
搞定,多谢6楼的提醒 ,我用高度助手试了下发现自己没设置参数。
CppCoder 2012-07-19
  • 打赏
  • 举报
回复
sscom32.exe

调试串口挺不错的
sunnyes2008 2012-07-19
  • 打赏
  • 举报
回复
你的意思是要先转成二进制是吗?
hdg3707 2012-07-19
  • 打赏
  • 举报
回复
你先看str接收的数据是不是对方发的,要变成二进制看,不要当成字符类型看,如果是对方发的,那就说明是你显示问题,这就不是问题了.
很可能是接收的对的,就是显示时转换错了
sunnyes2008 2012-07-19
  • 打赏
  • 举报
回复
没人顶我先顶一下

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧