資源描述:
《WIN32_API串口通信編程實(shí)例教程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、WIN32API串口通訊實(shí)例教程第一節(jié)實(shí)現(xiàn)串口通訊的函數(shù)及串口編程簡介API函數(shù)不僅提供了打開和讀寫通訊端口的操作方法,還提供了名目繁多的函數(shù)以支持對(duì)串行通訊的各種操作。常用函數(shù)及作用下:函數(shù)名作用CreateFile打開串口GetCommState檢測串口設(shè)置SetCommState設(shè)置串口BuilderCommDCB用字符串中的值來填充設(shè)備控制塊GetCommTimeouts檢測通信超時(shí)設(shè)置SetCommTimeouts設(shè)置通信超時(shí)參數(shù)SetCommMask設(shè)定被監(jiān)控事件WaitCommEvent等待被監(jiān)控事件發(fā)
2、生WaitForMultipleObjects等待多個(gè)被監(jiān)測對(duì)象的結(jié)果WriteFile發(fā)送數(shù)據(jù)ReadFile接收數(shù)據(jù)GetOverlappedResult返回最后重疊(異步)操作結(jié)果PurgeComm清空串口緩沖區(qū),退出所有相關(guān)操作ClearCommError更新串口狀態(tài)結(jié)構(gòu)體,并清除所有串口硬件錯(cuò)誤CloseHandle關(guān)閉串行口用WindowsAPI編寫串口程序本身是有巨大優(yōu)點(diǎn)的,因?yàn)榭刂颇芰?huì)更強(qiáng),效率也會(huì)更高。API編寫串口,過程一般是這樣的:1、創(chuàng)建串口句柄,用CreateFile;2、對(duì)串口的參數(shù)進(jìn)行
3、設(shè)置,其中比較重要的是波特率(BaudRate),數(shù)據(jù)寬度(BytesBits),奇偶校驗(yàn)(Parity),停止位(StopBits),當(dāng)然,重要的還有端口號(hào)(Port);3、然后對(duì)串口進(jìn)行相應(yīng)的讀寫操作,這時(shí)候用到ReadFile和WriteFile函數(shù);4、讀寫結(jié)束后,要關(guān)閉串口句柄,用CloseFile。下面依次講述各個(gè)步驟的過程。第一節(jié)創(chuàng)建串口句柄打開串口從字面上去理解,大家也可以發(fā)現(xiàn)CreateFile實(shí)際上表明Windows是把串口當(dāng)作一個(gè)文件來處理的,所以它也有文件那樣的緩沖區(qū)、句柄、讀寫錯(cuò)誤等,不同的
4、是,這個(gè)文件名字只有固定的幾個(gè)(一般為四個(gè)),而且始終存在(EXSITING),而且在調(diào)用CreateFile的時(shí)候請注意它的參數(shù)。CreateFile函數(shù)原型如下:HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDisposition,DWORDdwFlagsAndAttributes,HANDLEhTem
5、plateFile);lpFileName:指向一個(gè)以NULL結(jié)束的字符串,該串指定了要?jiǎng)?chuàng)建、打開或截?cái)嗟奈募?、管道、通信源、磁盤設(shè)備或控制臺(tái)的名字。當(dāng)用CreateFile打開串口時(shí),這個(gè)參數(shù)可用“COM1”指定串口1,用“COM2”指定串口2,依此類推。dwDesireAccess:指定對(duì)文件訪問的類型,該參數(shù)可以為GENERIC_READ(指定對(duì)該文件的讀訪問權(quán))或GENERIC_WRITE(指定該文件的寫訪問權(quán))兩個(gè)值之一或同時(shí)為為這兩個(gè)值。用ENERIC_READ
6、GENERIC_WRITE則指定可對(duì)串口進(jìn)
7、行讀寫;dwShareMode:指定此文件可以怎樣被共享。因?yàn)榇锌诓恢С秩魏喂蚕砟J?,所以dwShareMode必須設(shè)為0;lpSecurityAttributes定義安全屬性,一般不用,可設(shè)為NULL。Win9x下該參數(shù)被忽略;dwCreationDistribution定義文件創(chuàng)建方式,對(duì)串口必須設(shè)為OPEN_EXISTING,表示打開已經(jīng)存在的文件;dwFlagsAndAttributes為該文件指定定義文件屬性和標(biāo)志,這個(gè)程序中設(shè)為FILE_FLAG_OVERLAPPED,表示異步通信方式;
hTempla
8、teFile指向一個(gè)模板文件的句柄,串口無模板可言,設(shè)為NULL。在Windows9x下該參數(shù)必須為NULL。串口被成功打開時(shí),返回其句柄,否則返回INVALID_HANDLE_value(0XFFFFFFFF)。上面說到了異步,那什么是異步呢?異步是相對(duì)同步這個(gè)概念而言的。異步,就是說,在進(jìn)行串口讀寫操作時(shí),不用等到I/O操作完成后函數(shù)才返回,也就是說,異步可以更快得響應(yīng)用戶操作;同步,相反,響應(yīng)的I/O操作必須完成后函數(shù)才返回,否則阻塞線程。對(duì)于一些很簡單的通訊程序來說,可以選擇同步,這樣可以省去很多錯(cuò)誤檢查,但
9、是對(duì)于復(fù)雜一點(diǎn)的應(yīng)用程序,異步是最佳選擇。實(shí)例1:/******************example1.cpp******************************************//*lishaoan2009-06-29*****************************************************/