日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Wince串口通信

 bayji 2012-03-03

Wince串口通信

(2011-01-24 10:08:39)
 
最近在做一個(gè)導(dǎo)航儀的檢測(cè)工具,檢測(cè)搜星時(shí)間和經(jīng)緯度、dB值的一個(gè)小工具,第一次用VC++做串口通訊的程序,花了不少時(shí)間。昨天終于把程序調(diào)完了,今天來理一下,做一個(gè)總結(jié),免得下一次又忘記。
首先是串口的初始化,因?yàn)閹煾嫡f不要用MScomm控件,所以就用API函數(shù)進(jìn)行初始化。基本的方法就是創(chuàng)建文件的形式進(jìn)行初始化:
DCB dcb;
COMMTIMEOUTS TimeOuts;
hCom=CreateFile(L"COM1:",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
然后獲取串口狀態(tài),將狀態(tài)百村在dcb中:
GetCommState(hCom,&dcb);
接下來就是根據(jù)自己的硬件設(shè)置進(jìn)行串口各個(gè)參數(shù)的設(shè)置:
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);
然后要進(jìn)行超時(shí)的設(shè)置:
    GetCommTimeouts(hCom,&TimeOuts);
    TimeOuts.ReadIntervalTimeout=MAXDWORD;    //接收兩個(gè)連續(xù)字節(jié)最大時(shí)間間隔ms
    TimeOuts.ReadTotalTimeoutMultiplier=MAXDWORD;    //接收每?jī)蓚€(gè)字節(jié)的平均允許時(shí)間
    TimeOuts.ReadTotalTimeoutConstant=10000;   
    SetCommTimeouts(hCom,&TimeOuts);
最后要設(shè)置輸入輸出緩沖區(qū)的初始化:
    SetupComm(hCom,1024,1024);    //設(shè)置輸入輸出緩沖區(qū)
    PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);//清空緩沖區(qū)
————————————————————————————————————————————————

在讀取串口緩沖區(qū)的時(shí)候,也是用readfile函數(shù),和文件操作一樣的。

————————————————————————————————————————
我的程序主要功能還是對(duì)GPS信息的處理,要提取經(jīng)緯度、漂移值、搜星時(shí)間等。
搜星時(shí)間指的是冷啟動(dòng)的時(shí)候GPS接收器搜到4顆星所用的時(shí)間,本機(jī)器標(biāo)準(zhǔn)是42秒之內(nèi),這樣就要對(duì)GPRMC和GPGSV的字符串進(jìn)行信息的提取。字符的處理一直是我和發(fā)愁的事情,這一次并沒有用什么API庫(kù)函數(shù),基本上都是循環(huán)一個(gè)字符一個(gè)字符來處理的。根據(jù)逗號(hào)計(jì)數(shù)器來提取想要的數(shù)據(jù),比較重要的是要設(shè)置一些標(biāo)志變量,而且這些標(biāo)志的賦值一定要在適當(dāng)?shù)奈恢?。而且逗?hào)計(jì)數(shù)器一定要在字符串開始和結(jié)束的時(shí)候清零。
——————————————————————————————————————————
從緩沖區(qū)提取出來的字節(jié)型數(shù)據(jù),判斷的時(shí)候可以用相應(yīng)的十六進(jìn)制或是本身的字符,例如判斷是否是逗號(hào)時(shí)可以用以下兩種方法:if(buffer[i]==',')或是if(buffer[i]==0x2c)。在輸出的時(shí)候,如果要直接輸出接收的字符串,可以將每一個(gè)字節(jié)轉(zhuǎn)化為CString類型,然后將它們加起來。例如要提取緯度,在第3個(gè)逗號(hào)時(shí)用Format函數(shù)將buffer[i+1]轉(zhuǎn)化并賦值給已經(jīng)定義好的CString變量。通過循環(huán)處理將9位緯度字節(jié)相加便可得到實(shí)際的緯度信息。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多