新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Windows CE.NET 4.2下PC與單片機的串行通信

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

        作者: 時間:2012-03-07 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/171935.htm

        1 簡介

        Windows CE 是一個面向移動計算和嵌入式應用的操作系統,其突出優點是模塊化、可定制性、完備性、實時性、通信能力強大和基于Win32應用程序編程接口。 Windows CE.N ET 是為嵌入式市場重新設計的Windows CE 3.0的后繼產品,為快速建立下一代智能移動和小內存占用的設備提供了一個健壯的實時操作系統。他包括創建一個基于定制設備的Wi ndows CE所需的一切。

        2Windows 下的通信技術

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

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

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

        2.1打開和關閉串行端口

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

        關閉串行端口比較簡單,調用CloseHandle函數就能關閉一個打開的串行端口。CloseHandle只有一個參數,即調用CreateFile函數打開端口時返回的句柄,方法如下:

        CloseHandle (hPort);

        2.2讀寫串行端口

        正如使用CreateFile打開串行端口一樣,可以使用ReadFile和WriteFile函數來讀寫串行端 口。假設已經調用CreateFile成功地打開了串行端口,那么只需調用ReadFile即可從串行端口讀取數據:

        37.jpg

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

        38.jpg

        如果從主線程讀、寫大量的串行數據,主線程就會因為等待相對較慢的串行讀或串行寫操作而阻塞,不能即時處理其他的消息。因此最好用單獨的線程來讀寫串行端口。

        2.3配置串行端口

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

        39.jpg

        2.4設置超時值

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

        通信相關文章:通信原理



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 雷山县| 公主岭市| 荣昌县| 聂拉木县| 武隆县| 永修县| 赤峰市| 竹山县| 金溪县| 乳山市| 宿州市| 维西| 清徐县| 招远市| 文登市| 徐汇区| 江孜县| 桓仁| 阜新市| 泉州市| 宣汉县| 隆安县| 大宁县| 调兵山市| 许昌市| 张家界市| 重庆市| 灌云县| 孙吴县| 东阿县| 郓城县| 延庆县| 偃师市| 元谋县| 万年县| 本溪| 简阳市| 聂荣县| 石楼县| 凌海市| 白沙|