6249|15

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WINCE系统串口接收大于0X7F数据出错 [复制链接]

WINCE系统串口接收大于0X7F数据出错:

例如我从PC机器向开发板发送16进制:01 21 34 92 87     

开发板上串口测试程序接收16进制:01 21 34 0fffff92 0fffff87


有点不解~应该是单字节 双字节问题。。

DWORD CPSerialPort::ReadPort(char *data,int length)
{
        BOOL fReadState;
        DWORD dwLength,dwBytesRead;
        int TimeOutCount;

        dwBytesRead=0;
        TimeOutCount=0;
       
        while(m_hComm!=INVALID_HANDLE_VALUE)
        {
                char* buf=new char[length];
                fReadState=ReadFile(m_hComm,data,length,&dwLength,NULL);
                if(!fReadState)
                {
                        break;
                }
                else
                {
                        dwBytesRead+=dwLength;
                        data+=dwLength;                       
                }
                if(dwBytesRead==length)
                {
                        break;
                }
                if(dwLength!=0)
                {
                        TimeOutCount=0;
                }
                else
                {
                        TimeOutCount++;
                        Sleep(5);
                }
                if(TimeOutCount==5)
                {
                        break;
                }
        }
        return dwBytesRead;
}
这个问题?。。应该是从缓冲区读出数据问题吧~~~~呵呵~高手指点下哦。开春第一贴
此帖出自WindowsCE论坛

最新回复

呵呵~~~好的 OK  详情 回复 发表于 2010-2-26 13:02
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不是单双字节的问题,那可能是char与BYTE的问题。
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
串口的配置是什么,特别是数据位的个数?
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
设置的串口数据位是7个bit位吧
此帖出自WindowsCE论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 
char* buf=new char[length]; //buf 分配的内存,每循环一次就分配一次内存,要注意了
data是char *型的,data+=dwLength;//这一句让人费解
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
如果你是ARM平台,建议先用串口调试助手看看。
如果现象是一样的,那可能是驱动的问题。
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
我用友善mni2440 的win ce自带的串口测试程序也有类似情况,不知道有没高手遇到过,怎么解决的?
此帖出自WindowsCE论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

8
 

        PortNo=1;
        BaudRate=3;
        DataBits=8;
        StopBits=ONESTOPBIT;
        Parity=NOPARITY;

        Open=FALSE;
        Receive=FALSE;
        HexDisplay=FALSE;
        HexSend=FALSE;

        m_strDataReceived=_T("");
        m_pSerial=new CPSerialPort();
呵呵~~~~~~改成7难道就OK?呵呵~·
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 5 楼 sunrain_hjb 的回复:
如果你是ARM平台,建议先用串口调试助手看看。
如果现象是一样的,那可能是驱动的问题。


前辈指的“串口调试助手”是指确定好的串口测试软件,先调试,如果可以,说明是我的应用程序问题,如果还是不行,说明是底层驱动类型问题?
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 lightsoure 的回复:
引用 5 楼 sunrain_hjb 的回复:如果你是ARM平台,建议先用串口调试助手看看。如果现象是一样的,那可能是驱动的问题。

前辈指的“串口调试助手”是指确定好的串口测试软件,先调试,如果可以,说明是我的应用程序问题,如果还是不行,说明是底层驱动类型问题?

是这个意思,只能逐一排查了。
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
[url=http://download.eeworld.net/source/870333][/url]
你下载这个试试看,我在很多平台上都用过,应该还是靠谱的。
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

12
 
呵呵~底层驱动没问题,已经解决了~~~~
void CSerialPortDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam)
{
        //处理收到的数据
        int length=(int)lParam;
        char *data=(char*)wParam;
        CString THex(_T(""));

        int i;

        if(length!=0)
        {
                if(HexDisplay)
                {
                        for(i=0;i                         {
                                if(data<16)
                                {
                                        THex.Format(_T("0%X "),data);
                                }
                                else
                                {
                                        THex.Format(_T("%2X "),data);
                                }
                                m_strDataReceived+=THex;
                        }
                }

                else
                {
                        m_strDataReceived=CString(data).Left(length);
                }
                m_strReceive+=m_strDataReceived;
                m_strDataReceived=_T("");
                SetDlgItemText(IDC_RECEIVE,m_strReceive);
                m_CtrlReceive.SetSel(m_strReceive.GetLength(),m_strReceive.GetLength(),FALSE);
        }
}
呵呵~~是这里~你们说是不是呢?哈哈。。
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

13
 
晕~怎么是乱码。。void CSerialPortDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam)
{
        //处理收到的数据
        int length=(int)lParam;
        char *data=(char*)wParam;
        CString THex(_T(""));

        int i;

        if(length!=0)
        {
                if(HexDisplay)
                {
                        for(i=0;i                         {
                                if(data<16)
                                {
                                        THex.Format(_T("0%X "),data);
                                }
                                else
                                {
                                        THex.Format(_T("%2X "),data);
                                }
                                m_strDataReceived+=THex;
                        }
                }
                else
                {
                        m_strDataReceived=CString(data).Left(length);
                }
                m_strReceive+=m_strDataReceived;
                m_strDataReceived=_T("");
                SetDlgItemText(IDC_RECEIVE,m_strReceive);
                m_CtrlReceive.SetSel(m_strReceive.GetLength(),m_strReceive.GetLength(),FALSE);
        }
}
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 1 楼 sunrain_hjb 的回复:
不是单双字节的问题,那可能是char与BYTE的问题。
     如前辈所说~~~~~
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

15
 
问题解决了,要及时结贴哦。
养成一个好习惯...
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
呵呵~~~好的 OK
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
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
快速回复 返回顶部 返回列表