諶 進 , 馬尚昌 ,2, 張素娟 ,2, 楊筆鋒
(1.成都信息工程學(xué)院 電子工程學(xué)院,四川 成都 610225;2.中國氣象局大氣探測重點開放實驗室,四川 成都 610225)
在傳統(tǒng)的工業(yè)控制領(lǐng)域,主要采用的RS-232、RS-485或RS-422串口與主機通訊,而串口通訊又有很多無法克服的缺點,比如傳輸速率低、通訊距離短、無法遠程控制和集中管理等[1]。如何解決傳統(tǒng)工控領(lǐng)域的串口通訊設(shè)備的缺點,讓用戶在原有串口設(shè)備的資源上實現(xiàn)串口與主機之間的經(jīng)濟、高效、可靠的通訊是本文研究的重點。本文設(shè)計了一種基于UCOS-II和LwIP的串口設(shè)備聯(lián)網(wǎng)技術(shù)的系統(tǒng)設(shè)計方案,通過以太網(wǎng)線實現(xiàn)串口設(shè)備與主機之間雙向數(shù)據(jù)傳遞,實現(xiàn)RS-232/422/485串口設(shè)備與主機之間的網(wǎng)絡(luò)通訊。
在系統(tǒng)設(shè)計總體方案中:STM32微控制器通過串口實現(xiàn)對用戶串口設(shè)備信息的透明傳輸,該信息經(jīng)過輕量型協(xié)議棧的處理,實現(xiàn)串口信息到以太網(wǎng)信息的轉(zhuǎn)換,然后經(jīng)以太網(wǎng)傳遞給客戶端,由客戶端實現(xiàn)對信息的管理;與此同時,通過客戶端發(fā)送信息,經(jīng)以太網(wǎng)傳遞給STM32微控制器,由協(xié)議棧的處理,之后將信息由以太網(wǎng)傳遞給串口,再傳遞給用戶設(shè)備,從而實現(xiàn)用戶設(shè)備和客戶端之間的雙向通信[2]。串口設(shè)備聯(lián)網(wǎng)總體框圖如圖1所示。
圖1 系統(tǒng)總體框圖Fig.1 Structure diagram of the power control unit test system
基于STM32的嵌入式串口設(shè)備聯(lián)網(wǎng)技術(shù)的系統(tǒng)設(shè)計,硬件主要分為3部分,即STM32F107VCT6最小工作系統(tǒng)、SP339串口控制芯片和MCU組成的串口通信模塊、STM32F107VCT6內(nèi)部集成MAC,外部PHY芯片DM9161和集成變壓器HR911105A組成的網(wǎng)絡(luò)通信模塊。
STM32F107VCT6微型處理器的最小系統(tǒng)電路主要由主控芯片、時鐘電路、電源電路、下載電路、復(fù)位電路和濾波電容電路等組成[3]。主控芯片為 STM32F107VCT6,各種高性能工業(yè)標準接口在芯片內(nèi)部高度集成。時鐘電路由25 MHz無源晶振構(gòu)成。電源適配器將220 V交流電轉(zhuǎn)換為5 V直流電,再由芯片ASM1117將之轉(zhuǎn)換為3.3 V后可對芯片直接供電,即完成電源電路的設(shè)計。下載電路采用Jlink的下載方式,需要在MDK編譯環(huán)境下做相應(yīng)的配置,操作簡單方便。復(fù)位電路設(shè)計為按鍵復(fù)位。當(dāng)按鍵開關(guān)斷開時,為上電復(fù)位;當(dāng)按鍵開關(guān)接通時,按鍵RESET端經(jīng)電阻與Vcc電源接通而實現(xiàn)。濾波電容電路采用并聯(lián)電容電路的方式來提高濾波的效率,從而得到更加平滑地直流輸出[4]。
STM32嵌入式MCU串口通信模塊在通信過程如下:用戶設(shè)備串口信號(RS-232/485/422)通過撥碼開關(guān)的設(shè)置進行接入,通過SP339將RS-232/485/422信號轉(zhuǎn)換成LVTTL電平信號,該電平信號輸入到STM32微控制器,并由STM32微控制器將串口設(shè)備信號發(fā)送到LwIP網(wǎng)絡(luò)協(xié)議棧,之后將信號由網(wǎng)線傳入到客戶端。與此同時,客戶端發(fā)下來的信息由網(wǎng)線傳輸?shù)絃wIP網(wǎng)絡(luò)協(xié)議棧,通過LwIP網(wǎng)絡(luò)協(xié)議棧傳輸至STM32微控制器,經(jīng)過STM32微控制器的處理將信號轉(zhuǎn)換成LVTTL電平信號,再由SP339將LVTTL電平信號轉(zhuǎn)換與用戶設(shè)備對應(yīng)的RS-232/422/RS485信號。串口通信模塊硬件設(shè)計原理圖如圖2所示。
圖2 串口通信模塊硬件設(shè)計原理圖Fig.2 Serial port communication module hardware design principle diagram
STM32F107VCT6微型處理器網(wǎng)絡(luò)通信模塊由集成變壓器HR911105A、外接網(wǎng)絡(luò)物理層(PHY)接口和介質(zhì)訪問控制器(MAC)組成。網(wǎng)絡(luò)通信模塊設(shè)計框圖如圖3所示。
圖3 網(wǎng)絡(luò)通信模塊設(shè)計框圖Fig.3 Network communication module design block diagram
STM32F107VCT6芯片內(nèi)部集成了介質(zhì)訪問控制器(MAC),通過外接 10/100M的 DM9161網(wǎng)絡(luò)物理層芯片(PHY),內(nèi)部MAC與外部的PHY通過媒體獨立接口(MII)或是簡化媒體獨立接口 (RMII) 傳輸以太網(wǎng)數(shù)據(jù)包。STM32F107VCT6的總線時鐘頻率可達72 MHz,因此在本設(shè)計中直接采用了RMII接入方式,相比MII的方式可以減少一半的接入的信號線的數(shù)量,同時支持平行交叉網(wǎng)線自適應(yīng)。內(nèi)部MAC接收到來自PHY傳遞的數(shù)據(jù)包并將其通過FIFO傳遞給直接內(nèi)存訪問(DMA),最終由DMA將以太網(wǎng)數(shù)據(jù)包直接傳遞給總線,同理,通過總線傳遞到DMA的數(shù)據(jù)包可以由DM9161PHY傳遞到HR911105A。
實時嵌入式操作系統(tǒng)UCOS-II包括資源同步、資源管理、任務(wù)之間的相互通信等特點,由于該系統(tǒng)是一個實時可剝奪系統(tǒng)內(nèi)核,可最多支持64個任務(wù),并且可以利用任務(wù)不同的優(yōu)先級來調(diào)度任務(wù)間的運行,因此可以很方便地為用戶所調(diào)用。與此同時,它也具備了可以實時測量其運行性能、任務(wù)之間通過信號量和消息郵箱進行通信以及同時等待多個信號量和消息隊列等其它實時內(nèi)核中沒有的特性[5]。
LwIP(Light Weight(輕型)IP協(xié)議)是一個小型開源的TCP/IP協(xié)議棧,由瑞典計算機科學(xué)院(SICS)的Adam Dunkels所開發(fā),可以運行在有操作系統(tǒng)和無操作系統(tǒng)的環(huán)境下。LwIP在保留了TCP協(xié)議主要功能同時實現(xiàn)了對RAM的盡可能少的占用,40KB左右的ROM和十幾KB的RAM就可以正常運行,這使得LwIP協(xié)議棧在中低端的嵌入式系統(tǒng)中有著廣泛的運用[6]。
UCOS-II中V2.91版本的源代碼在STM32F107的移植過程中,主要分為不需要修改和需要修改兩部分。不需要修改的文件只需添加到工程目錄中即可,在這里重點介紹需要修改部分。需要修改源代碼的文件為OS_CPU.C、COS_CPU.H及OS_CPU_A.ASM[7]。
OS_CPU.C中要修改的函數(shù)是OSTaskStkInit,其它的9個函數(shù)不需要包含任何代碼,但是必須聲明。OSTaskStkInit的作用是把任務(wù)堆棧初始化。堆棧中的LR和PC需初始化為任務(wù)的入口地址值,便于任務(wù)切換時跳轉(zhuǎn)到正確執(zhí)行語句的地方。
OS_CPU.H頭文件中需要修改的內(nèi)容有兩部分:與處理器相關(guān)的少量代碼部分和與編譯器相關(guān)的數(shù)據(jù)類型重定義部分。其中與處理器相關(guān)部分代碼包括任務(wù)切換宏定義、處理器堆棧增長方向及臨界區(qū)訪問處理。
OS_CPU_A.ASM匯編文件中有4個函數(shù)需要修改:分別為 OSSstartHighRdy、OSCtxSw、OSIntCtxSw 和 OSTickISR。OSSstartHighRdy函數(shù)只在操作系統(tǒng)開始調(diào)度任務(wù)前執(zhí)行一次,目的是啟動多任務(wù)調(diào)度。OSCtxSW是任務(wù)切換函數(shù)。在任務(wù)執(zhí)行過程中,UCOS-II內(nèi)核會啟動OSCtxSW進行任務(wù)切換,確保進入就緒態(tài)的任務(wù)始終是當(dāng)前任務(wù)優(yōu)先級最高的任務(wù)。匯編函數(shù)OSIntCtxSW是中斷級任務(wù)切換函數(shù)。若在任務(wù)執(zhí)行時有中斷發(fā)生,且中斷服務(wù)程序所執(zhí)行的任務(wù)比正在運行的任務(wù)的優(yōu)先級更高時,這時候中斷服務(wù)程序所執(zhí)行的任務(wù)就會進入就緒態(tài),在中斷返回之前,UCOS-II內(nèi)核就會調(diào)用函數(shù)OSIntCtxSw。系統(tǒng)時鐘節(jié)拍的中斷服務(wù)函數(shù)是OSTickISR。處理器STM32F107VCT6中有一個專門用來定義系統(tǒng)時鐘節(jié)拍定時器SysTick。本移植過程用SysTick產(chǎn)生每200ms一次的時鐘節(jié)拍中斷。
STM32嵌入式MCU串口設(shè)備聯(lián)網(wǎng)技術(shù)在設(shè)計時既要實現(xiàn)TCP/IP通信,還要實現(xiàn)與串口交換數(shù)據(jù)。在設(shè)計中采用LwIP精簡協(xié)議,將需要實現(xiàn)的各種功能分解成各自獨立的任務(wù),通過優(yōu)先級的調(diào)度,使各項任務(wù)能夠有條不紊的運行[7]。任務(wù)之間可以通過信號量、消息隊列、消息郵箱等進行通信,既保證了系統(tǒng)的實時性,又降低了實現(xiàn)的難度。LwIP協(xié)議棧將頂層應(yīng)用層之外的所有協(xié)議集和底層硬件驅(qū)動都封裝在一個庫里,實現(xiàn)了在編寫程序過程中最大的通用性[8]。協(xié)議棧通過接口與底層硬件和頂層應(yīng)用通信,完成網(wǎng)絡(luò)協(xié)議棧的4層功能:物理層完成對STM32微處理器的以太網(wǎng)控制器驅(qū)動;接口層通過ARP協(xié)議完成對集成訪問介質(zhì)MAC的辨識;網(wǎng)絡(luò)層完成最基本的網(wǎng)絡(luò)傳輸協(xié)議,包括IP、ICMP等協(xié)議;網(wǎng)絡(luò)傳輸層管理網(wǎng)絡(luò)數(shù)據(jù)按照一定的格式進行傳輸,LwIP為聯(lián)機網(wǎng)絡(luò)進行高可靠性的數(shù)據(jù)通信提供了基礎(chǔ)。
3.4.1 系統(tǒng)初始化流程
STM32嵌入式MCU串口設(shè)備聯(lián)網(wǎng)技術(shù)的應(yīng)用程序設(shè)計如下:當(dāng)目標板上電后,通過IAR編譯器將編譯無誤的程序代碼通過Jlink下載到MCU內(nèi),程序啟動UCOS-II操作系統(tǒng),在操作系統(tǒng)內(nèi)對目標板進行串口,LED狀態(tài)燈等外設(shè)的初始化,LwIP協(xié)議棧的初始化,之后進行UCOS-II實時操作系統(tǒng)的多任務(wù)調(diào)度,及任務(wù)間的消息的傳遞處理,從而實現(xiàn)串口到以太網(wǎng)口之間的數(shù)據(jù)的發(fā)送與接收,完成串口設(shè)備聯(lián)網(wǎng)技術(shù)的系統(tǒng)設(shè)計[9]。如圖4所示。
圖4 系統(tǒng)初始化流程Fig.4 System initialization process
3.4.2 RAW-API下客戶端與服務(wù)器
基于RAW-API進行的TCP/IP編程,能夠很好地將TCP/IP協(xié)議棧的代碼和應(yīng)用程序的代碼相結(jié)合。程序以回調(diào)函數(shù)為基礎(chǔ)的事件驅(qū)動,同時TCP/IP代碼也能夠直接回調(diào)函數(shù)。TCP/IP代碼和應(yīng)用程序的代碼在同一個線程里面運行。RAW-API函數(shù)在程序代碼的執(zhí)行時間更短,并且它在運行時占用的內(nèi)存資源更少。在CODE和RAM都較小的嵌入式系統(tǒng)中,該方法有十分明顯的優(yōu)勢。
在STM32嵌入式串口設(shè)備聯(lián)網(wǎng)技術(shù)的系統(tǒng)設(shè)計測試過程中,利用網(wǎng)絡(luò)調(diào)試助手來模擬客戶端,服務(wù)器程序編寫在STM32MCU內(nèi)部。經(jīng)過測試,當(dāng)撥碼開關(guān)分別設(shè)置0101、1010和1111(分別對應(yīng)為RS485、RS232和RS422信號的接入方式)時,網(wǎng)絡(luò)調(diào)試助手能夠準確無誤地接收串口發(fā)送過來的數(shù)據(jù),與此同時,串口也能夠準確無誤地接收客戶端發(fā)送來的數(shù)據(jù)。實驗結(jié)果如圖5和圖6所示。
圖5 串口接收數(shù)據(jù)顯示Fig.5 The data display of serial port received
圖6 網(wǎng)絡(luò)接收數(shù)據(jù)顯示Fig.6 The data display of network received
設(shè)備連入互聯(lián)網(wǎng)是科技發(fā)展的趨勢,隨著科技的進步,更多的自身具有聯(lián)網(wǎng)功能的設(shè)備將會逐步取代按照傳統(tǒng)通信方式工作的串口設(shè)備,但這個過程會比較漫長。如何讓傳統(tǒng)的通信方式工作的串口設(shè)備在不改變現(xiàn)有串口設(shè)備軟硬件條件下能夠連接到網(wǎng)絡(luò),本文提供了一種經(jīng)濟實用的串口設(shè)備聯(lián)網(wǎng)的系統(tǒng)設(shè)計方案[10]。該方案結(jié)構(gòu)簡單、性能可靠而且性價比高,經(jīng)過實際測試和驗證,具有很好的應(yīng)用效果。
[1]周超.基于Cortex-M3的以太網(wǎng)串口服務(wù)器的設(shè)計與實現(xiàn)[D].武漢:武漢理工大學(xué),2012.
[2]周鵬,黃燦,江楠.串口與網(wǎng)絡(luò)結(jié)合的通信方案的研究[J].計算機與網(wǎng)絡(luò),2011(15):68-70.ZHOU Peng,HUANG Can,JIANG Nan.A serial port and network combined with thestudy of thecommunication plan[J].Computer and Network,2011(15):68-70.
[3]張少兵,王會彬.基于ARMCortex M3的以太網(wǎng)串口服務(wù)器設(shè)計與實現(xiàn)[J].軍民兩用技術(shù)與產(chǎn)品,2013(9):53-58 ZHANG Shao-bing,WANG Hui-bing.Based on ARM architecture design and implementation of Cortex M3 Ethernet serial server[J].Dual-use Technologies and Products,2013(9):53-58.
[4]北京東方訊科技發(fā)展有限公司.串口設(shè)備聯(lián)網(wǎng)服務(wù)器EIC-NC20方案 [EB/OL].http://www.gkong.com/Company/eastcent/SolutionDetail.ashx?id=5049,2007-03-23.
[5]任哲.嵌入式實時操作系統(tǒng)uC/OS-II原理及應(yīng)用[M].2版.北京:北京航空航天大學(xué)出版社,2009.
[6]Jean J.Labrosse.嵌入式實時操作系統(tǒng)uC/OS-II[M].2版.邵貝貝,譯.北京:北京航空航天大學(xué)出版社,2003.
[7]史濤,沈天飛,李斌.用于車速傳感器性能測試平臺的串行口-以太網(wǎng)橋設(shè)計[J].電子技術(shù)應(yīng)用,2007(4):19-22.SHI Tao,SHEN Tian-fei,LI Bin.Speed sensor performance test platform for serial port-Ethernet bridge design[J].Electronic Technology Applications,2007(4):19-22.
[8]上海卓嵐信息科技有限公司.串口轉(zhuǎn)TCPIP的TCP工作模式選擇 [EB/OL].http://www.zlmcu.com/document/tcp_work_mode.html,2010-12-22.
[9]黃天戍,汪汝寧,袁學(xué)文.TCP/IP協(xié)議棧在嵌入式異構(gòu)網(wǎng)絡(luò)互聯(lián)中的應(yīng)用[J].單片機與嵌入式系統(tǒng)應(yīng)用,2004(9):30-33.HUANG Tian-shu,WANG Ru-ning,YUAN Xue-wen.TCP/IP protocol stack in embedded application of heterogeneous network interconnection[J].Microcontroller and Embedded Systems Applications,2004(9):30-33.
[10]馬修才,馬尚昌,張素娟,等.串口設(shè)備聯(lián)網(wǎng)及其關(guān)鍵技術(shù)分析[J].成都信息工程學(xué)院學(xué)報,2014(6):24-27.MA Xiu-cai,MA Shang-chang,ZHANG Su-juan,et al.A serial port devices connected to the Internet and its key technology is analyzed[J].Journal of Chengdou University of Information Technology,2014(6):24-27.