




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
串口通信的基本步驟(1)通過(guò)CreateFile("COMx:“,…)打開(kāi)串口(2)通過(guò)配置DCB結(jié)構(gòu)體和SetConmiState函數(shù),設(shè)置串II的參數(shù)。(3)通過(guò)ReadFile()fnWnteFile讀寫串IIWindows串口通信實(shí)例封裝了一個(gè)串口通信的C++類CSeriab通過(guò)CSerial類的OpenSuiialPortO可以打開(kāi)一個(gè)串口,串口打開(kāi)后后自動(dòng)新建線程讀取串II數(shù)據(jù),并通過(guò)MessageBox簡(jiǎn)單的顯示出數(shù)據(jù)。通過(guò)CSenal類的SendData()方法可以向串口發(fā)送數(shù)據(jù)。主函數(shù)中,新建了一個(gè)CSenal類對(duì)象,打開(kāi)串II2,然后簡(jiǎn)單的通過(guò)一個(gè)消息框循環(huán)來(lái)控制向串口不斷的發(fā)送數(shù)據(jù)。程序的效果圖如下:使用虛擬串口工具虛擬出串口對(duì)COM2和CONS,本實(shí)例程序讀寫COM2,使用串II調(diào)試助手打開(kāi)COM3。->在“是否向串II發(fā)送數(shù)據(jù)”消息框中,點(diǎn)擊”是(Y)”會(huì)向串口發(fā)送一條"Thisisaexample”數(shù)據(jù)。如圖,在串口調(diào)試助手中收到該數(shù)據(jù)包->在串口調(diào)試助手中,手動(dòng)發(fā)送"jarvischu",程序會(huì)讀取到該數(shù)據(jù)并彈出消息框顯示。源碼如卜.:Serial.h#piagniaonce#includeclassCSerial{public:CSerial(void);-CSerial(void);〃打開(kāi)串口BOOLOpenSenalPoil(TCHAR*port,UINTbaud_iate.BYTEdate_bits,BYTEstop_bit,BYTEpanty=NOPARITY):〃發(fā)送數(shù)據(jù)BOOLSendData(char*data,intlen);public:HANDLEmJiConun;};Serial.cpp#includenStdAfx.hH#include"Serial.h"#iiiclude<process.h>typedefunsigned(_stdcall*PTHREAD_START)(void*);CSerial::CSerial(void)mhConun=INVALIDHANDLEVALUE;}CSerial:>CSerial(void){if(mJiConmi?=INVALID.HANDLE.VALUE)CloseHaiidle(mJiCoiiun);}}/*****木************木*******************木*木**********************************木******************功能:讀串II線程回調(diào)函數(shù)*描述:收到數(shù)據(jù)后,簡(jiǎn)單的顯示出來(lái)*******木****木**************木*木**********************************木***************************/DWordWINAPIConmiPioc(LPVOIDIpPaiain)CSeiial*pSerial=(CSeiial*)lpPaiam;//〃清空串口PurgeCoiniu(pSenal->mJiConiiii,PURGE_RXCLEARjPURGE_TXCLEAR);charbufI512];DWORDdwRead;while(pSenal->mJiConmi?=INVALID_HANDLE_VALUE)BOOLbReadOK=ReadFile(pSenal->m_hCoinin,buf,5125&dwRead.NULL);if(bReadOK&&(dwRead>0)){buf{dwRead]=W;MessageBoxA(NULL,bufJ串口收到數(shù)據(jù)”}}return0;}產(chǎn)*******************************************************************************************功能:打開(kāi)串口*port:串口號(hào),如_T(”COM1:")*baud_rate;?特率*date_bits:數(shù)據(jù)位(有效范闈4?8)*stop_bit:停止位*parity:奇偶校驗(yàn)。默認(rèn)為無(wú)校驗(yàn)。NOPARITY0;ODDPARITY1;EVENPARITY2;MARKPARITY3;Sp/^cEPARITY4********************************************************************************************/BOOLCSeiial::OpenSerialPort(TCHAR*port,UINTbaud_rate.BYTEdate_bits,BYTEstop_bit.BYTEpolity)(〃打 開(kāi) 串 口mJiConuii=CreateFile(poil.GENERIC_READ|GENERIC^T<ITE,O.NULL.OPEN__EXISTINQ0.NULL);〃獨(dú)占方式打開(kāi)串口TCHARerr[512];if(m_hComm==INVALID_HANDLE_VALUE)(_stpnntf(eir,_T("打開(kāi)串口%s失敗,請(qǐng)查看該串II是否已被占用"),port);MessageBox(NULL,ew,_T("提示,)MB_OK);returnFALSE;}〃_MessageBox(NULL,_T("打開(kāi)成功"),_T("提示,)MBJDK);〃獲取串口默認(rèn)配置DCBdeb;if(!GetConunState(m_hCoinm,&dcb)){_MessageBox(NULL,_T(”獲取串口當(dāng)前屬性參數(shù)失敗")「T("提示)MB_OK);}〃配置串「I參數(shù)dcb.BaudRate=baud_rate;〃波特率dcb.fBiiiaiy=TRUE;〃二進(jìn)制模式。必須為TRUEdcb.ByteSize=date.bits;〃數(shù)據(jù)位。范圍4-8dcb.StopBits=ONESTOPBIT;〃停止位if(paiity==NOPARITY)(dcb.fPaiity=FALSE;〃奇偶校驗(yàn)。無(wú)奇偶校驗(yàn)dcb.Parity=parity;〃校驗(yàn)?zāi)J?。無(wú)奇偶校驗(yàn))Else(dcb.fPaiity=TRUE;〃奇偶校驗(yàn)。dcb.Parity=parity;〃校驗(yàn)?zāi)J?。無(wú)奇偶校驗(yàn)}dcb.fOutxCtsFlow=FALSE;//CTS線上的硬件握手dcb.fOutxDsrFlow=FALSE;//DST線上的硬件握手dcb.fDuControl=DTRCONTROLENABLE;//DTR控制dcb.fDsrSensitivity=FALSE;dcb.fTXContmueOnXoff=FALSE;//dcb.fOutX=FALSE;〃是否使用XON/XOFF協(xié)議dcb.flnX=FALSE;〃是否使用XONZXOFF協(xié)議dcb.fEnorChai-=FALSE;〃是否使用發(fā)送錯(cuò)誤協(xié)議dcb.fNull=FALSE;〃停用nullstiippmgdcb.fRtsControl=RTS.CONTROL.ENABLE;//dcb.fAboitOiiEiTor=FALSE;//串口發(fā)送錯(cuò)誤,并不終止串I1讀寫〃設(shè)置串口參數(shù)if(!SetCommState(mJiConun,&dcb)){MessageBox(NULL,_T(”設(shè)置串II參數(shù)失敗)_T("提示)MB_OK);returnFALSE;〃設(shè)置串口事件SetConmiMask(mJiConmi.EV_RXCHAR);//在緩存中有字符時(shí)產(chǎn)生事件SetupConun(m_hComin.16384,16384);〃設(shè)置串口讀寫時(shí)間COMMTIMEOUTSConunTiineOuts;GetConmiTmieouts(m_hCoinin.&ConmiTmieOuts);ConmiTimeOuts.ReadniteivalTuneout=MAXDWORD;ConimTimeOuts.ReadTotalTuneoutMultiplier=0;CommTimeOuts.ReadTotalTuneoutConstaiit=0;CommTimeOuts.WriteTotalTuneoutMultipliei-=10;CommTimeOuts.WriteTotalTuneoutConstaiit=1000;ifi(!SetConiinTimeouts(mJiCoiiiin,&ConmiTuiieOuts)){_MessageBox(NULL,_T("設(shè)置串口時(shí)間失敗”),_T("提示)returnFALSE;)〃創(chuàng)建線程,讀取數(shù)據(jù)HANDLEhReadCominTluead=(HANDLE)_begiiithieadex(NULL,O.(PTHREAD_START)ConmiProc.(LPVOID)thisQNULL);leturnTRUE;}產(chǎn)******************************************************************************************* *功能:通過(guò)串口發(fā)送一條數(shù)據(jù)********************************************************************************************/BOOLCSerial::SendData(char*len)(if(m_hComm==INVALID_HANDLE_VALUE){_MessageBox(NULL,_T(H$口未打開(kāi)"),_T("提示)MB_OK);leturnFALSE;)〃清空串口PurgeConun(m_hCoiiun.PURGE_RXCLEAR|PURGE_TXCLEAR);〃寫串口DWORDdwWnte=0;DWORDdwRet=WiiteFile(m_hComm,data,len,&dwWHte,NULL);〃清空串口PiugeCoiniu(mJiConmi,PURGE_RXCLEAR|PURGE_TXCLEAR);if(!dwRet){_MessaguBox(NULL._T("發(fā)送數(shù)據(jù)失敗)_T("提示"),MBJDK);leturnFALSE;}leturnTRUE;)主程序ManipulateCom.cpp#include<v/indov;s.h>#includenSerial.hH#include<string.h>lilt aigc,_TCHAR*argv[])(CSerialserial;serial.Ope
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 哈爾濱醫(yī)科大學(xué)《書畫裝裱》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東工程職業(yè)技術(shù)學(xué)院《工程招投標(biāo)與概預(yù)算》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇航運(yùn)職業(yè)技術(shù)學(xué)院《中學(xué)語(yǔ)文教學(xué)設(shè)計(jì)與技能訓(xùn)練(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江司法警官職業(yè)學(xué)院《模擬電子技術(shù)課程設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東司法警官職業(yè)學(xué)院《數(shù)字特效合成》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津工藝美術(shù)職業(yè)學(xué)院《衛(wèi)生檢驗(yàn)綜合技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 東莞職業(yè)技術(shù)學(xué)院《計(jì)算機(jī)與操作系統(tǒng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢工程科技學(xué)院《外國(guó)文學(xué)名篇》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025三年級(jí)湘教版語(yǔ)文下學(xué)期期末知識(shí)點(diǎn)歸納復(fù)習(xí)周末練習(xí)單
- PROMIS-評(píng)分量表-使用版
- 軟壓光機(jī)計(jì)算說(shuō)明
- 森林防火安全責(zé)任書(施工隊(duì)用)
- 《汽車性能評(píng)價(jià)與選購(gòu)》課程設(shè)計(jì)
- 35kV絕緣導(dǎo)線門型直線桿
- 水庫(kù)應(yīng)急搶險(xiǎn)與典型案例分析
- 49式武當(dāng)太極劍動(dòng)作方位
- 工程成本分析報(bào)告(新)
- 國(guó)際學(xué)術(shù)會(huì)議海報(bào)模板16-academic conference poster model
- 經(jīng)典誦讀比賽評(píng)分標(biāo)準(zhǔn)【精選文檔】
- 高值耗材參考目錄
- 步兵戰(zhàn)斗動(dòng)作
評(píng)論
0/150
提交評(píng)論