前段時(shí)間做項(xiàng)目用到百兆網(wǎng)通信,用到了LWIP,一開(kāi)始是參照原子的例程做移植,因?yàn)樵拥睦讨惺褂玫氖荓AN8720,為了改成DP83848,改寄存器地址,改位定義,改速度計(jì)算公式,折騰了好多天也沒(méi)成功,最后只好聽(tīng)從網(wǎng)友的建議,修改ST官方的一個(gè)例程,幾天下來(lái),竟然成功了,現(xiàn)在將步驟分享給大家,感覺(jué)實(shí)際工程中用DP83848的還是大多數(shù)。.其實(shí)本文并不是移植LWIP,只是將ST官方的例程改成我們項(xiàng)目所需要的,然后我們?cè)僭谶@個(gè)基礎(chǔ)上完成自己的項(xiàng)目即可,這對(duì)新接觸LWIP又急著做項(xiàng)目的人比較適合,沒(méi)必要去了解LWIP的具體實(shí)現(xiàn),會(huì)用就行了。.
本人的項(xiàng)目配置:STM32F407VET6 + DP83848C
1、從官方網(wǎng)站http://www.stmcu.org/document/list/index/category-523下載STSW-STM32070 面向STM32F4x7微控制器的LwIP TCP/IP協(xié)議棧的演示代碼 的英文文檔DM00036052.pdf和軟件包stsw-stm32070.zip。stsw-stm32070.zip是面向STM32F4x7微控制器的LwIP TCP/IP協(xié)議棧的基于官方EVAL開(kāi)發(fā)板的演示代碼,顯然,我們直接修改這個(gè)演示代碼要比我們?nèi)ヒ浦睱WIP簡(jiǎn)單得多。DM00036052.pdf是演示代碼的說(shuō)明文檔。
2、將stsw-stm32070.zip解壓得到STM32F4x7_ETH_LwIP_V1.1.0文件夾,下面是STM32F4x7_ETH_LwIP_V1.1.0文件夾架構(gòu)
3、刪除_htmresc文件夾,這個(gè)文件夾是ST及CMSIS公司logo,沒(méi)什么用。
4、打開(kāi)project文件夾,這個(gè)文件夾包括兩個(gè)文件夾:FreeRTOS和Standalone。
FreeRTOS文件夾里的程序示例是基于FreeRTOS系統(tǒng)的LWIP移植示例,這里我們不需要,直接刪除。
Standalone文件夾里是一些無(wú)操作系統(tǒng)LWIP移植示例程序,在這里我們工程需要的是普通的數(shù)據(jù)傳輸,所以只使用到UDP,所以我們只保留udp_echo_client文件夾,其他的都刪除掉。在udp_echo_client文件夾中EWARM文件夾是IAR EWARM建立的工程,MDK-ARM是keil MDK建立的工程。在這里我們選擇MDK工程,IAR建立的工程可以保留也可以刪除。還有一個(gè)文件夾RIDE,打開(kāi)看了看,應(yīng)該是用另一款編譯軟件建立的工程空間,這里我們不需要,直接刪除。
5、Utilities-》Third_Party文件夾下面有三個(gè)文件夾FatFs_vR0、FreeRTOSV7.3 、lwip-1.4.1。FatFs_vR0一個(gè)通用的文件系統(tǒng)模塊,用于在小型嵌入式系統(tǒng)中實(shí)現(xiàn)FAT文件系統(tǒng),F(xiàn)reeRTOSV7.3一個(gè)迷你操作系統(tǒng)內(nèi)核的小型嵌入式系統(tǒng),在這里我們都用不上,直接刪除。lwip-1.4.1文件夾是LWIP源碼,是我們所需要的。
6、打開(kāi)MDK-ARM文件夾里面的MDK工程,我們先編譯一下,可以看到有0個(gè)錯(cuò)誤,三個(gè)警告,其中兩個(gè)警告是定義了變量但是沒(méi)有使用,我們不去管它,另一個(gè)警告是。.\。.\。.\。.\Utilities\Third_Party\lwip-1.4.1\port\STM32F4x7\Standalone
\ethernetif.c(366): warning: #1-D: last line of file ends without a newline 提示ethernetif.c文件的最后一行(也就是366行)沒(méi)有換行,MDK里面每個(gè)文件的最后一行必須換行,不然會(huì)提示一個(gè)警告,這里把366行后面換行再編譯,這個(gè)警告就消失了。
7、打開(kāi) main.h 文件,因?yàn)槲覀冸娐钒迳鲜褂玫氖荝MII接口,所以將#define MII_MOD注釋掉,將//#define RMII_MODE取消注釋,如下圖所示:
在這里要注意RMII的時(shí)鐘為50MHz,在電路板上直接焊接一個(gè)50MHz的有源晶振就可以了。
取消//#define USE_DHCP的注釋,啟用動(dòng)態(tài)地址分配,當(dāng)?shù)刂贩峙洳怀晒t使用靜態(tài)IP地址。如圖:
本項(xiàng)目中直接刪除掉,因?yàn)閯h除掉了SERIAL_DEBUG,所以我們可以將serial_debug.c文件從項(xiàng)目中移除。
?
點(diǎn)擊紅色的叉號(hào)刪除serial_debug.c,然后點(diǎn)擊OK就可以了。
將Groups欄STM324xG_EVAL中的stm324x7i_eval.c和stm324x7i_eval_lcd.c刪除,將MDK_ARM中的啟動(dòng)文件startup_stm32f427x.s刪除,將Project Targets分欄中的項(xiàng)目名STM324x7I_EVAL刪除,將STM324xG_EVAL中的stm324xg_eval_lcd.c刪除,這都是和本項(xiàng)目無(wú)關(guān)的東西。這時(shí)候編譯會(huì)提示錯(cuò)誤,我們將stm32f4x7_eth_bsp.h文件里關(guān)于包含LCD函數(shù)的頭文件刪除,如下圖。
評(píng)論