諶 進(jìn) , 馬尚昌 ,2, 張素娟 ,2, 楊筆鋒
(1.成都信息工程學(xué)院 電子工程學(xué)院,四川 成都 610225;2.中國(guó)氣象局大氣探測(cè)重點(diǎn)開(kāi)放實(shí)驗(yàn)室,四川 成都 610225)
在傳統(tǒng)的工業(yè)控制領(lǐng)域,主要采用的RS-232、RS-485或RS-422串口與主機(jī)通訊,而串口通訊又有很多無(wú)法克服的缺點(diǎn),比如傳輸速率低、通訊距離短、無(wú)法遠(yuǎn)程控制和集中管理等[1]。如何解決傳統(tǒng)工控領(lǐng)域的串口通訊設(shè)備的缺點(diǎn),讓用戶在原有串口設(shè)備的資源上實(shí)現(xiàn)串口與主機(jī)之間的經(jīng)濟(jì)、高效、可靠的通訊是本文研究的重點(diǎn)。本文設(shè)計(jì)了一種基于UCOS-II和LwIP的串口設(shè)備聯(lián)網(wǎng)技術(shù)的系統(tǒng)設(shè)計(jì)方案,通過(guò)以太網(wǎng)線實(shí)現(xiàn)串口設(shè)備與主機(jī)之間雙向數(shù)據(jù)傳遞,實(shí)現(xiàn)RS-232/422/485串口設(shè)備與主機(jī)之間的網(wǎng)絡(luò)通訊。
在系統(tǒng)設(shè)計(jì)總體方案中:STM32微控制器通過(guò)串口實(shí)現(xiàn)對(duì)用戶串口設(shè)備信息的透明傳輸,該信息經(jīng)過(guò)輕量型協(xié)議棧的處理,實(shí)現(xiàn)串口信息到以太網(wǎng)信息的轉(zhuǎn)換,然后經(jīng)以太網(wǎng)傳遞給客戶端,由客戶端實(shí)現(xiàn)對(duì)信息的管理;與此同時(shí),通過(guò)客戶端發(fā)送信息,經(jīng)以太網(wǎng)傳遞給STM32微控制器,由協(xié)議棧的處理,之后將信息由以太網(wǎng)傳遞給串口,再傳遞給用戶設(shè)備,從而實(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è)計(jì),硬件主要分為3部分,即STM32F107VCT6最小工作系統(tǒng)、SP339串口控制芯片和MCU組成的串口通信模塊、STM32F107VCT6內(nèi)部集成MAC,外部PHY芯片DM9161和集成變壓器HR911105A組成的網(wǎng)絡(luò)通信模塊。
STM32F107VCT6微型處理器的最小系統(tǒng)電路主要由主控芯片、時(shí)鐘電路、電源電路、下載電路、復(fù)位電路和濾波電容電路等組成[3]。主控芯片為 STM32F107VCT6,各種高性能工業(yè)標(biāo)準(zhǔn)接口在芯片內(nèi)部高度集成。時(shí)鐘電路由25 MHz無(wú)源晶振構(gòu)成。電源適配器將220 V交流電轉(zhuǎn)換為5 V直流電,再由芯片ASM1117將之轉(zhuǎn)換為3.3 V后可對(duì)芯片直接供電,即完成電源電路的設(shè)計(jì)。下載電路采用Jlink的下載方式,需要在MDK編譯環(huán)境下做相應(yīng)的配置,操作簡(jiǎn)單方便。復(fù)位電路設(shè)計(jì)為按鍵復(fù)位。當(dāng)按鍵開(kāi)關(guān)斷開(kāi)時(shí),為上電復(fù)位;當(dāng)按鍵開(kāi)關(guān)接通時(shí),按鍵RESET端經(jīng)電阻與Vcc電源接通而實(shí)現(xiàn)。濾波電容電路采用并聯(lián)電容電路的方式來(lái)提高濾波的效率,從而得到更加平滑地直流輸出[4]。
STM32嵌入式MCU串口通信模塊在通信過(guò)程如下:用戶設(shè)備串口信號(hào)(RS-232/485/422)通過(guò)撥碼開(kāi)關(guān)的設(shè)置進(jìn)行接入,通過(guò)SP339將RS-232/485/422信號(hào)轉(zhuǎn)換成LVTTL電平信號(hào),該電平信號(hào)輸入到STM32微控制器,并由STM32微控制器將串口設(shè)備信號(hào)發(fā)送到LwIP網(wǎng)絡(luò)協(xié)議棧,之后將信號(hào)由網(wǎng)線傳入到客戶端。與此同時(shí),客戶端發(fā)下來(lái)的信息由網(wǎng)線傳輸?shù)絃wIP網(wǎng)絡(luò)協(xié)議棧,通過(guò)LwIP網(wǎng)絡(luò)協(xié)議棧傳輸至STM32微控制器,經(jīng)過(guò)STM32微控制器的處理將信號(hào)轉(zhuǎn)換成LVTTL電平信號(hào),再由SP339將LVTTL電平信號(hào)轉(zhuǎn)換與用戶設(shè)備對(duì)應(yīng)的RS-232/422/RS485信號(hào)。串口通信模塊硬件設(shè)計(jì)原理圖如圖2所示。
圖2 串口通信模塊硬件設(shè)計(jì)原理圖Fig.2 Serial port communication module hardware design principle diagram
STM32F107VCT6微型處理器網(wǎng)絡(luò)通信模塊由集成變壓器HR911105A、外接網(wǎng)絡(luò)物理層(PHY)接口和介質(zhì)訪問(wèn)控制器(MAC)組成。網(wǎng)絡(luò)通信模塊設(shè)計(jì)框圖如圖3所示。
圖3 網(wǎng)絡(luò)通信模塊設(shè)計(jì)框圖Fig.3 Network communication module design block diagram
STM32F107VCT6芯片內(nèi)部集成了介質(zhì)訪問(wèn)控制器(MAC),通過(guò)外接 10/100M的 DM9161網(wǎng)絡(luò)物理層芯片(PHY),內(nèi)部MAC與外部的PHY通過(guò)媒體獨(dú)立接口(MII)或是簡(jiǎn)化媒體獨(dú)立接口 (RMII) 傳輸以太網(wǎng)數(shù)據(jù)包。STM32F107VCT6的總線時(shí)鐘頻率可達(dá)72 MHz,因此在本設(shè)計(jì)中直接采用了RMII接入方式,相比MII的方式可以減少一半的接入的信號(hào)線的數(shù)量,同時(shí)支持平行交叉網(wǎng)線自適應(yīng)。內(nèi)部MAC接收到來(lái)自PHY傳遞的數(shù)據(jù)包并將其通過(guò)FIFO傳遞給直接內(nèi)存訪問(wèn)(DMA),最終由DMA將以太網(wǎng)數(shù)據(jù)包直接傳遞給總線,同理,通過(guò)總線傳遞到DMA的數(shù)據(jù)包可以由DM9161PHY傳遞到HR911105A。
實(shí)時(shí)嵌入式操作系統(tǒng)UCOS-II包括資源同步、資源管理、任務(wù)之間的相互通信等特點(diǎn),由于該系統(tǒng)是一個(gè)實(shí)時(shí)可剝奪系統(tǒng)內(nèi)核,可最多支持64個(gè)任務(wù),并且可以利用任務(wù)不同的優(yōu)先級(jí)來(lái)調(diào)度任務(wù)間的運(yùn)行,因此可以很方便地為用戶所調(diào)用。與此同時(shí),它也具備了可以實(shí)時(shí)測(cè)量其運(yùn)行性能、任務(wù)之間通過(guò)信號(hào)量和消息郵箱進(jìn)行通信以及同時(shí)等待多個(gè)信號(hào)量和消息隊(duì)列等其它實(shí)時(shí)內(nèi)核中沒(méi)有的特性[5]。
LwIP(Light Weight(輕型)IP協(xié)議)是一個(gè)小型開(kāi)源的TCP/IP協(xié)議棧,由瑞典計(jì)算機(jī)科學(xué)院(SICS)的Adam Dunkels所開(kāi)發(fā),可以運(yùn)行在有操作系統(tǒng)和無(wú)操作系統(tǒng)的環(huán)境下。LwIP在保留了TCP協(xié)議主要功能同時(shí)實(shí)現(xiàn)了對(duì)RAM的盡可能少的占用,40KB左右的ROM和十幾KB的RAM就可以正常運(yùn)行,這使得LwIP協(xié)議棧在中低端的嵌入式系統(tǒng)中有著廣泛的運(yùn)用[6]。
UCOS-II中V2.91版本的源代碼在STM32F107的移植過(guò)程中,主要分為不需要修改和需要修改兩部分。不需要修改的文件只需添加到工程目錄中即可,在這里重點(diǎn)介紹需要修改部分。需要修改源代碼的文件為OS_CPU.C、COS_CPU.H及OS_CPU_A.ASM[7]。
OS_CPU.C中要修改的函數(shù)是OSTaskStkInit,其它的9個(gè)函數(shù)不需要包含任何代碼,但是必須聲明。OSTaskStkInit的作用是把任務(wù)堆棧初始化。堆棧中的LR和PC需初始化為任務(wù)的入口地址值,便于任務(wù)切換時(shí)跳轉(zhuǎn)到正確執(zhí)行語(yǔ)句的地方。
OS_CPU.H頭文件中需要修改的內(nèi)容有兩部分:與處理器相關(guān)的少量代碼部分和與編譯器相關(guān)的數(shù)據(jù)類型重定義部分。其中與處理器相關(guān)部分代碼包括任務(wù)切換宏定義、處理器堆棧增長(zhǎng)方向及臨界區(qū)訪問(wèn)處理。
OS_CPU_A.ASM匯編文件中有4個(gè)函數(shù)需要修改:分別為 OSSstartHighRdy、OSCtxSw、OSIntCtxSw 和 OSTickISR。OSSstartHighRdy函數(shù)只在操作系統(tǒng)開(kāi)始調(diào)度任務(wù)前執(zhí)行一次,目的是啟動(dòng)多任務(wù)調(diào)度。OSCtxSW是任務(wù)切換函數(shù)。在任務(wù)執(zhí)行過(guò)程中,UCOS-II內(nèi)核會(huì)啟動(dòng)OSCtxSW進(jìn)行任務(wù)切換,確保進(jìn)入就緒態(tài)的任務(wù)始終是當(dāng)前任務(wù)優(yōu)先級(jí)最高的任務(wù)。匯編函數(shù)OSIntCtxSW是中斷級(jí)任務(wù)切換函數(shù)。若在任務(wù)執(zhí)行時(shí)有中斷發(fā)生,且中斷服務(wù)程序所執(zhí)行的任務(wù)比正在運(yùn)行的任務(wù)的優(yōu)先級(jí)更高時(shí),這時(shí)候中斷服務(wù)程序所執(zhí)行的任務(wù)就會(huì)進(jìn)入就緒態(tài),在中斷返回之前,UCOS-II內(nèi)核就會(huì)調(diào)用函數(shù)OSIntCtxSw。系統(tǒng)時(shí)鐘節(jié)拍的中斷服務(wù)函數(shù)是OSTickISR。處理器STM32F107VCT6中有一個(gè)專門用來(lái)定義系統(tǒng)時(shí)鐘節(jié)拍定時(shí)器SysTick。本移植過(guò)程用SysTick產(chǎn)生每200ms一次的時(shí)鐘節(jié)拍中斷。
STM32嵌入式MCU串口設(shè)備聯(lián)網(wǎng)技術(shù)在設(shè)計(jì)時(shí)既要實(shí)現(xiàn)TCP/IP通信,還要實(shí)現(xiàn)與串口交換數(shù)據(jù)。在設(shè)計(jì)中采用LwIP精簡(jiǎn)協(xié)議,將需要實(shí)現(xiàn)的各種功能分解成各自獨(dú)立的任務(wù),通過(guò)優(yōu)先級(jí)的調(diào)度,使各項(xiàng)任務(wù)能夠有條不紊的運(yùn)行[7]。任務(wù)之間可以通過(guò)信號(hào)量、消息隊(duì)列、消息郵箱等進(jìn)行通信,既保證了系統(tǒng)的實(shí)時(shí)性,又降低了實(shí)現(xiàn)的難度。LwIP協(xié)議棧將頂層應(yīng)用層之外的所有協(xié)議集和底層硬件驅(qū)動(dòng)都封裝在一個(gè)庫(kù)里,實(shí)現(xiàn)了在編寫程序過(guò)程中最大的通用性[8]。協(xié)議棧通過(guò)接口與底層硬件和頂層應(yīng)用通信,完成網(wǎng)絡(luò)協(xié)議棧的4層功能:物理層完成對(duì)STM32微處理器的以太網(wǎng)控制器驅(qū)動(dòng);接口層通過(guò)ARP協(xié)議完成對(duì)集成訪問(wèn)介質(zhì)MAC的辨識(shí);網(wǎng)絡(luò)層完成最基本的網(wǎng)絡(luò)傳輸協(xié)議,包括IP、ICMP等協(xié)議;網(wǎng)絡(luò)傳輸層管理網(wǎng)絡(luò)數(shù)據(jù)按照一定的格式進(jìn)行傳輸,LwIP為聯(lián)機(jī)網(wǎng)絡(luò)進(jìn)行高可靠性的數(shù)據(jù)通信提供了基礎(chǔ)。
3.4.1 系統(tǒng)初始化流程
STM32嵌入式MCU串口設(shè)備聯(lián)網(wǎng)技術(shù)的應(yīng)用程序設(shè)計(jì)如下:當(dāng)目標(biāo)板上電后,通過(guò)IAR編譯器將編譯無(wú)誤的程序代碼通過(guò)Jlink下載到MCU內(nèi),程序啟動(dòng)UCOS-II操作系統(tǒng),在操作系統(tǒng)內(nèi)對(duì)目標(biāo)板進(jìn)行串口,LED狀態(tài)燈等外設(shè)的初始化,LwIP協(xié)議棧的初始化,之后進(jìn)行UCOS-II實(shí)時(shí)操作系統(tǒng)的多任務(wù)調(diào)度,及任務(wù)間的消息的傳遞處理,從而實(shí)現(xiàn)串口到以太網(wǎng)口之間的數(shù)據(jù)的發(fā)送與接收,完成串口設(shè)備聯(lián)網(wǎng)技術(shù)的系統(tǒng)設(shè)計(jì)[9]。如圖4所示。
圖4 系統(tǒng)初始化流程Fig.4 System initialization process
3.4.2 RAW-API下客戶端與服務(wù)器
基于RAW-API進(jìn)行的TCP/IP編程,能夠很好地將TCP/IP協(xié)議棧的代碼和應(yīng)用程序的代碼相結(jié)合。程序以回調(diào)函數(shù)為基礎(chǔ)的事件驅(qū)動(dòng),同時(shí)TCP/IP代碼也能夠直接回調(diào)函數(shù)。TCP/IP代碼和應(yīng)用程序的代碼在同一個(gè)線程里面運(yùn)行。RAW-API函數(shù)在程序代碼的執(zhí)行時(shí)間更短,并且它在運(yùn)行時(shí)占用的內(nèi)存資源更少。在CODE和RAM都較小的嵌入式系統(tǒng)中,該方法有十分明顯的優(yōu)勢(shì)。
在STM32嵌入式串口設(shè)備聯(lián)網(wǎng)技術(shù)的系統(tǒng)設(shè)計(jì)測(cè)試過(guò)程中,利用網(wǎng)絡(luò)調(diào)試助手來(lái)模擬客戶端,服務(wù)器程序編寫在STM32MCU內(nèi)部。經(jīng)過(guò)測(cè)試,當(dāng)撥碼開(kāi)關(guān)分別設(shè)置0101、1010和1111(分別對(duì)應(yīng)為RS485、RS232和RS422信號(hào)的接入方式)時(shí),網(wǎng)絡(luò)調(diào)試助手能夠準(zhǔn)確無(wú)誤地接收串口發(fā)送過(guò)來(lái)的數(shù)據(jù),與此同時(shí),串口也能夠準(zhǔn)確無(wú)誤地接收客戶端發(fā)送來(lái)的數(shù)據(jù)。實(shí)驗(yàn)結(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ā)展的趨勢(shì),隨著科技的進(jìn)步,更多的自身具有聯(lián)網(wǎng)功能的設(shè)備將會(huì)逐步取代按照傳統(tǒng)通信方式工作的串口設(shè)備,但這個(gè)過(guò)程會(huì)比較漫長(zhǎng)。如何讓傳統(tǒng)的通信方式工作的串口設(shè)備在不改變現(xiàn)有串口設(shè)備軟硬件條件下能夠連接到網(wǎng)絡(luò),本文提供了一種經(jīng)濟(jì)實(shí)用的串口設(shè)備聯(lián)網(wǎng)的系統(tǒng)設(shè)計(jì)方案[10]。該方案結(jié)構(gòu)簡(jiǎn)單、性能可靠而且性價(jià)比高,經(jīng)過(guò)實(shí)際測(cè)試和驗(yàn)證,具有很好的應(yīng)用效果。
[1]周超.基于Cortex-M3的以太網(wǎng)串口服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué),2012.
[2]周鵬,黃燦,江楠.串口與網(wǎng)絡(luò)結(jié)合的通信方案的研究[J].計(jì)算機(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]張少兵,王會(huì)彬.基于ARMCortex M3的以太網(wǎng)串口服務(wù)器設(shè)計(jì)與實(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]任哲.嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II原理及應(yīng)用[M].2版.北京:北京航空航天大學(xué)出版社,2009.
[6]Jean J.Labrosse.嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II[M].2版.邵貝貝,譯.北京:北京航空航天大學(xué)出版社,2003.
[7]史濤,沈天飛,李斌.用于車速傳感器性能測(cè)試平臺(tái)的串行口-以太網(wǎng)橋設(shè)計(jì)[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].單片機(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é)報(bào),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.