配置rt thread中的lwip模組

2021-08-15 03:45:31 字數 2046 閱讀 7835

配置rt-thread中的lwip模組

環境:

開發環境:mdk5.23

rt-thread版本:2.1.0

lwip版本:1.4.1

微控制器型號:stm32f407

phy晶元型號:dp83848

配置步驟:

phy的時鐘是50m,產生這個時鐘有兩個方法:

本文用微控制器產生50m訊號給phy,使用的引腳是微控制器的pa8。

步驟1:

配置微控制器主頻為100m

步驟2:修改rtconfig.h檔案,啟動lwip

/* section: lwip, a lighwight tcp/ip protocol stack */

#define rt_using_lwip

#define rt_using_lwip141

步驟3:修改stm32f4xx_eth.h檔案,開啟dp83848的相關巨集定義

/**

* @}

*//** @defgroup phy_status_register

* @

步驟6:修改stm32f4xx_eth.c檔案中的phy_monitor_thread_entry()函式。

本函式存在bug,還是使用lan8700暫存器,應該使用dp83848的暫存器。

static void phy_monitor_thread_entry(void *parameter)

}} /* phy search */

if(phy_addr == 0xff)

else

/* reset phy */

stm32_eth_printf("reset phy!\r\n");

eth_writephyregister(phy_addr, phy_bcr, phy_reset);

rt_thread_delay(rt_tick_per_second * 2);

eth_writephyregister(phy_addr, phy_bcr, phy_autonegotiation);

while(1)

if(sr & 0x04)

}/* linkchange */

if(phy_speed_new != phy_speed)

else

if(phy_speed_new & phy_duplex_mask)

else

rt_stm32_eth_init((rt_device_t)&stm32_eth_device);

/* send link up. */

eth_device_linkchange(&stm32_eth_device.parent, rt_true);

} /* link up. */

else

/* link down. */

phy_speed = phy_speed_new;

} /* linkchange */

rt_thread_delay(rt_tick_per_second);

} /* while(1) */

}

修改處:

//            sr = eth_readphyregister(phy_addr, 31);

sr = eth_readphyregister(phy_addr, 16);

stm32_eth_printf("dp83848 reg 16:0x%04x\r\n", sr);

sr = (sr >> 2) & 0x07; /* lan8720, reg31[4:2], speed indication. */

phy_speed_new = phy_link_mask;

// if((sr & 0x03) == 2)

if((sr & 0x02) == 0)

配置完成

後應該可以ping通。

rt thread 串列埠裝置的配置流程

板級硬體初始化 系統定時器初始化 系統排程器初始化 建立初始化執行緒 元件初始化 定時器執行緒初始化 空閒執行緒初始化 系統排程器工作 串列埠裝置配置函式中遍歷要使用的串列埠裝置,做一些工作引數配置和裝置介面實現並註冊裝置 但在此不初始化裝置或不使能裝置 具體配置過程 1.註冊串列埠裝置,以便 fi...

RT Thread中的鍊錶結構

rt thread中的鍊錶是帶表頭節點的雙向迴圈鍊錶結構,它的表頭節點與之前的部落格 雙向迴圈鍊錶 中介紹的表頭節點不同,之前部落格介紹的表頭節點與後繼節點結構是一致的,這是因為指標型別問題,前面介紹過的鍊錶都是前驅節點指向後繼節點的首位址,即指向節點結構體的指標。rt thread鍊錶節點中的指標...

RT Thread的訊息佇列

1.訊息佇列控制塊的組成 結構體 通過下圖可以很容易發現訊息佇列有8個元素.msg pool msg size max msgs entry msg queue head msg queue tail msg queue free和.parent,其中.msg pool為訊息佇列的起始位址 msg ...