串列埠通訊常用API

2022-03-26 23:34:17 字數 3585 閱讀 4459

1-createfile() 

用途:關閉串列埠 

原型:bool closehandle(handle hobjedt) 

引數說明: 

-hobjedt:串列埠控制代碼 

操作說明:成功關閉串列埠時返回true,否則返回false 

舉例:closehandle(hcomm); 

3-getcommstate()

用途:取得串列埠當前狀態 

原型:bool getcommstate(handle hfile, 

lpdcb lpdcb); 

引數說明: 

-hfile:串列埠控制代碼 

-lpdcb:裝置控制塊(device control block)結構位址。此結構中含有和裝置相關的 

引數。此處是與串列埠相關的引數。由於引數非常多,當需要設定串列埠引數 

時,通常是先取得串列埠的引數結構,修改部分引數後再將引數結構寫入。 

在此僅介紹少數的幾個常用的引數: 

dword baudrate:串列埠波特率 

dword fparity:為1的話啟用奇偶校驗檢查 

dword parity:校驗方式,值0~4分別對應無校驗、奇校驗、偶校驗、校驗 

置位、校驗清零 

dword bytesize:乙個位元組的資料位個數,範圍是5~8 

dword stopbits:停止位個數,0~2分別對應1位、1.5位、2位停止位 

操作舉例:dcb comdcb; //串列埠裝置控制塊 

getcommstate(hcomm,&comdcb); 

4-setcommstate()

用途:設定串列埠狀態,包括常用的更改串口號、波特率、奇偶校驗方式、資料位數等 

原型:bool setcommstate(handle hfile, 

lpdcb lpdcb); 

引數說明: 

-hfile:串列埠控制代碼 

-lpdcb:裝置控制塊(device control block)結構位址。要更改的串列埠引數包含在此結構中。 

操作舉例:dcb comdcb; 

getcommstate(hcomm,&comdcb);//取得當前串列埠狀態 

comdcb.baudrate=9600;//更改為9600bps,該值即為你要修改後的波特率 

setcommstate(hcomm,&comdcb;//將更改後的引數寫入串列埠 

5-writefile()

用途:清除串列埠錯誤或者讀取串列埠現在的狀態 

原型:bool clearcommerror(handle hfile, 

lpdword lperrors, 

lpcomatat lpstat 

); 引數說明: 

-hfile:串列埠控制代碼 

-lperrors:返回錯誤數值,錯誤常數如下: 

1-ce_break:檢測到中斷訊號。意思是說檢測到某個位元組資料缺少合法的停止位。 

2-ce_frame:硬體檢測到幀錯誤。 

3-ce_ioe:通訊裝置發生輸入/輸出錯誤。 

4-ce_mode:設定模式錯誤,或是hfile值錯誤。 

5-ce_overrun:溢位錯誤,緩衝區容量不足,資料將丟失。 

6-ce_rxover:溢位錯誤。 

7-ce_rxparity:硬體檢查到校驗位錯誤。 

8-ce_txfull:傳送緩衝區已滿。 

-lpstat:指向通訊埠狀態的結構變數,原型如下: 

typedef struct _comstatcomstat,*lpcomstat; 

該結構中對我們很重要的只有上面兩個引數,其他的我們可以不用管。 

操作舉例:comstat comstat; 

dword dwerror=0; 

clearcommerror(hcomm,&dwerror,&comstat); 

上式執行完後,comstat.cbinque就是串列埠中當前含有的資料位元組個數,我們利用此 

數值就可以用readfile()函式去讀串列埠中的資料了。

8-purgecomm()

用途:清除串列埠緩衝區 

原型:bool purgecomm(handle hfile, 

dword dwflags 

); 引數說明: 

-hfile:串列埠控制代碼 

-dwflags:指定串列埠執行的動作,由以下引數組成: 

-purge_txabort:停止目前所有的傳輸工作立即返回不管是否完成傳輸動作。 

-purge_rxabort:停止目前所有的讀取工作立即返回不管是否完成讀取動作。 

-purge_txclear:清除傳送緩衝區的所有資料。 

-purge_rxclear:清除接收緩衝區的所有資料。 

操作舉例:purgecomm(hcomm, purge_rxclear|purge_txclear|purge_rxabort|purge_txabort); 

清除串列埠的所有操作。 

9-setcommmask()

用途:設定串列埠通訊事件。 

原型:bool setcommmask(handle hfile, 

dword dwevtmask 

); 引數說明: 

-hfile:串列埠控制代碼 

-dwevtmask:準備監視的串列埠事件掩碼 

注:在用api函式撰寫串列埠通訊函式時大體上有兩種方法,一種是查尋法,另外一種是事件通知法。 

這兩種方法的區別在於收串列埠資料時,前一種方法是主動的週期性的查詢串列埠中當前有沒有 

資料;後一種方法是事先設定好需要監視的串列埠通訊事件,然後依靠單獨開設的輔助線程進行 

監視該事件是否已發生,如果沒有發生的話該執行緒就一直不停的等待直到該事件發生後,將 

該串列埠事件以訊息的方式通知主窗體,然後主窗體收到該訊息後依據不同的事件性質進行處理。 

比如說當主窗體收到監視執行緒發來的rx_char(串列埠中有資料)的訊息後,就可以用readfile() 

函式去讀串列埠。該引數有如下資訊掩碼位值: 

ev_break:收到break訊號 

ev_cts:cts(clear to send)線路發生變化 

ev_dsr:dst(data set ready)線路發生變化 

ev_err:線路狀態錯誤,包括了ce_frame/ce_overrun/ce_rxparity 3鐘錯誤。 

ev_ring:檢測到振鈴訊號。 

ev_rlsd:cd(carrier detect)線路訊號發生變化。 

ev_rxchar:輸入緩衝區中已收到資料。 

ev_rxflag:使用setcommstate()函式設定的dcb結構中的等待字元已被傳入輸入緩衝區中。 

ev_txempty:輸出緩衝區中的資料已被完全送出。 

操作舉例:setcommmask(hcomm,ev_rxchar|ev_txempty); 

上面函式執行完畢後將監視串列埠中有無資料和傳送緩衝區中的資料是否全部傳送完畢。 

10-waitcommevent() 

串列埠通訊 串列埠通訊原理

1 rs232介面 rs232 c介面聯結器一般使用型號為db 9的9芯插頭座,只需3條介面線,即 傳送資料 接收資料 和 訊號地 即可傳輸資料,其9個引腳的定義如圖11 3所示。圖11 3 rs232 c介面聯結器定義 在rs232的規範中,電壓值在 3v 15v 一般使用 6v 稱為 0 或 o...

基於Win32API的非同步串列埠通訊

只乙個框架性流程而矣.實現重疊模型的步驟 下面就結合俺寫的乙個console程式簡單示例進行說明 第一步 開啟串列埠 第二步 設定緩衝區大小 if setupcomm m hcom,2048,2048 protocoltype typedef enum packetdatatype 串列埠資料結構 ...

串列埠同步通訊和串列埠非同步通訊

串列埠掃盲貼 現實中不存在絕對精確的時鐘,標稱值同樣是1mhz,發端和接收端的時鐘總會存在差異,如果接收端不進行時鐘同步,而是使用自己本地的時鐘,則足夠長的時間後接收到的資料總會出現不可預知的重複或丟失,導致接收錯誤。因此發端必須將與資料速率相關的時鐘訊號傳輸給接收端,時鐘訊號可以走單獨的訊號線,也...