//=====================================================================
//TITLE:
// STM32F207核心版的LwIP例程的心得
//AUTHOR:
// norains
//DATE:
// Friday 01-July-2011
//Environment:
// Keil MDK 4.2
// STM32F207
//=====================================================================
最近拿了片STM32F207的核心版,上面有以太網的芯片,可以聯網;而之前所工作的領域均沒有涉及網絡方面,所以在使用上遇上了不少麻煩,特別是例程也沒有很正常跑起來。以下的記錄,均是在調試例程時的一些記錄,有點支離破碎不成體系,各位讀者權當筆記來看好了。
1. IP地址
例程默認的是采用自動分配IP地址的DHCP方式。如果大家的路由器無法查看到主機列表的話,那么這個分配方式就會比如郁悶。因為僅僅是使用核心版,是無法知道當前的IP地址的,除非你接了LCD來進行顯示。
如果要更改其分配方式,可以打開lwipopts.h文件,將LWIP_DHCP的宏定義更改為0,如:
將LWIP_DHCP設置為0后,就需要手動設置IP地址了。相應的數值,可以查看netconf.c文件,如:
這里將IP地址設置為192.168.0.8,掩碼為255.255.255.0,網關則是192.168.0.1。如果各位對這些地址有所異議,也可以手動修改。
在這里順便再說一下主機的IP地址設定。大家都知道,如果局域網的網段不一樣的話,是無法通信的;而又由於某些原因,使得主機的IP地址不能和開發板處於同一網段。遇到這種情形,直接修改核心版的IP地址自然是可以的,但我們還可以采用另外一種方法。
首先TCP/IP屬性中,我們固定一個IP地址,如圖:

點擊"高級",可以添加多個IP地址,如圖:

這樣就能夠和核心版同一網段,也能夠正常通信了。
2. RMII
所拿到的核心是STM32F107和STM32F207共用的,但因為引腳問題,使用STM32F207是不能使用MII,必須采用RMII。如果要更改這個模式,必須打開stm32f2x7.c文件,將MII_MODE宏去掉,並且定義相應的RMII_MODE,如:
如果這里執意使用的是MII_MODE會是什么結果呢?結果便是無法跳出該循環語句:
因為會檢測到一直是SET狀態,沒有RESET,代碼會一直循環。
3. PLL_N
如果使用了RMII模式,那么必須要將system_stm32f2xx.c的PLL_N定義由原來的240更改為200,如:
#define PLL_N 200 //norains:If you want to use RMII,it must set 200 here.Others you could set 240
假如不進行更改的話,那么下面這段main.cpp文件的main函數循環代碼會出問題:
簡單點來說,是ETH_GetRxPktSize函數永遠返回為0,無法接收到數據。
4. 測試
當一切都准備就緒之后,可以將核心版連接到路由器中,然后在命令行界面輸入ping就能夠檢測到設備,如圖:

