请问一个串口通信(gps)乱码问题

treetree600   2007-12-12 22:32 楼主
我现在做毕设 简单的gps数据接收用的是串口rs232。接收到的数据是乱码
请高手执指教!谢谢
我写的代码如下
redbuff()//读取串口数据的函数
{

CHAR  *readBuff=NULL;//接收缓冲区
       
ReadFile(ceSeries->m_hComm,readBuff,2,actualReadLen,0);
                if(actualReadLen>0)//我的意思是unicode每个字符占两个字节吗,所以每次接收两个字符
                {
                         ::SendMessage(ceSeries->m_hWnd,WM_COMM_RXCHAR,(WPARAM)readBuff,(LPARAM) ceSeries->portNo);
                }//接受到字符后向窗口发送消息

}

LONG CGpsDlg::OnCommunication(WPARAM ch,LPARAM port)//处理接受到的数据的函数 这里的参数ch就是上边传过来的readbuff

{
  m_strReceived+=(cstring*)ch;//这里的m_strReceived以定义为类的成员变量,是cstring类型的
  
m_strReceived+=_T("\r\n");
  SetDlgItemText(IDC_EDIT2,m_strReceived);//在文本框里显示字符
  return 0;
}
请高手指教
怎么处理上边的两端两段代码使显示出正确的数据
谢谢!
请给出修改后的完整代码



回复评论 (10)

gps发送的数据应该是ASCII码的吧,你用“wcstombs”函数把收到的ASCII字符串转换成UINCODE字符串然后再发给窗口。
点赞  2007-12-12 23:07
既然是串口,那么就该找串口之类的例子, 我想网上这样的例子不少吧.

1. 串口是一个字节一个字节接收的 跟UINCODE没有什么区别
2. 所用的串口操作函数应该是在一个线程里操作才是合适的.
3. 任何通信都讲究的误码率,你这通信 即没有校验码 也没有结束标记,感觉就会出现乱码.
4. 你这样两个两个字节收,出来乱码也是很正常的, 例如 一个汉字 你收到前半个字节, 那么显示出来的结果肯定是乱码
点赞  2007-12-13 08:27
我现在做毕设   简单的gps数据接收用的是串口rs232。接收到的数据是乱码
请高手执指教!谢谢
我写的代码如下
开始提问的时候我写错了,我处乱码的实际程序是这样的
redbuff()//读取串口数据的函数
{

TCHAR  *readBuff=NULL;;//接收缓冲区  

  ReadFile(ceSeries-> m_hComm,readBuff,2,actualReadLen,0);
if(actualReadLen> 0)//我的意思是unicode每个字符占两个字节吗,所以每次接收两个字符
{
  ::SendMessage(ceSeries-> m_hWnd,WM_COMM_RXCHAR,(WPARAM)readBuff,(LPARAM)   ceSeries-> portNo);
}//接受到字符后向窗口发送消息

}

LONG   CGpsDlg::OnCommunication(WPARAM   ch,LPARAM   port)//处理接受到的数据的函数   这里的参数ch就是上边传过来的readbuff

{
    m_strReceived+=(cstring*)ch;//这里的m_strReceived以定义为类的成员变量,是cstring类型的
   
  m_strReceived+=_T("\r\n");
    SetDlgItemText(IDC_EDIT2,m_strReceived);//在文本框里显示字符
    return   0;
}
请高手指教
怎么处理上边的两端两段代码使显示出正确的数据
谢谢!
请给出修改后的完整代码
点赞  2007-12-13 10:11
不明白的是gps数据怎么会是unicode
点赞  2007-12-13 10:16
GPS数据不是UNICODE
就是ASCII码
Buffer要用BYTE[]
点赞  2007-12-13 10:26
gps数据不是unicode。

乱码,一般是波特率不对……
点赞  2007-12-13 10:49
2楼所言即是

你可以先试一个一个的传送ASCII码,接收、处理、显示
点赞  2007-12-13 11:58
首先你要弄清楚是接收到的数据就是乱码还是显示的是乱码?

奇怪的是你为什么在redbuff里要2个2个的接收,一次把缓冲区的数据都读出来就可以拉。

WPARAM  能直接转成cstring吗?

cstring tmp = cstring((char*)ch);
点赞  2007-12-13 13:33
要是接收到的就是乱码,请调整一下两边设备的波特率
点赞  2007-12-13 13:34
先把串口调试通,再调试GPS。否则出现错误,都不知道是哪个出错的。
一般串口乱码,就是两端设置不匹配,还有就是Unicode与ASCII的问题。
点赞  2007-12-14 18:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复