<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Windows CE.NET 4.2下PC與單片機(jī)的串行通信

          Windows CE.NET 4.2下PC與單片機(jī)的串行通信

          作者: 時(shí)間:2012-03-07 來源:網(wǎng)絡(luò) 收藏

          在工業(yè)控制中,常需要將采集到的數(shù)據(jù)傳送給機(jī)處理、顯示,并且根據(jù)處理結(jié)果給發(fā)送控制命令。雖然傳送速度相對較慢,但是傳送成本低,對實(shí)現(xiàn)監(jiān)視和控制,具有足夠的帶寬,并且沒有過于復(fù)雜的編解碼,實(shí)現(xiàn)自定義的協(xié)議也不復(fù)雜,因而在工業(yè)自動(dòng)化、和軍事等領(lǐng)域的應(yīng)用十分廣泛。隨著 CE嵌入式操作系統(tǒng)在工業(yè)控制中的廣泛應(yīng)用,設(shè)計(jì)和實(shí)現(xiàn) CE下具有重要的意義。

          本文引用地址:http://www.ex-cimer.com/article/171935.htm

          1 簡介

          Windows CE 是一個(gè)面向移動(dòng)計(jì)算和嵌入式應(yīng)用的操作系統(tǒng),其突出優(yōu)點(diǎn)是模塊化、可定制性、完備性、實(shí)時(shí)性、通信能力強(qiáng)大和基于Win32應(yīng)用程序編程接口。 Windows CE.N ET 是為嵌入式市場重新設(shè)計(jì)的Windows CE 3.0的后繼產(chǎn)品,為快速建立下一代智能移動(dòng)和小內(nèi)存占用的設(shè)備提供了一個(gè)健壯的實(shí)時(shí)操作系統(tǒng)。他包括創(chuàng)建一個(gè)基于定制設(shè)備的Wi ndows CE所需的一切。

          2Windows 下的通信技術(shù)

          串行端口在Windows 4.2(以下簡稱Windows CE)下屬于流接口設(shè)備,他是串行設(shè)備接口常規(guī)I/O驅(qū)動(dòng)程序的調(diào)用與通信相關(guān)的具體函數(shù)的結(jié)合。串行設(shè)備被視為用于打開、關(guān)閉和讀寫串行端口的常規(guī)的可安裝的流設(shè)備。Windows CE的串口函數(shù)和Windows的串口函數(shù)基本相同,但有幾點(diǎn)值得注意:

          (1)Windows CE只支持Unicode字符集,在編程時(shí)必須特別注意。

          (2) Windows CE不支持重疊的I/O操作。

          2.1打開和關(guān)閉串行端口

          在所有的流設(shè)備驅(qū)動(dòng)程序中,均使用CreateFile來打開串行端口設(shè)備,如果這個(gè)端口不存在,CreateFile返回 ERROR_FILE_NOT_FOUND。因此,用戶指定的端口必須是存在并且可用的,而且要遵循Windows CE流接口設(shè)備驅(qū)動(dòng)程序的命名規(guī)則,即COM后接要打開的端口號再緊跟一個(gè)冒號。
          HANDLE hPort = CreateFile (_T(COM1:),
          GENERIC_READ|GENERIC_WRITE, 0,NULL,
          OPEN_EXISTING,0,NULL);

          關(guān)閉串行端口比較簡單,調(diào)用CloseHandle函數(shù)就能關(guān)閉一個(gè)打開的串行端口。CloseHandle只有一個(gè)參數(shù),即調(diào)用CreateFile函數(shù)打開端口時(shí)返回的句柄,方法如下:

          CloseHandle (hPort);

          2.2讀寫串行端口

          正如使用CreateFile打開串行端口一樣,可以使用ReadFile和WriteFile函數(shù)來讀寫串行端 口。假設(shè)已經(jīng)調(diào)用CreateFile成功地打開了串行端口,那么只需調(diào)用ReadFile即可從串行端口讀取數(shù)據(jù):

          37.jpg

          由于Windows CE不支持重疊的I/O操作,所以第5個(gè)參數(shù)必須設(shè)置為NULL。寫串行端口也很 簡單。調(diào)用過程如下:

          38.jpg

          如果從主線程讀、寫大量的串行數(shù)據(jù),主線程就會(huì)因?yàn)榈却鄬^慢的串行讀或串行寫操作而阻塞,不能即時(shí)處理其他的消息。因此最好用單獨(dú)的線程來讀寫串行端口。

          2.3配置串行端口

          讀和寫串行端口比較簡單,但是還需要對端口配置好正確的波特率、字符長度、奇偶校驗(yàn)、傳輸模式等,端口才能正確通信??梢哉{(diào)用I/O設(shè)備控制(IOCTL)來配置串行驅(qū)動(dòng)程序,但此操作需要一些底層的知識,并且要有相應(yīng)的“嵌入工具包”(ETK),而SDK不能實(shí)現(xiàn)該操作。除此之外,還有一種更簡單的方法,就是調(diào)用GetCommState和SetCommState函數(shù)配置串行端口。由于配置端口的DCB結(jié)構(gòu)內(nèi)容較多,所以使用起來比較麻煩。錯(cuò)誤地初始化 DCB結(jié)構(gòu)是配置串行端口常見的問題。如果一個(gè)串行通信函數(shù)沒有產(chǎn)生預(yù)期的效果,那么錯(cuò)誤很可能是在DCB結(jié)構(gòu)體的賦值。在與單片機(jī)實(shí)現(xiàn)串行通信的時(shí)候,由于只用到了RS 232串行口的RXD,TXD和GND三個(gè)引腳,而其他的引腳均舍棄不用,所以DCB的成員變量應(yīng)該如下設(shè)置,否則不能正常通信:

          39.jpg

          2.4設(shè)置超時(shí)值

          對于串行端口來說,還必須配置超時(shí)值,否則程序可能陷入到一個(gè)等待來自串口字符的死循環(huán)。通常,配置超時(shí)值和配置串口類似。首先用 GetCommTimeouts函數(shù)獲取當(dāng)前串口的超時(shí)值,然后修改CommTimeouts成員變量的值,最后用SetCommTimeouts設(shè)置新的超時(shí)值。

          通信相關(guān)文章:通信原理



          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();