分享

Wince串口通信

 bayji 2012-03-03

Wince串口通信

(2011-01-24 10:08:39)
 
最近在做一个导航仪的检测工具,检测搜星时间和经纬度、dB值的一个小工具,第一次用VC++做串口通讯的程序,花了不少时间。昨天终于把程序调完了,今天来理一下,做一个总结,免得下一次又忘记。
首先是串口的初始化,因为师傅说不要用MScomm控件,所以就用API函数进行初始化。基本的方法就是创建文件的形式进行初始化:
DCB dcb;
COMMTIMEOUTS TimeOuts;
hCom=CreateFile(L"COM1:",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
然后获取串口状态,将状态百村在dcb中:
GetCommState(hCom,&dcb);
接下来就是根据自己的硬件设置进行串口各个参数的设置:
dcb.BaudRate=9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
dcb.fBinary=TRUE;
dcb.fParity=FALSE;
dcb.DCBlength=sizeof(DCB);
SetCommState(hCom,&dcb);
然后要进行超时的设置:
    GetCommTimeouts(hCom,&TimeOuts);
    TimeOuts.ReadIntervalTimeout=MAXDWORD;    //接收两个连续字节最大时间间隔ms
    TimeOuts.ReadTotalTimeoutMultiplier=MAXDWORD;    //接收每两个字节的平均允许时间
    TimeOuts.ReadTotalTimeoutConstant=10000;   
    SetCommTimeouts(hCom,&TimeOuts);
最后要设置输入输出缓冲区的初始化:
    SetupComm(hCom,1024,1024);    //设置输入输出缓冲区
    PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);//清空缓冲区
————————————————————————————————————————————————

在读取串口缓冲区的时候,也是用readfile函数,和文件操作一样的。

————————————————————————————————————————
我的程序主要功能还是对GPS信息的处理,要提取经纬度、漂移值、搜星时间等。
搜星时间指的是冷启动的时候GPS接收器搜到4颗星所用的时间,本机器标准是42秒之内,这样就要对GPRMC和GPGSV的字符串进行信息的提取。字符的处理一直是我和发愁的事情,这一次并没有用什么API库函数,基本上都是循环一个字符一个字符来处理的。根据逗号计数器来提取想要的数据,比较重要的是要设置一些标志变量,而且这些标志的赋值一定要在适当的位置。而且逗号计数器一定要在字符串开始和结束的时候清零。
——————————————————————————————————————————
从缓冲区提取出来的字节型数据,判断的时候可以用相应的十六进制或是本身的字符,例如判断是否是逗号时可以用以下两种方法:if(buffer[i]==',')或是if(buffer[i]==0x2c)。在输出的时候,如果要直接输出接收的字符串,可以将每一个字节转化为CString类型,然后将它们加起来。例如要提取纬度,在第3个逗号时用Format函数将buffer[i+1]转化并赋值给已经定义好的CString变量。通过循环处理将9位纬度字节相加便可得到实际的纬度信息。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多