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