, , ,
(1.西安工程大學(xué) 電子信息學(xué)院,西安 710048; 2.空軍工程大學(xué) 防空反導(dǎo)學(xué)院, 西安 710051)
隨著無處不在的“物聯(lián)網(wǎng)”通信時代的到來,世界上所有物體與物體之間的環(huán)境及狀態(tài)信息實時共享、智能化傳遞和處理均可通過互聯(lián)網(wǎng)主動進行信息交換?;谇度胧郊夹g(shù)的系統(tǒng)開發(fā)在物聯(lián)網(wǎng)應(yīng)用中得到了廣泛應(yīng)用,因此,如何針對嵌入式系統(tǒng)擴展以太網(wǎng)通信功能,對于實現(xiàn)全球物品信息的互通和實時共享具有重要的現(xiàn)實意義。
在嵌入式系統(tǒng)開發(fā)中,由于以太網(wǎng)絡(luò)具有通信距離遠、抗干擾能力強、數(shù)據(jù)傳輸穩(wěn)定可靠和傳輸速率高等優(yōu)點,因此以太網(wǎng)通信是進行遠程控制、大規(guī)模數(shù)據(jù)采集和組網(wǎng)管理的一種有效方式。然而目前很多低成本單片機控制器并沒有自帶以太網(wǎng)模塊,因此無法獲得以太網(wǎng)協(xié)議棧的硬件支持,所以針對這些低成本單片機通信接口擴展以太網(wǎng)通信功能成為研究嵌入式系統(tǒng)開發(fā)的重要技術(shù)。
鑒于對單片機擴展以太網(wǎng)通信功能的重要性,本文深入研究通過使用低成本單片機和以太網(wǎng)控制芯片來實現(xiàn)以太網(wǎng)通信的系統(tǒng)設(shè)計方法。在CH395芯片內(nèi)置的TCP/IP協(xié)議棧的基礎(chǔ)上,提出實現(xiàn)以太網(wǎng)通信功能的系統(tǒng)設(shè)計方案,該方案采用32位閃存微控制器STM32F407和以太網(wǎng)控制芯片CH395,詳細闡明了系統(tǒng)的軟硬件實現(xiàn),通過系統(tǒng)調(diào)試和測試分析論證了系統(tǒng)的可行性和有效性,具有很好的工程應(yīng)用價值。
以太網(wǎng)通信模塊設(shè)計屬于單片機的配套系統(tǒng)設(shè)計,該設(shè)計能夠使單片機實現(xiàn)快捷方便的以太網(wǎng)通信。因此在設(shè)計系統(tǒng)時應(yīng)該具備以下功能:滿足以太網(wǎng)TCP/IP協(xié)議,同時能夠?qū)崿F(xiàn)數(shù)據(jù)高速傳輸,并且在進行以太網(wǎng)通信時,確保經(jīng)過主處理器處理后的大量數(shù)據(jù)能夠可靠準(zhǔn)確傳輸至PC機。
為了使網(wǎng)絡(luò)協(xié)議簡單化同時實現(xiàn)以太網(wǎng)通信功能,所選取的以太網(wǎng)控制芯片最好能夠滿足各種網(wǎng)絡(luò)協(xié)議,所以本系統(tǒng)選用內(nèi)置各種協(xié)議的以太網(wǎng)控制芯片CH395;為了保證主處理器占用硬件資源少且傳輸速率快,系統(tǒng)選用具有SPI接口的單片機最小系統(tǒng)STM32F407。所以該系統(tǒng)主要由32位單片機最小系統(tǒng)STM32F407、以太網(wǎng)控制芯片CH395和PC機組成。以太網(wǎng)控制芯片CH395與單片機STM32F407之間通過SPI直連方式連接,以太網(wǎng)控制芯片CH395與PC機之間通過以太網(wǎng)接口連接,單片機STM32M407可直接通過命令調(diào)用以太網(wǎng)控制芯片CH395自帶的庫函數(shù),并采用CH395內(nèi)置的TCP/IP協(xié)議棧將單片機建成服務(wù)器,用上位機LabVIEW客戶端與其進行數(shù)據(jù)通信。為了驗證系統(tǒng)的可行性和有效性,系統(tǒng)的測試方案是在確保硬件連接正常的前提下,在LabVIEW客戶端通過統(tǒng)計通信數(shù)據(jù)讀取的起止時間實現(xiàn)以太網(wǎng)通信數(shù)據(jù)傳輸速率的測試,并實時觀察數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,基于這一測試來分析系統(tǒng)設(shè)計方案的有效性。圖1給出了基于STM32F407的以太網(wǎng)通信模塊的系統(tǒng)總體方案設(shè)計框圖。
在系統(tǒng)設(shè)計過程中,將以太網(wǎng)通信模塊的設(shè)計按系統(tǒng)功能分為硬件和軟件兩部分來實現(xiàn),下面分別給出兩部分的設(shè)計方案及其功能實現(xiàn)。
以太網(wǎng)通信模塊的硬件設(shè)計主要包括單片機最小系統(tǒng)STM32F407和以太網(wǎng)控制芯片CH395的硬件設(shè)計,圖2給出了以太網(wǎng)通信模塊的硬件連接示意圖。
圖2 以太網(wǎng)通信模塊的硬件連接示意圖
單片機最小系統(tǒng)STM32F407為硬件設(shè)計的核心,該器件支持通過以太網(wǎng)收發(fā)數(shù)據(jù),執(zhí)行IEEE 802.3-2002標(biāo)準(zhǔn),具有數(shù)據(jù)傳輸速率快、效率高、集成度高、配置靈活、可擴展等特點,能適應(yīng)各種不同客戶需求,尤其是內(nèi)部集成了高精度時鐘源及電壓調(diào)節(jié)功能,以及硬件實現(xiàn)增強型SPI串行接口,因此設(shè)計時可直接使用,該器件主要包括供電電路、JTAG電路、時鐘電路和復(fù)位電路的設(shè)計。系統(tǒng)供電電壓設(shè)為3.3V,電壓轉(zhuǎn)換芯片選用三端電源穩(wěn)壓管AMS1117-3.3,選用HSE振蕩器時鐘來驅(qū)動系統(tǒng)時鐘,外部晶振為25MHz。
CH395以太網(wǎng)模塊設(shè)計主要包括供電電路、SPI串口連接電路和帶網(wǎng)絡(luò)變壓器的RJ45接口電路。CH395芯片采用雙電源供電,分別為3.3 V和1.8 V,其轉(zhuǎn)換過程由LM117來實現(xiàn)。
設(shè)計采用的單片機STM32F407中的SPI1接口作為SPI通信的主控器件,與CH395以太網(wǎng)協(xié)議棧管理芯片的SPI串行接口直接連接,這樣可以滿足系統(tǒng)對傳輸速率快以及接口數(shù)目少的設(shè)計要求。設(shè)計時單片機STM32F407中的SPI片選輸出引腳、SPI時鐘輸出引腳分別驅(qū)動CH395芯片的SCS引腳和SCK引腳;單片機STM32F407中的SPI數(shù)據(jù)輸出引腳MOSI驅(qū)動CH395芯片的SDI引腳;而單片機STM32F407中的SPI數(shù)據(jù)輸入引腳MISO則連接CH395芯片的SDO引腳;為了判斷數(shù)據(jù)是否空閑,CH395的輸出INT 引腳連接單片機STM32F407的一個通用I/O引腳。
以太網(wǎng)控制芯片CH395與PC機之間通過常用的以太網(wǎng)接口RJ45進行數(shù)據(jù)傳輸,由于CH395內(nèi)置有以太網(wǎng)介質(zhì)傳輸層(MAC)和物理層(PHY),因此連接時可直接利用網(wǎng)線連接,而無需再通過路由器轉(zhuǎn)換。
在硬件平臺搭建好之后,需要編寫相應(yīng)的軟件應(yīng)用程序來實現(xiàn)以太網(wǎng)通信功能。系統(tǒng)軟件設(shè)計主要包括以單片機STM32F407與CH395構(gòu)成的嵌入式以太網(wǎng)服務(wù)器的軟件設(shè)計和PC機上LabVIEW客戶端的軟件設(shè)計兩大部分。其中嵌入式以太網(wǎng)服務(wù)器軟件設(shè)計包括兩部分,即通過STM32CubeMX對單片機STM32F407進行初始化設(shè)置程序以及通過Keil-MDK5編寫的單片機最小系統(tǒng)STM32F407程序;基于LabVIEW客戶端軟件設(shè)計也包括兩部分,即前面板程序設(shè)計和后面板程序設(shè)計。
2.2.1 嵌入式以太網(wǎng)服務(wù)器的軟件設(shè)計
以太網(wǎng)服務(wù)器的程序設(shè)計包括STM32CubeMX程序設(shè)計和Keil MDK5程序設(shè)計。其中基于STM32CubeMX的STM32F407初始化程序設(shè)計可生成的初始化所有外設(shè)配置,包括GPIO初始化、USART1初始化和SPI初始化。其中GPIO初始化首先要初始化GPIO時鐘,然后指定引腳的模式、速度、初始輸出,而針對復(fù)用輸出功能,則必須將端口配置為復(fù)用功能輸出模式,本文初始化引腳為PA4、PA12,復(fù)用功能輸出模式為推挽輸出。USART1初始化配置串口波特率為115200,串口收發(fā)模式,數(shù)據(jù)長度為8bit。SPI初始化需設(shè)置SPI工作方式為全雙工模式,數(shù)據(jù)長度為8bit,時鐘設(shè)置為二分頻。
基于Keil MDK5的單片機STM32F407程序設(shè)計包括主程序、CH395初始化程序、SPI驅(qū)動程序以及中繼服務(wù)程序。下面分別介紹各部分程序的設(shè)計流程:
1)主程序設(shè)計。
首先需要對主處理器STM32F407進行初始化,再對CH395初始化,并初始化Socket為服務(wù)器模式。單片機STM32F407的初始化過程包括晶振初始化、串口初始化、SPI初始化;CH395的初始化過程包括設(shè)置CH395的物理層地址,設(shè)置CH395的網(wǎng)關(guān)IP、IP地址、子網(wǎng)掩碼,發(fā)送命令CH395CMDInitCH395對CH395初始化,當(dāng)CH395接收命令后,初始化內(nèi)部TCP/IP協(xié)議棧,初始化物理層地址且物理層被初始化為自動協(xié)商模式;最后初始化Scoket為TCP服務(wù)器模式,在TCP服務(wù)器模式下,Socket的整個通訊過程可描述為:服務(wù)器一直監(jiān)聽是否有端口連接請求,不會產(chǎn)生超時中斷,如果TCP連接成功,CH395芯片則會產(chǎn)生中斷,此時單片機最小系統(tǒng)STM32F407可發(fā)送命令CH395GetIPInf來獲取LabVIEW客戶端的IP地址和端口號,當(dāng)連接建立成功之后,客戶端和服務(wù)器就可以進行正常通信,當(dāng)連接未建立成功前無法進行數(shù)據(jù)通信操作。單片機STM32F407的主程序設(shè)計流程如圖3所示。
圖3 單片機STM32F407的主程序設(shè)計流程圖
2)SPI驅(qū)動程序設(shè)計。
當(dāng)連接建立成功后,要實現(xiàn)SPI接口向CH395芯片的數(shù)據(jù)傳輸,必須先對SPI端口進行配置,需要對CH395進行參數(shù)初始化以及硬件初始化。服務(wù)器與客戶端之間的數(shù)據(jù)傳輸可通過CH395提供的Socket程序?qū)崿F(xiàn),Socket程序包含應(yīng)用層、中間層、命令數(shù)據(jù)層和SPI層共4個層次。其中應(yīng)用層用于設(shè)置網(wǎng)絡(luò)協(xié)議,創(chuàng)建Socket,連接進程,處理中斷等,主要由CH395Init()、CH395SocketInitOpen()和CH395GlobalInterrupt()三個函數(shù)來實現(xiàn);中間層可實現(xiàn)網(wǎng)絡(luò)具體操作,并向上層提供網(wǎng)絡(luò)參數(shù)設(shè)置功能,其中硬件測試可調(diào)用CH395CMDCheckExist()函數(shù)實現(xiàn),還可調(diào)用相關(guān)函數(shù)實現(xiàn)CH395初始化、Socket初始化和中斷處理;命令數(shù)據(jù)層可調(diào)用SPI硬件層接口,向CH395發(fā)送命令和數(shù)據(jù),同時接收CH395返回的數(shù)據(jù),主要包括寫命令函數(shù)、寫數(shù)據(jù)函數(shù)以及讀數(shù)據(jù)函數(shù);SPI層是整個程序的最底層,可向上層提供讀寫操作時序控制,進而實現(xiàn)數(shù)據(jù)傳輸功能。需要注意的是在啟動Socket進程之前,必須對Socket進行初始化配置。
3)中斷驅(qū)動程序設(shè)計。
中斷驅(qū)動程序設(shè)計主要針對系統(tǒng)出現(xiàn)的情況進行處理,使程序能夠正常運行。具體包括CH395全局中段和CH395 Socket中斷,且CH395 Socket中斷是在CH395全局中段中被調(diào)用。
CH395全部中斷程序主要是對系統(tǒng)運行中的終端進行判斷和處理,保證程序能夠正常運行,判斷是否為CH395的不可達狀態(tài),IP地址判斷和PHY狀態(tài)判斷,最后產(chǎn)生Socket中斷。而Socket中斷是在全局終端中被調(diào)用,主要是對緩沖區(qū)的狀態(tài)和發(fā)送的數(shù)據(jù)長度進行判定,也就是對系統(tǒng)運行狀態(tài)進行判定而是系統(tǒng)整體設(shè)計能夠正常運行。Socket中斷流程如下:在數(shù)據(jù)傳輸前首先選擇數(shù)據(jù)傳輸模式(接收/發(fā)送),如果為發(fā)送模式,則給CH395寫入若干數(shù)據(jù),然后CH395將數(shù)據(jù)封裝在TCP的數(shù)據(jù)部分,在TCP打包數(shù)據(jù)傳輸?shù)倪^程中沒正確傳輸一包數(shù)據(jù)就會產(chǎn)生相應(yīng)的I/O狀態(tài)反饋給主控芯片表示數(shù)據(jù)傳輸成功,當(dāng)再次傳輸數(shù)據(jù)時CH395必須在I/O口置高后才能再次寫入數(shù)據(jù)。如果為接收模式,則將數(shù)據(jù)粘貼到Socket的接收緩沖區(qū),并產(chǎn)生相應(yīng)I/O狀態(tài),STM32F407查詢到相應(yīng)I/O狀態(tài)后,可發(fā)送指令來獲取緩沖區(qū)數(shù)據(jù)。
2.2.2 基于LabVIEW客戶端的軟件設(shè)計
LabVIEW客戶端程序設(shè)計主要基于LabVIEW的GUI軟件來設(shè)計,由于該軟件自帶TCP/IP協(xié)議棧,因此,LabVIEW作為客戶端可與以太網(wǎng)服務(wù)器進行以太網(wǎng)通信。
LabVIEW客戶端的軟件設(shè)計主要分為前面板程序設(shè)計和后面板程序設(shè)計。其中LabVIEW客戶端前面板程序設(shè)計包括:數(shù)據(jù)傳輸啟動、數(shù)據(jù)傳輸停止、端口設(shè)置、IP地址設(shè)置、接收時間顯示、接收后時間顯示、時間差顯示、傳輸速率顯示、數(shù)據(jù)傳輸波形顯示以及傳輸數(shù)據(jù)顯示等,圖4為同時進行收發(fā)數(shù)據(jù)時的LabVIEW客戶端前面板設(shè)計。
圖4 LabVIEW客戶端前面板程序設(shè)計
LabVIEW客戶端后面板程序設(shè)計包括端口設(shè)置、IP地址設(shè)置、客戶端數(shù)據(jù)讀取數(shù)等。程序中數(shù)據(jù)傳輸速率的計算過程是:從數(shù)據(jù)傳輸開始時記錄電腦時間,在數(shù)據(jù)傳輸結(jié)束后再記錄電腦時間,前后兩次時間差即為數(shù)據(jù)傳輸時間,傳輸數(shù)據(jù)量的大小/傳輸?shù)臅r間可表示為數(shù)據(jù)傳輸速率,并將數(shù)據(jù)傳輸速率顯示在前面板。LabVIEW客戶端同時收發(fā)數(shù)據(jù)的后面板程序設(shè)計框圖如圖5所示,其中左邊的1460是每次讀取數(shù)據(jù)包的大小,右邊的1460為該發(fā)送數(shù)組的維數(shù)。需要注意的是在打開TCP連接前一定要進行端口和IP地址的配置。
圖5 LabVIEW客戶端后面板程序設(shè)計
在對整個系統(tǒng)的軟硬件設(shè)計完成之后,就可將各部分硬件連接起來,組成完整的系統(tǒng)。本系統(tǒng)的調(diào)試包括硬件調(diào)試和軟件調(diào)試兩部分,其中硬件調(diào)試為系統(tǒng)調(diào)試的第一步,主要是在系統(tǒng)上電之前,檢查各個器件引腳與其它信號連線是否短路,連接是否正確。在確保系統(tǒng)硬件連接無誤后,就可通過Keil、LabVIEW軟件對系統(tǒng)進行整體的軟件測試。在進行軟件測試前,首先在Keil MDK5軟件中編譯單片機STM32F407程序,如果編譯成功則下載程序至單片機STM32F407上,然后檢查LabVIEW客戶端的GUI軟件程序是否運行正常,排查后面板程序設(shè)計的連線是否正確。在確保軟件程序運行正常之后,就可通過LabVIEW客戶端的GUI軟件界面對端口、地址參數(shù)進行配置,運行LabVIEW客戶端軟件程序,同時查看單片機最小系統(tǒng)STM32F407是否能夠接收和發(fā)送信號,GUI軟件界面是否顯示實時傳輸速率,并觀察發(fā)送數(shù)據(jù)是否與所接收數(shù)據(jù)一致。
為了測試系統(tǒng)的以太網(wǎng)通信功能,以發(fā)送數(shù)據(jù)波形為例,測試以太網(wǎng)通信模塊的數(shù)據(jù)傳輸速率。其過程如下:首先對LabVIEW客戶端后面板程序添加基本函數(shù)器,使之產(chǎn)生正弦波數(shù)據(jù),然后打開啟動開始按鈕,將該數(shù)據(jù)從上位機的LabVIEW客戶端GUI軟件發(fā)送至單片機STM32F407,再從單片機STM32F407發(fā)送至上位機LabVIEW客戶端,同時觀察波形一致性并測量數(shù)據(jù)傳輸率,得到的前面板顯示圖如圖6所示。由圖可知,設(shè)計的以太網(wǎng)通信模塊工作穩(wěn)定,數(shù)據(jù)傳輸可靠,測試得到的上行數(shù)據(jù)傳輸速率為16781.6 b/s,下行數(shù)據(jù)傳輸速率為15687b/s。由于測試時上位機LabVIEW客戶端與單片機最小系統(tǒng)STM32F407同時進行發(fā)送和接收數(shù)據(jù),因此該情況下的數(shù)據(jù)傳輸速率并沒有單次發(fā)送或單次接收數(shù)據(jù)速率快,經(jīng)測試本文設(shè)計的系統(tǒng)在進行單次發(fā)送或單次接收數(shù)據(jù)時其傳輸速率均大于285 000 B/s。
圖6 收發(fā)正弦波數(shù)據(jù)時的LabVIEW客戶端前面板顯示圖
本文針對物聯(lián)網(wǎng)應(yīng)用中的嵌入式系統(tǒng)開發(fā)問題,提出了一種基于STM32F407的以太網(wǎng)通信模塊設(shè)計方法,給出了系統(tǒng)總體設(shè)計方案,并詳細闡述了系統(tǒng)的軟硬件設(shè)計方案以及系統(tǒng)測試方法。將低成本單片機STM32F407與以太網(wǎng)控制芯片CH395構(gòu)成嵌入式以太網(wǎng)服務(wù)器與PC機上的LabVIEW客戶端之間實現(xiàn)以太網(wǎng)通信,在保證設(shè)計要求和通用性的同時,實現(xiàn)了數(shù)據(jù)的高速可靠傳輸,降低了嵌入式系統(tǒng)的開發(fā)難度,縮短了開發(fā)周期。本設(shè)計對于嵌入式系統(tǒng)開發(fā)在物聯(lián)網(wǎng)中的應(yīng)用具有很好的參考價值。
[1] 吉順平.工業(yè)以太網(wǎng)與物聯(lián)網(wǎng)互聯(lián)模型的研究[J].計算機測量與控制,2011,19(8):1998-2001.
[2] 楊 陽. 無線網(wǎng)絡(luò)的嵌入式接口設(shè)計[D].武漢:湖北工業(yè)大學(xué),2011.
[3] 張 潔,朱 磊,郭林源.單片機擴展CH395以太網(wǎng)控制器的通信速率測試[J].國外電子測量技術(shù),2017,36(7):90-94.
[4] 于春雪.基于STM32F107的高速以太網(wǎng)接口設(shè)計與應(yīng)用 [J].電聲技術(shù),2011,35(9):63-67.
[5] 張 京,朱天成,景濤濤等.基于物聯(lián)網(wǎng)的溫濕度遠程監(jiān)控的研究[J].信息通信,2015(9):120-121.
[6] 曾文兵.基于STM32F407的視頻采集與傳輸系統(tǒng)設(shè)計[D].武漢:華中師范大學(xué),2016.
[7] 方立軍,陳衛(wèi)松,章良玉等.基于STM32 的以太網(wǎng)網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[J].無線電通信技術(shù),2017,43(5):91-94.
[8] 王湘南.基于STM32的以太網(wǎng)通信模塊設(shè)計[D].西安:西安工程大學(xué),2016.
[9] 秦 磊,孫 曼,王小亮.CH395與SPI接口的以太網(wǎng)模塊設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2015(7):61-64.