




全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
VC+串口編程主要API詳解該文檔是本人在剛剛接觸到VC+下的串口編程時,總結(jié)歸納的一些主要的API函數(shù),可以幫助初學(xué)者更好的理解串口編程的方法。1. 打開串口HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);參數(shù):lpFileName:將要打開的串口邏輯名,如“COM1”; dwDesiredAccess:指定串口訪問的類型,可以是讀取、寫入或二者并列; dwShareMode:指定共享屬性,由于串口不能共享,該參數(shù)必須置為0; lpSecurityAttributes:引用安全性屬性結(jié)構(gòu),缺省值為NULL; dwCreationDistribution:創(chuàng)建標(biāo)志,對串口操作該參數(shù)必須置為OPEN_EXISTING; dwFlagsAndAttributes:屬性描述,用于指定該串口是否進(jìn)行異步操作,該值為FILE_FLAG_OVERLAPPED,表示使用異步的I/O;該值為0,表示同步I/O操作,本工程采用異步方式;hTemplateFile:對串口而言該參數(shù)必須置為NULL;2. 獲取串口設(shè)備控制塊DCBBOOL GetCommState( HANDLE hFile, /標(biāo)識通訊端口的句柄,由CreateFile()函數(shù)返回的句柄 LPDCB lpDCB /指向一個設(shè)備控制塊(DCB結(jié)構(gòu))的指針 );3. 設(shè)置串口設(shè)備控制塊DCBBOOL SetCommState( HANDLE hFile, /標(biāo)識通訊端口的句柄,由CreateFile()函數(shù)返回的句柄 LPDCB lpDCB /指向一個設(shè)備控制塊(DCB結(jié)構(gòu))的指針 );4. 設(shè)置串口輸入輸出緩沖區(qū)大小BOOL SetupComm( HANDLE hFile,/ 通信設(shè)備的句柄 DWORD dwInQueue,/ 輸入緩沖區(qū)的大?。ㄗ止?jié)數(shù)) DWORD dwOutQueue/ 輸出緩沖區(qū)的大?。ㄗ止?jié)數(shù)) );5. 清空讀寫緩沖區(qū)內(nèi)容BOOL PurgeComm( HANDLE hFile,/串口句柄 DWORD dwFlags/ 需要完成的操作 );參數(shù)dwFlags指定要完成的操作,可以是下列值的組合: PURGE_TXABORT 中斷所有寫操作并立即返回,即使寫操作還沒有完成。PURGE_RXABORT 中斷所有讀操作并立即返回,即使讀操作還沒有完成。PURGE_TXCLEAR 清除輸出緩沖區(qū)PURGE_RXCLEAR 清除輸入緩沖區(qū)6. 超時時間獲取與設(shè)置BOOL GetCommTimeouts(/獲取串口超時設(shè)置 HANDLE hFile,/標(biāo)識通信設(shè)備,CreateFile()函數(shù)返回該句柄; LPCOMMTIMEOUTS lpCommTimeouts/指向COMMTIMEOUTS結(jié)構(gòu)。);BOOL SetCommTimeouts(/設(shè)置串口超時時間 HANDLE hFile,/標(biāo)識通信設(shè)備,CreateFile()函數(shù)返回該句柄; LPCOMMTIMEOUTS lpCommTimeouts/指向COMMTIMEOUTS結(jié)構(gòu)。);COMMTIMEOUTS結(jié)構(gòu)的定義為: typedef struct _COMMTIMEOUTS DWORD ReadIntervalTimeout; /讀間隔超時,單位ms DWORD ReadTotalTimeoutMultiplier; /讀時間系數(shù),單位ms DWORD ReadTotalTimeoutConstant; /讀時間常量,單位ms DWORD WriteTotalTimeoutMultiplier; / 寫時間系數(shù),單位ms DWORD WriteTotalTimeoutConstant; /寫時間常量,單位ms COMMTIMEOUTS,*LPCOMMTIMEOUTS;參數(shù)詳解:ReadIntervalTimeout:以ms為單位指定通信線路上兩個字符到達(dá)之間的最大時間間隔。 在ReadFile()操作期間,從接收到第一個字符時開始計時。如果任意兩個字符到達(dá)之間的時間間隔超過這個最大值,則ReadFile()操作完成,并返回緩沖數(shù)據(jù)。如果被置為0,則表示不使用間隔超時。Windows使用下面的式子計算總超時時間:ReadTotalTimeout = ( ReadTotalTimeoutMultiplier*bytes_to_read )+ReadTotalTimeoutConstant;WriteTotalTimeout= ( WriteTotalTimeoutMultiplier*bytes_to_write )+WriteTotalTimeoutConstant;超時有兩種類型。第一種類型叫區(qū)間超時(intervaltimeout),它僅適應(yīng)于從端口讀取數(shù)據(jù)它指定在讀取兩個字符之間要經(jīng)歷多長時間。接收一個字符時,Windows就啟動一個內(nèi)部計時器。在下一個字符到達(dá)之前,如果定時器超過了區(qū)間超時設(shè)定時間,讀函數(shù)就會放棄。第二種類型的超時叫做總超時( total timeout),它適于讀和寫端口。當(dāng)讀或?qū)懱囟ㄗ止?jié)數(shù)需要的總時間超過某一閾值時,該超時即被觸發(fā)。當(dāng)超時的常數(shù)和系數(shù)都設(shè)置為0,則沒有總超時時間。如果讀間隔超時被設(shè)置成MAXDWORD并且讀時間系數(shù)和讀時間常量都為0,那么在讀一次輸入緩沖區(qū)的內(nèi)容后讀操作就立即返回而不管是否讀入了要求的字符。在用異步方式讀寫串口時,雖然ReadFile和WriteFile在完成操作以前就可能返回,但超時仍然是起作用的。在這種情況下,超時規(guī)定的是操作的完成時間,而不是ReadFile和WriteFile的返回時間。7. 關(guān)閉串口BOOL CloseHandle( HANDLE hObject; /串口句柄);8. 讀寫串口BOOL ReadFile( HANDLE hFile,/串口的句柄 LPVOID lpBuffer,/ 讀入的數(shù)據(jù)存儲的地址, DWORD nNumberOfBytesToRead, / 要讀入的數(shù)據(jù)的字節(jié)數(shù) LPDWORD lpNumberOfBytesRead, / 指向一個DWORD數(shù)值,該數(shù)值返回讀操作實(shí)際讀入的字節(jié)數(shù) LPOVERLAPPED lpOverlapped / 異步操作時,該參數(shù)指向一個OVERLAPPED結(jié)構(gòu),同步操作時,該參數(shù)為NULL。 );BOOL WriteFile( HANDLE hFile,/串口的句柄 LPCVOID lpBuffer,/ 寫入的數(shù)據(jù)存儲的地址, DWORD nNumberOfBytesToWrite, /要寫入的數(shù)據(jù)的字節(jié)數(shù) LPDWORD lpNumberOfBytesWritten, / 指向指向一個DWORD數(shù)值,該數(shù)值返回實(shí)際寫入的字節(jié)數(shù) LPOVERLAPPED lpOverlapped / 重疊操作時,該參數(shù)指向一個OVERLAPPED結(jié)構(gòu), 同步操作時,該參數(shù)為NULL。 );在同步執(zhí)行時,函數(shù)直到操作完成后才返回。這意味著同步執(zhí)行時線程會被阻塞,從而導(dǎo)致效率下降。在異步執(zhí)行時,即使操作還未完成,這兩個函數(shù)也會立即返回,費(fèi)時的I/O操作在后臺進(jìn)行。如果操作成功,這兩個函數(shù)都返回TRUE。需要注意的是,當(dāng)ReadFile和WriteFile返回FALSE時,不一定就是操作失敗,應(yīng)該調(diào)用GetLastError函數(shù)分析返回的結(jié)果。例如,在異步操作時如果操作還未完成函數(shù)就返回,那么函數(shù)就返回FALSE,而且GetLastError函數(shù)返回ERROR_IO_PENDING。這說明異步操作還未完成。9. 清除錯誤BOOL ClearCommError( HANDLE hFile,/ 串口句柄 LPDWORD lpErrors,/ 指向接收錯誤碼的變量 LPCOMSTAT lpStat/ 指向通訊狀態(tài)緩沖區(qū) );該函數(shù)獲得通信錯誤并報告串口的當(dāng)前狀態(tài),同時,該函數(shù)清除串口的錯誤標(biāo)志以便繼續(xù)輸入、輸出操作。在使用ReadFile 函數(shù)進(jìn)行讀操作前,應(yīng)先使用ClearCommError函數(shù)清除錯誤。參數(shù)lpStat指向一個COMSTAT結(jié)構(gòu),該結(jié)構(gòu)返回串口狀態(tài)信息。 COMSTAT結(jié)構(gòu) COMSTAT結(jié)構(gòu)包含串口的信息,結(jié)構(gòu)定義如下: typedef struct _COMSTAT / cst DWORD fCtsHold : 1; / Tx waiting for CTS signal DWORD fDsrHold : 1; / Tx waiting for DSR signal DWORD fRlsdHold : 1; / Tx waiting for RLSD signal DWORD fXoffHold : 1; / Tx waiting, XOFF char recd DWORD fXoffSent : 1; / Tx waiting, XOFF char sent DWORD fEof : 1; / EOF character sent DWORD fTxim : 1; / character waiting for Tx DWORD fReserved : 25; / reserved DWORD cbInQue; / bytes in input buffer DWORD cbOutQue; / bytes in output buffer COMSTAT, *LPCOMSTAT;10. 設(shè)置通訊端口監(jiān)聽事件BOOL SetCommMask( HANDLE hFile, /標(biāo)識通信端口的句柄 DWORD dwEvtMask /能夠使能的通信事件);通訊端口的事件由dwEvtMask變量來設(shè)置,其可取如下值: EV_BREAK 檢測到輸入為止EV_CTS CTS(清除發(fā)送)信號改變狀態(tài)EV_DSR DSR(數(shù)據(jù)設(shè)置就緒)信號改變狀態(tài)EV_ERR 發(fā)生了線路狀態(tài)錯誤.線路狀態(tài)錯誤為:CE_FRAME(幀錯誤)CE_OVERRUN(接收緩沖區(qū)超限)CE_RXPARITY(奇偶校驗(yàn)錯誤)EV_RING 檢測到振鈴EV_RLSD RLSD (接收線路信號檢測)信號改變狀態(tài)EV_RXCHAR 接收到一個字符,并放入輸入緩沖區(qū)EV_RXFLAG 使用SetCommState()函數(shù)設(shè)置的DCB結(jié)構(gòu)中的等待字符已被傳入輸入緩沖區(qū)中。EV_TXEMPTY 輸出緩沖區(qū)中最后一個字符發(fā)送出去在用SetCommMask指定了有用的事件后,應(yīng)用程序可調(diào)用WaitCommEvent()來等待事件發(fā)生。11. 獲取端口監(jiān)聽事件BOOL GetCommMask( HANDLE hFile, /標(biāo)識通信端口的句柄 LPDWORD lpEvtMask /存儲監(jiān)控的通信事件);12. 等待監(jiān)聽事件發(fā)生BOOL WaitCommEvent(HANDLE hFile, /標(biāo)識通信端口的句柄LPDWORD lpEvtMask, /指向存放事件標(biāo)識變量的指針LPOVERLAPPED lpOverlapped / 指向overlapped結(jié)構(gòu));該函數(shù)調(diào)用成功返回TURE,若失敗則返回FALSE。若
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020年全國生物學(xué)聯(lián)賽加試答案
- 河南省許平汝名校2025屆高三下學(xué)期二模試題 物理 含解析
- 品牌代理運(yùn)營合同協(xié)議
- 榆次二手房買賣合同協(xié)議
- 2025借款合同優(yōu)于租賃合同
- 2025中型建筑承包合同范本
- 哈密供熱合同協(xié)議
- 品牌規(guī)劃咨詢合同協(xié)議
- 四川省南充市2025屆高三下學(xué)期4月三診試題 政治 含解析
- 2025版全面單價合同范本
- 人教版美術(shù)一年級下冊《走進(jìn)舊時光》課件
- 2025-2030中國棒棒糖行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 天津東疆綜合保稅區(qū)管理委員會招聘筆試題庫2025
- 江蘇省南京市江寧區(qū)2024-2025學(xué)年統(tǒng)編版二年級下冊期中考試語文試卷(含答案)
- 鐵路調(diào)車綜合實(shí)訓(xùn)鐵鞋的使用和注意事項(xiàng)課件
- 多模態(tài)自適應(yīng)技術(shù)應(yīng)用于鋼材表面缺陷檢測的研究與分析
- 無人機(jī)配送技術(shù)發(fā)展-全面剖析
- 廣東省江門市2025屆高三下學(xué)期一?;瘜W(xué)試題(原卷版+解析版)
- 2025年春季學(xué)期形勢與政策第二講-中國經(jīng)濟(jì)行穩(wěn)致遠(yuǎn)講稿
- 人教PEP版英語五年級下冊Recycle 1單元教學(xué)設(shè)計(2課時教案)
- 2025年山西焦煤集團(tuán)有限責(zé)任公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論