lwip在stm32f4上的移植

2021-09-05 09:49:31 字數 2301 閱讀 9144

簡要記錄lwip在stm32f4上的移植步驟:

最簡單的lwip移植主要是底層資料收發硬體介面的實現以及配置,在此處主要是ethernetif.c ethernetif.h以及配置檔案lwipopt.h的修改

1. main函式

struct netif gnetif;

static void systemclock_config(void);

static void bsp_config(void);

static void netif_config(void);

int main(void)

}

其中netif_config()是底層的初始化配置; tcp_echoserver_init()是上層(應用層的配置)

1.1 netif_config():

其中netif_add(&gnetif, &ipaddr, &netmask, &gw, null, ðernetif_init, ðernet_input);這句實現了初始化,並註冊了接收驅動介面。

static void netif_config(void)

else

/* set the link callback function, this function is called on change of link status*/

netif_set_link_callback(&gnetif, ethernetif_update_config);

}

1.2 tcp_echoserver_init()

體現了tcp server 應用層的基本操作, tcp新建-> 埠繫結->監聽->等待資料接收。

void tcp_echoserver_init(void)

else

}}

2. ethernetif.c中的檔案介面,(以下還含有ethernet.c中的函式介面)

主要實現網絡卡驅動

- low_level_init

該函式實現了硬體網絡卡裝置的初始化,通過呼叫hal_eth_init(ðhandle),實現了功能(mac addr,rx mode,speed,media inte***ce(mii)等)和埠(通過呼叫hal_eth_mspinit(heth)實現,當然這個介面需要使用者提供,用於初始化與網絡卡間的gpio)的初始化

- err_t ethernetif_init(struct netif *netif)

呼叫low_level_init實現網絡卡的基本功能初始化,並初始化struct netif部分功能,如netif->output =etharp_output和netif->linkoutput =low_level_output,以及網絡卡名。

- static struct pbuf * low_level_input(struct netif *netif)

實現將底層收到的資料以鍊錶的形式存放到struct pbuf介面中,返回鍊錶的首位址。 後續需要研究hal_eth_getreceivedframe(ðhandle)接收實現。

- void ethernetif_input(struct netif *netif)

該函式呼叫low_level_input,將收到的底層資料,通過err = netif->input(p, netif); 傳送到lwip協議棧中。其中netif->input函式既是 err_t ethernet_input(struct pbuf *p, struct netif *netif);是通過netif_add(&gnetif, &ipaddr, &netmask, &gw, null, ðernetif_init, &ethernet_input);註冊的。

- static err_t low_level_output(struct netif *netif, struct pbuf *p)

該函式通過呼叫hal_eth_transmitframe(ðhandle, framelength);函式將pbuf的資料傳送出去。

- err_t ethernet_output(struct netif* netif, struct pbuf* p,const struct eth_addr* src, const struct eth_addr* dst,u16_t eth_type)

該函式通過呼叫low_level_output函式將pbuf中的資料傳送出去,該函式是lwip協議棧底層傳送資料的出口。看程式主要被etharp呼叫,後續需要細看。

stm32F4上CCM的使用

1.ccm記憶體介紹 相較於f2,f4新加的乙個特殊內部sram。64 kb ccm 核心耦合儲存器 資料 ram 不屬於匯流排矩陣 請參見圖 1 stm32f405xx 07xx和 stm32f415xx 17xx 器件的系統架構 只能通過 cpu 對其進行訪問 dma等外設不能訪問 2.用法 基...

stm32f4 定時捕獲

概述 1000hz 20 80 占空比現象 1000hz 51 58 占空比現象 關於本文的更多詳情請往下看。筆者針對於初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的 對初學者一看就明白,以簡單明瞭的工程供大家學習。stm32f4 tim輸入波形捕獲 脈衝頻率 占空比 例項 訪問密碼 st...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...