6184|10

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问一个串口通信(gps)乱码问题 [复制链接]

我现在做毕设 简单的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;
}
请高手指教
怎么处理上边的两端两段代码使显示出正确的数据
谢谢!
请给出修改后的完整代码



最新回复

先把串口调试通,再调试GPS。否则出现错误,都不知道是哪个出错的。 一般串口乱码,就是两端设置不匹配,还有就是Unicode与ASCII的问题。  详情 回复 发表于 2007-12-14 18:22
点赞 关注

回复
举报

86

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
gps发送的数据应该是ASCII码的吧,你用“wcstombs”函数把收到的ASCII字符串转换成UINCODE字符串然后再发给窗口。
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
既然是串口,那么就该找串口之类的例子, 我想网上这样的例子不少吧.

1. 串口是一个字节一个字节接收的 跟UINCODE没有什么区别
2. 所用的串口操作函数应该是在一个线程里操作才是合适的.
3. 任何通信都讲究的误码率,你这通信 即没有校验码 也没有结束标记,感觉就会出现乱码.
4. 你这样两个两个字节收,出来乱码也是很正常的, 例如 一个汉字 你收到前半个字节, 那么显示出来的结果肯定是乱码
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
我现在做毕设   简单的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;
}
请高手指教
怎么处理上边的两端两段代码使显示出正确的数据
谢谢!
请给出修改后的完整代码
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
不明白的是gps数据怎么会是unicode
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
GPS数据不是UNICODE
就是ASCII码
Buffer要用BYTE[]
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 
gps数据不是unicode。

乱码,一般是波特率不对……
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
2楼所言即是

你可以先试一个一个的传送ASCII码,接收、处理、显示
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
首先你要弄清楚是接收到的数据就是乱码还是显示的是乱码?

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

WPARAM  能直接转成cstring吗?

cstring tmp = cstring((char*)ch);
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
要是接收到的就是乱码,请调整一下两边设备的波特率
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
先把串口调试通,再调试GPS。否则出现错误,都不知道是哪个出错的。
一般串口乱码,就是两端设置不匹配,还有就是Unicode与ASCII的问题。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表