,,,
(西安工程大學(xué) 電子信息學(xué)院,西安 710048)
傳統(tǒng)的點(diǎn)對(duì)點(diǎn)通信方式,不論從經(jīng)濟(jì)成本還是從今后的系統(tǒng)維護(hù)上來(lái)說(shuō),都給工作者帶來(lái)一定的困難。然而,隨著網(wǎng)絡(luò)通信時(shí)代的發(fā)展,利用單片機(jī)擴(kuò)展以太網(wǎng)通信,實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)墓δ芤呀?jīng)成為一種普遍的現(xiàn)象。例如,新余鋼鐵有限責(zé)任公司利用以太網(wǎng)資源的優(yōu)勢(shì),提出利用以太網(wǎng)通信的方式完成數(shù)據(jù)傳輸?shù)墓δ躘9]。單片機(jī)以太網(wǎng)接入方案一般按TCP/IP協(xié)議棧的不同分為兩大類:第一類是傳統(tǒng)的軟件TCP/IP協(xié)議棧方案,即由MCU+MAC+PHY再加入網(wǎng)絡(luò)接口實(shí)現(xiàn)以太網(wǎng)的物理連接,通過(guò)在主控芯片中植入TCP/IP協(xié)議代碼實(shí)現(xiàn)通信及上層應(yīng)用;第二類是硬件TCP/IP協(xié)議棧方案,即由MCU+硬件協(xié)議棧芯片(內(nèi)含MAC和PHY)直接加網(wǎng)絡(luò)接口,所有處理TCP/IP協(xié)議的工作都是通過(guò)MCU的硬件協(xié)議棧芯片來(lái)完成[1-3]。
從中斷請(qǐng)求次數(shù)方面來(lái)說(shuō),硬件協(xié)議棧的加入?yún)f(xié)助單片機(jī)處理了幾乎所有的TCP/IP協(xié)議工作,不僅極大地減少了單片機(jī)的中斷次數(shù),讓單片機(jī)騰出更多資源去完成其它工作,而且硬件化的電路處理協(xié)議會(huì)更加快速、穩(wěn)定;從安全性方面來(lái)說(shuō),硬件化的邏輯門(mén)電路來(lái)處理TCP/IP協(xié)議是不可攻擊的,充分彌補(bǔ)了網(wǎng)絡(luò)協(xié)議安全性不足的短板。所以在這里選擇了硬件TCP/IP協(xié)議棧方案,就是一種基于STM32F407的應(yīng)用系統(tǒng)通過(guò)SPI串口直接進(jìn)行外部擴(kuò)展以太網(wǎng)的形式,快速方便地實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸。
近年來(lái)開(kāi)發(fā)STM32比較流行的一個(gè)工具STM32CubeMX,它是意法半導(dǎo)體的主動(dòng)原創(chuàng)工具,可以縮短開(kāi)發(fā)的工作時(shí)間,降低費(fèi)用,它也是一個(gè)圖形化的工具,配置和完成開(kāi)發(fā)初期關(guān)于芯片相關(guān)的一些初始化代碼[8]。同時(shí)也集成了一個(gè)全面的軟件平臺(tái),支持STM32每一個(gè)系列的MCU開(kāi)發(fā)??焖偻瓿沙跏蓟a的配置,提高了代碼編寫(xiě)速度。W5500是WIZnet公司推出的一款內(nèi)部集成硬件協(xié)議棧的高性能以太網(wǎng)接口芯片,它擁有早期芯片的所有主要優(yōu)勢(shì)。全硬件協(xié)議棧技術(shù)采用硬件邏輯門(mén)電路實(shí)現(xiàn)復(fù)雜的TCP/IP協(xié)議簇,與傳統(tǒng)協(xié)議棧相比,它卸載了用于處理協(xié)議棧的MCU部分的線程,節(jié)約了MCU內(nèi)部ROM等硬件資源,具有應(yīng)用快速簡(jiǎn)單、安全性好、可靠性高等優(yōu)勢(shì);內(nèi)部集成了MAC和PHY工藝,使得接入以太網(wǎng)方案的硬件設(shè)計(jì)更為簡(jiǎn)捷和高效。W5500提供了SPI(外設(shè)串行接口),從而能夠更加容易與外設(shè)MCU整合,方便開(kāi)發(fā)者使用。
本文搭建了基于LabVIEW和STM32F4的軟硬件平臺(tái)系統(tǒng)進(jìn)行測(cè)試。首先采用ST開(kāi)發(fā)的STM32CubeMX來(lái)進(jìn)行STM32F407的相應(yīng)初始化配置,結(jié)合改進(jìn)前后的W5500庫(kù)函數(shù)快速完成從機(jī)端發(fā)送數(shù)據(jù)的程序配置,使用PC端的LabVIEW完成主機(jī)端的定時(shí)接收數(shù)據(jù)程序配置,通過(guò)統(tǒng)計(jì)通信數(shù)據(jù)讀取的起止時(shí)間實(shí)現(xiàn)以太網(wǎng)通信數(shù)據(jù)傳輸速率的測(cè)試。對(duì)比W5500庫(kù)函數(shù)改進(jìn)前后,其通信速率相對(duì)改進(jìn)前提高近2倍。
基于STM32CubeMX的W5500以太網(wǎng)模塊通信速率測(cè)試系統(tǒng)主要包括STM32F407應(yīng)用系統(tǒng)、W5500以太網(wǎng)控制器、PC端的LabVIEW。首先,W5500以太網(wǎng)控制芯片與STM32F407單片機(jī)通過(guò)SPI直連方式連接,W5500以太網(wǎng)控制芯片與PC機(jī)端通過(guò)以太網(wǎng)口連接,STM32F407單片機(jī)可直接通過(guò)命令調(diào)用以太網(wǎng)控制芯片W5500官方庫(kù)函數(shù),且采用以太網(wǎng)控制芯片內(nèi)置的TCP/IP協(xié)議棧,將其單片機(jī)作為服務(wù)器端,利用上位機(jī)LabVIEW作為客戶端來(lái)進(jìn)行數(shù)據(jù)通信。為了驗(yàn)證設(shè)計(jì)方案的有效性及測(cè)試通信速率,搭建了基于LabVIEW和STM32F4的軟硬件平臺(tái)系統(tǒng)進(jìn)行測(cè)試。在保證硬件連接正確和通信成功的前提下,統(tǒng)計(jì)通信數(shù)據(jù)讀取的起止時(shí)間并實(shí)時(shí)觀察以太網(wǎng)通信數(shù)據(jù)傳輸速率?;赟TM32CubeMX的W5500以太網(wǎng)通信的系統(tǒng)總體方案如圖1所示。
圖1 測(cè)試系統(tǒng)方案框圖
圖2 測(cè)試系統(tǒng)硬件連接圖
基于STM32CubeMX的W5500快速以太網(wǎng)通信硬件設(shè)計(jì)主要是W5500以太網(wǎng)模塊通過(guò)SPI總線與STM32F407單片機(jī)直接連接。測(cè)試系統(tǒng)硬件連接如圖2所示。W5500提供了新的SPI高速外設(shè)串行接口作為主機(jī)接口,同時(shí)SPI在芯片的引腳占用4根線,節(jié)省了芯片的引腳,也在PCB的布局上節(jié)省了空間,W5500以太網(wǎng)模塊SPI的4根線SDI(數(shù)據(jù)輸入)、SDO(數(shù)據(jù)輸出)、SCLK(時(shí)鐘)、CS(片選)連接單片機(jī)STM32F4上SPI接口的4個(gè)引腳。在SPI進(jìn)行數(shù)據(jù)傳輸?shù)倪^(guò)程中,W5500提供兩種數(shù)據(jù)傳輸長(zhǎng)度可選的數(shù)據(jù)傳輸方式,數(shù)據(jù)固定長(zhǎng)度和數(shù)據(jù)長(zhǎng)度可選的數(shù)據(jù)傳輸模式。W5500以太網(wǎng)模塊自帶的RJ45網(wǎng)口與路由器連接,從而有一定的IP、端口號(hào),方便與上位機(jī)完成通信功能??勺償?shù)據(jù)長(zhǎng)度模式W5500與STM32F407硬件接口框圖如圖3所示。
圖3 可變數(shù)據(jù)長(zhǎng)度模式W5500與STM32F407硬件接口框圖
基于STM32CubeMX的W5500快速以太網(wǎng)通信的軟件程序設(shè)計(jì)主要包括基于STM32F407服務(wù)器端的軟件程序設(shè)計(jì)和基于LabVIEW客戶端的軟件程序設(shè)計(jì)。其中,服務(wù)器端的軟件程序包括STM32CubeMX初始化、W5500初始化以及移植程序。
3.1.1 STM32CubeMX的初始化配置
該方案是以STM32F407處理器為基礎(chǔ)來(lái)外擴(kuò)W5500以太網(wǎng)控制器,為了提升開(kāi)發(fā)速率,這里選擇利用STM32CubeMX快速完成STM32F407初始化配置程序的設(shè)計(jì)。采用STM32CubeMX軟件進(jìn)行程序配置的步驟如下:
① 打開(kāi)STM32CubeMX軟件,點(diǎn)擊New Project,新建工程。
② 根據(jù)MCU型號(hào)對(duì)板子進(jìn)行選擇,本方案所選用的是STM32F407ZET6。首先,在Series中選擇STM32F4,Lin中選擇STM32F407/417,然后就出現(xiàn)STM32F407ZETx這個(gè)選項(xiàng),雙擊它,進(jìn)入引腳配置界面,直接對(duì)引腳右鍵勾選所需的配置,十分方便。
③ 首先進(jìn)行SPI(外設(shè)串行接口)配置,這里選擇使用STM32F407ZETx的SPI1接口與W5500網(wǎng)絡(luò)適配板進(jìn)行連接,并選擇Full-Duplex Master模式,接著在Clock Configuration選項(xiàng)配置SPI1的工作時(shí)鐘頻率,為了提升通信速率,將SPI1時(shí)鐘由21 MHz提升為42 MHz;再進(jìn)行RCC時(shí)鐘配置,勾選Crystal/Ceramic Resonator選項(xiàng);最后進(jìn)行串口配置,這里選擇USART1,勾選Asynchronous模式。
利用STM32CubeMX方便快速地完成STM32F407初始化配置,點(diǎn)擊生成工程文件按鈕,生成工程文件。之后用編譯器打開(kāi),方便編寫(xiě)所需代碼。
3.1.2 W5500以太網(wǎng)初始化配置及移植程序設(shè)計(jì)
對(duì)于W5500以太網(wǎng)模塊的程序設(shè)計(jì),首先需要去WIZnet官網(wǎng)下載W5500驅(qū)動(dòng)源碼,再將其驅(qū)動(dòng)源碼移植到工程文件目錄,主要是添加socket.c、w5500.c、wizchip_conf.c三個(gè)文件。其中,socket.c主要介紹W5500的Socket相關(guān)配置函數(shù),比如Socket的打開(kāi)、關(guān)閉、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)等;w5500.c主要介紹W5500的寄存器讀寫(xiě)過(guò)程;wizchip_conf.c主要配置W5500的MAC、IP地址,以及基本的數(shù)據(jù)讀寫(xiě)過(guò)程、復(fù)位設(shè)置函數(shù)等。在移植W5500官方庫(kù)函數(shù)時(shí),為避免w5500.c中引用#include"stm32f4xx_hal.h"與#include"stm32f4xx_hal_spi.h"時(shí),與stm32f407xx.h文件中聲明的IMR與RCR產(chǎn)生沖突,并且在系統(tǒng)板子不改變的情況下,對(duì)其W5500原始庫(kù)函數(shù)進(jìn)行了相應(yīng)的改進(jìn),即將w5500.h中定義和涉及的IMR與RCR替換成了W5500_IMR與W5500_RCR。為了防止當(dāng)更大量數(shù)據(jù)存在時(shí),可能有數(shù)據(jù)丟失情況,在這里選擇通過(guò)提高通信速率來(lái)避免。所以在w5500.c文件中,重新修改了以下4個(gè)函數(shù):WIZCHIP_READ()、WIZCHIP_WRITE()、WIZCHIP_READ_BUF()、WIZCHIP_WRITE_BUF()。在這里就其中一個(gè)函數(shù)做說(shuō)明,例如在WIZCHIP_WRITE()函數(shù)只定義了WIZCHIP_CRITICAL_ENTER()和WIZCHIP.CS._select()函數(shù),修改成在這兩個(gè)函數(shù)前面添加8位整型的發(fā)送數(shù)組和接收數(shù)組,即send_array[4]和receive_array[4],修改的主要作用是將SPI的逐一查詢傳輸方式改為按幀查詢傳輸方式,提高一定數(shù)據(jù)傳輸通信速率。具體的修改如下所示,首先展示出修改前的WIZCHIP_WRITE()函數(shù)程序代碼:
void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb){
WIZCHIP_CRITICAL_ENTER();
WIZCHIP.CS._select();
#if((_WIZCHIP_IO_MODE_&_WIZCHIP_IO_MODE_SPI_))
#if(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_SPI_VDM_)
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_);
#elif( _WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_SPI_FDM_)
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_FDM_OP_LEN1_);
#else
#error "Unsupported _WIZCHIP_IO_SPI_ inW5500 !!!"
#endif
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000)>>16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00)>>8);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF)>>0);
WIZCHIP.IF.SPI._write_byte(wb);
#elif ((_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_))
#if(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_BUS_DIR_)
#elif(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_BUS_INDIR_)
#else
#error "Unsupported _WIZCHIP_IO_MODE_BUS_ inW5500 !!!"
#endif
#else
#error "Unknown _WIZCHIP_IO_MODE_ in W5500. !!!"
#endif
WIZCHIP.CS._deselect();
WIZCHIP_CRITICAL_EXIT();
}
接著展示出修改后的WIZCHIP_WRITE()函數(shù)程序代碼:
void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb){
unsigned char send_array[4],receive_array[4];
WIZCHIP_CRITICAL_ENTER();
WIZCHIP.CS._select();
#if((_SPI_DMA_ & 0x01))
#if((_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_))
#if(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_SPI_VDM_)
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_);
#elif(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_SPI_FDM_)
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_FDM_OP_LEN1_);
#else
#error "Unsupported _WIZCHIP_IO_SPI_ in W5500 !!!"
#endif
send_array[0]=(AddrSel & 0x00FF0000)>>16;
send_array[1]=(AddrSel & 0x0000FF00)>>8;
send_array[2]=(AddrSel & 0x000000FF)>>0;
send_array[3]=wb;
HAL_SPI_TransmitReceive(&hspi1,send_array,receive_array,4,100);
#elif ((_WIZCHIP_IO_MODE_&_WIZCHIP_IO_MODE_BUS_))
#if(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_BUS_DIR_)
#elif(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_BUS_INDIR_)
#else
#error "Unsupported _WIZCHIP_IO_MODE_BUS_ in W5500 !!!"
#endif
#else
#error "Unknown _WIZCHIP_IO_MODE_ in W5500 !!!"
#endif
#else
#if((_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_))
#if(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_SPI_VDM_)
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_);
#elif(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_SPI_FDM_)
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_FDM_OP_LEN1_);
#else
#error "Unsupported _WIZCHIP_IO_SPI_ in W5500 !!!"
#endif
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000)>>16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00)>>8);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF)>>0);
WIZCHIP.IF.SPI._write_byte(wb);
#elif ((_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) )
#if(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_BUS_DIR_)
#elif(_WIZCHIP_IO_MODE_==_WIZCHIP_IO_MODE_BUS_INDIR_)
#else
#error "Unsupported _WIZCHIP_IO_MODE_BUS_ in W5500 !!!"
#endif
#else
#error "Unknown _WIZCHIP_IO_MODE_ in W5500. !!!"
#endif
#endif
WIZCHIP.CS._deselect();
WIZCHIP_CRITICAL_EXIT();
}
其他三個(gè)函數(shù)修改思路類似于WIZCHIP_WRITE()函數(shù)。具體的代碼在這里就不展出了。
其中,W5500的初始化過(guò)程為:首先主處理器配置與W5500相連接的I/O端口,配置I/O端口的輸入輸出方式;主處理器與W5500之間采用SPI串行接口方式,因此需要編寫(xiě)與SPI通信相關(guān)的API函數(shù),即在通信過(guò)程中用到的讀寫(xiě)數(shù)據(jù)函數(shù);通過(guò)SPI接口配置W5500的各寄存器值,具體包括W5500網(wǎng)關(guān)地址寄存器、子網(wǎng)掩碼寄存器、模塊物理地址寄存器和IP地址寄存器;最后需要配置W5500為T(mén)CP服務(wù)器端模式,同時(shí)還需要設(shè)置發(fā)送緩存區(qū)和接收緩存區(qū)的大小,進(jìn)行好所有初始化配置后即可對(duì)網(wǎng)關(guān)服務(wù)器進(jìn)行Socket設(shè)置,當(dāng)Socket處于初始化完成SOCK_INIT狀態(tài),此時(shí),作為T(mén)CP服務(wù)器就要執(zhí)行l(wèi)isten()函數(shù)來(lái)偵聽(tīng)端口。
3.1.3 W5500以太網(wǎng)通信模塊的主程序設(shè)計(jì)
對(duì)于STM32F407擴(kuò)展W5500以太網(wǎng)模塊的主程序設(shè)計(jì),包括STM32CubeMX程序設(shè)計(jì)和Keil MDK5程序設(shè)計(jì)。程序開(kāi)始后,首先STM32F407單片機(jī)進(jìn)行初始化,具體包括:HAL_Init()函數(shù)完成配置Flash預(yù)取功能;SystemClock_Config()函數(shù)實(shí)現(xiàn)外部時(shí)鐘晶振時(shí)鐘配置;MX_GPIO_Init()函數(shù)初始化所有I/O外設(shè);MX_SPI1_Init()函數(shù)初始化SPI1外設(shè)串行接口;MX_USART1_UART_Init()函數(shù)進(jìn)行串口的初始化。再對(duì)W5500進(jìn)行初始化,包括設(shè)置其物理地址、網(wǎng)關(guān)IP、IP地址、子網(wǎng)掩碼、初始化內(nèi)置TCP/IP協(xié)議棧,并初始化Socket為T(mén)CP服務(wù)器模式。在TCP服務(wù)器模式下,檢查PHY連接是否成功,如連接成功,進(jìn)行網(wǎng)絡(luò)通信參數(shù)配置,接著打開(kāi)Socket,進(jìn)而判斷TCP連接是否成功,如連接成功,則認(rèn)為Socket通信成功,W5500芯片產(chǎn)生中斷,那么清除中斷標(biāo)志位,客戶端和服務(wù)器可以正常通信,進(jìn)行收發(fā)數(shù)據(jù)的操作,反之,不能進(jìn)行收發(fā)數(shù)據(jù)。W5500以太網(wǎng)通信模塊的主程序設(shè)計(jì)流程圖如圖4所示。
圖4 STM32CubeMX的W5500以太網(wǎng)通信主程序流程圖
LabVIEW的客戶端程序主要是基于LabVIEW的GUI軟件設(shè)計(jì),通過(guò)自帶的TCP/IP協(xié)議完成與STM32F407單片機(jī)和W5500以太網(wǎng)模塊作為服務(wù)器的通信程序測(cè)試。
圖6 LabVIEW客戶端后面板
LabVIEW客戶端的軟件程序設(shè)計(jì)主要包括前面板程序設(shè)計(jì)和后面板程序設(shè)計(jì)。其中,前面板程序設(shè)計(jì)主要包括:開(kāi)始、結(jié)束以及接收1000包TCP數(shù)據(jù)的時(shí)間、TCP 1000次讀取次數(shù)、通信傳輸速率以及數(shù)據(jù)傳輸波形顯示功能。圖5為客戶端接收服務(wù)器端發(fā)送的數(shù)據(jù)的前面板展示。
圖5 LabVIEW客戶端前面板
基于LabVIEW客戶端的后面板程序設(shè)計(jì)包括IP地址設(shè)置、端口設(shè)置、客戶端數(shù)據(jù)讀取數(shù)等。首先通過(guò)打開(kāi)TCP函數(shù)指定IP地址192.168.1.128和端口號(hào)5 000。當(dāng)與服務(wù)器端通信完成后,開(kāi)始建立連接數(shù)據(jù)傳輸,通過(guò)讀取TCP數(shù)據(jù)函數(shù)一次性讀取2 048個(gè)字節(jié),記錄開(kāi)始接收數(shù)據(jù)的時(shí)間,當(dāng)連續(xù)循環(huán)讀取1000次,接收完成后,再去獲取結(jié)束時(shí)間,計(jì)算出數(shù)據(jù)循環(huán)1000次所需時(shí)間,進(jìn)而完成通信速率的測(cè)試。通信速率為通過(guò)數(shù)據(jù)傳輸大小/(結(jié)束時(shí)間-開(kāi)始時(shí)間),得到傳輸速率大小并顯示在前面板上。圖6為客戶端接收服務(wù)器端發(fā)送數(shù)據(jù)的后面板展示。
在本系統(tǒng)設(shè)計(jì)方案中,搭建的基于LabVIEW和STM32F4的軟硬件平臺(tái)測(cè)試系統(tǒng)主要包括STM32F4系列的STM32F407應(yīng)用系統(tǒng)、W5500以太網(wǎng)控制器、PC端的LabVIEW。其中,STM32F407應(yīng)用系統(tǒng)通過(guò)SPI(外設(shè)串行接口)外擴(kuò)W5500以太網(wǎng)控制器作為服務(wù)端,完成給客戶端發(fā)送數(shù)據(jù);PC端的LabVIEW作為客戶端,完成接收服務(wù)器端發(fā)送的數(shù)據(jù)。 W5500再與路由器通過(guò)RJ45端口用雙絞線連接,聯(lián)合TCP/IP協(xié)議,進(jìn)行調(diào)試并完成通信速率的測(cè)試。
在進(jìn)行測(cè)試時(shí),首先調(diào)試客戶端與服務(wù)器端的通信問(wèn)題,在這里,同樣選擇由上位機(jī)LabVIEW來(lái)完成通信程序設(shè)計(jì),聯(lián)合TCP/IP協(xié)議,當(dāng)結(jié)果顯示表明通信測(cè)試成功。則接著對(duì)其進(jìn)行通信速率測(cè)試,首先直接移植W5500官方提供的原始庫(kù)函數(shù),進(jìn)行單收單發(fā)數(shù)據(jù)傳輸,做10次實(shí)驗(yàn),最終平均傳輸速率可穩(wěn)定在220 KB/s;對(duì)其W5500官方提供的原始庫(kù)函數(shù)進(jìn)行一定修改,再次進(jìn)行單收單發(fā)數(shù)據(jù)傳輸,同樣完成10次實(shí)驗(yàn),平均傳輸速率可穩(wěn)定在414 KB/s。其中,直接移植W5500官方提供的原始庫(kù)函數(shù),通信速率結(jié)果圖展示如圖7所示。進(jìn)行修改后的W5500庫(kù)函數(shù),通信速率結(jié)果圖展示如圖8所示。對(duì)官方提供的W5500庫(kù)函數(shù)進(jìn)行修改前后,進(jìn)行10次實(shí)驗(yàn)對(duì)比,結(jié)果如表1所列。
表1 對(duì)官方提供的W5500庫(kù)函數(shù)進(jìn)行修改前后的通信速率結(jié)果
圖7 直接移植W5500庫(kù)函數(shù)的通信速率結(jié)果圖
圖8 對(duì)W5500庫(kù)函數(shù)進(jìn)行修改后的通信速率結(jié)果圖
在搭建的軟硬件平臺(tái)測(cè)試系統(tǒng)中,一方面選用ST開(kāi)發(fā)的STM32CubeMX工具來(lái)配置開(kāi)發(fā)初期關(guān)于STM32F407芯片相關(guān)的一些初始化代碼,方便快速;另一方面,直接移植W5500官方提供的原始庫(kù)函數(shù),快速方便。兩者的結(jié)合,不僅節(jié)省了工作時(shí)間,還降低了開(kāi)發(fā)成本。對(duì)于通過(guò)直接移植W5500官方提供的庫(kù)函數(shù),發(fā)現(xiàn)數(shù)據(jù)傳輸速率過(guò)低,進(jìn)而對(duì)其庫(kù)函數(shù)進(jìn)行相應(yīng)修改,最終提高了一定的通信速率,相比改進(jìn)之前,數(shù)據(jù)傳輸通信速率提高了2倍左右。