資源描述:
《上位機(jī)和單片機(jī)串口編程---API函數(shù)編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、不用MSComm控件,那看起來只能是使用WindowsAPIT,因?yàn)镸FC貌似沒有什么類封裝了串口API函數(shù)的。用WindowsAPI編寫串口程序本身是有巨大優(yōu)點(diǎn)的,因?yàn)榭刂颇芰?huì)更強(qiáng),效率也會(huì)更高,而且對(duì)丁?那些純綠色軟件追求者來說,沒有ActiveX控件比什么都重要——呵呵,我也是這么認(rèn)為。API編寫串口,過程一般是這樣的:1、創(chuàng)建串口句柄,用CreateFile;2、對(duì)串口的參數(shù)進(jìn)行設(shè)置,其屮比佼重要的是波特率(BaudRate),數(shù)據(jù)寬度(BytesBits),奇偶校驗(yàn)(Parity),停止位(StopBits),當(dāng)然,重要的還有端口號(hào)(Port);3、然后對(duì)串丨I進(jìn)行相應(yīng)的
2、讀寫操作,這時(shí)候用到ReadFile和WriteFile函數(shù);4、讀寫結(jié)束后,要關(guān)閉串口句柄,用CloseFile;下面依次大致講講個(gè)步驟的過程:第一步,從字面上去理解,人家也可以發(fā)現(xiàn)CreateFile實(shí)際上表明Windows是把串口當(dāng)作一個(gè)文件來處理的,所以它也有文件那樣的緩沖區(qū)、旬柄、讀寫錯(cuò)課等,不同的是,這個(gè)文件名字只有固定的兒個(gè)(一般為四個(gè)),而且始終存在(EXSITTNG),而且在調(diào)用CreateFile的時(shí)候請(qǐng)注意它的參數(shù)。CreateFile函數(shù)原型如下:HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,D
3、WORDdwShareMode,LPSECURITY.ATTRIBUTESIpSecurityAttributes,DWORDdwCreationDisposition,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);lpFileName是你需要?jiǎng)?chuàng)建的端口號(hào),默認(rèn)情況卜?是C0M1;dwDesiredAccess是表明你想訃你創(chuàng)建的串口以何種方式存在于你的應(yīng)用程序中,因?yàn)榇甀I通常是可讀可寫的,所以這里必須設(shè)置為GENERIC_READ
4、GENERIC_WRITE;dwShareMode是用來設(shè)置串口共享屬性的,因?yàn)榇诩佑谂R界資源,當(dāng)然
5、不能共享,所以這里也必須設(shè)置為0;IpSecurityAttributes是設(shè)登安全模式,一般采川默認(rèn)的安全模式就可以了,選擇NULL;dwCreationDisposition是設(shè)置是否打開新的“文件"(上面說過了,Windows是把串口等端口當(dāng)作文件來處理的),因?yàn)榇趯儆谟布丝?,?dāng)然不能隨便重復(fù)創(chuàng)建,所以這里必須告訴Windows,每次創(chuàng)建的時(shí)候必須使用己經(jīng)存在的串口,所以這里設(shè)置OPEN_EXSITING;dwFlagsAndAttributes,這個(gè)參數(shù)可以設(shè)宜的值比較多,大家若需要深入了解可以查找MSDN,這里因?yàn)槲覀兘酉氯ヒ龅氖钱惒酵ㄓ?,所以需要設(shè)置FILE_FLA
6、G_OVERLAPPED:最后一個(gè)參數(shù)hTemplateFile是指定模板文件,串口沒有模板,選擇NULL;所以最后我們?cè)O(shè)遺的CreateFile兩數(shù)如F:m_hCom=CreateFile(m_sPort,GENERIC_READ
7、GENERIC_WR1TE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);在創(chuàng)建完巾口后,最后進(jìn)行句柄測(cè)試:if(m_hCom==INVALID_HANDLE_VALUE){AfxMessageBox(u打開串丨I失敗!”);return;}上面說到了并步,那什么是并步呢?界步是相對(duì)同步這個(gè)概念而言的。界
8、步,就是說,在進(jìn)行串口讀寫操作時(shí),不用等到I/O操作完成后函數(shù)才返回,也就是說,異步可以更快得響應(yīng)用戶操作;同步,相反,響應(yīng)的I/O操作必須完成麻函數(shù)才返回,否則阻塞線程。對(duì)于一些很簡(jiǎn)單的通訊程序來說,可以選擇同步,這樣可以省去很多錯(cuò)謀檢杳,但是對(duì)于復(fù)雜一點(diǎn)的應(yīng)用程序,異步是最佳選擇;第二步,設(shè)置串口,并創(chuàng)建串口線程。串口有很多的屬性,上血也已經(jīng)介紹了一些最重要的參數(shù)。這里不得不介紹一個(gè)重量級(jí)的數(shù)據(jù)結(jié)構(gòu)DCB:typedefstruct_DCB{//debDWORDDCBlength;//DCB結(jié)構(gòu)體大小DWORDBaudRate;〃波特率DWORDfBinary:1;〃是否是二進(jìn)制
9、,一般設(shè)置為TRUEDWORDfParity:1;//是否進(jìn)行奇偶校驗(yàn),我做的是ARM嵌入式,所以FALSEDWORDfOutxCtsFlow:l;//CTS線上的硬件握手DWORDfOutxDsrFlow:l;//DSR線上的碩件握手DWORDfDtrControl:2;//DTR控制DWORDfDsrSensitivity:1;DWORDfTXContinueOnXoffrl;DWORDfOutX:1;〃是否使用XON/XOFF協(xié)議DWORDflnX: