lwip接收文件 stm32_接收数据
參考火哥的lwip教程,還有 https://www.hexcode.cn/article/show/stm32-ethernet8
啊啊
增加了對lwip的初始化, LwIP_Init函數(shù)用于初始化 LwIP協(xié)議棧,一般在 main 函數(shù)中調(diào)用。首先是內(nèi)存相關初 始化,mem_init函數(shù)是動態(tài)內(nèi)存堆初始化,memp_init函數(shù)是存儲池初始化,LwIP是實現(xiàn) 內(nèi)存的高效利用,內(nèi)部需要不同形式的內(nèi)存管理模式。 還有就是對靜態(tài)ip地址,mac地址,掩碼,網(wǎng)關的設置。如下:
然后就是添加了ETH_CheckFrameReceived,檢測接收到數(shù)據(jù)包的函數(shù)。然后對數(shù)據(jù)包進行相應的處理。
LwIP_Pkt_Handle 函數(shù)用于從以太網(wǎng)存儲器讀取一個以太網(wǎng)幀并將其發(fā)送給 LwIP,它 在接收到以太網(wǎng)幀時被調(diào)用,它是直接調(diào)用 ethernetif_input 函數(shù)實現(xiàn)的,該函數(shù)定義在 ethernetif.c文件中。
接著是一個被無限循環(huán)調(diào)用的函數(shù):LwIP_Periodic_Handle
LwIP_Periodic_Handle 函數(shù)是一個必須被無限循環(huán)調(diào)用的 LwIP支持函數(shù),一般在 main函數(shù)的無限循環(huán)中調(diào)用,主要功能是為 LwIP各個模塊提供時間并查詢鏈路狀態(tài),該 函數(shù)有一個形參,用于指示當前時間,單位為 ms。 對于 TCP功能,每 250ms執(zhí)行一次 tcp_tmr函數(shù);對于 ARP(地址解析協(xié)議),每 5s 執(zhí) 行一次 etharp_tmr函數(shù);對于鏈路狀態(tài)檢測,每 1s 執(zhí)行一次 ETH_CheckLinkStatus 函數(shù); 對于 DHCP功能,每 500ms執(zhí)行一次 dhcp_fine_tmr函數(shù),如果 DHCP處于DHCP_START 或 DHCP_WAIT_ADDRESS 狀態(tài)就執(zhí)行 LwIP_DHCP_Process_Handle 函數(shù),對于 DHCP功 能,還有每 60s 執(zhí)行一次 dhcp_coarse_tmr函數(shù)。
然后用wireshark抓包的時候,比較奇怪。如下:
奇怪的地方就是,我初始化的時候只發(fā)送了上面的第二個數(shù)據(jù)包,也就是192.168.2.240的(使用DP83848Send(mydata, 60); 發(fā)送的),第一個數(shù)據(jù)包是192.168.1.122發(fā)的,這個我并沒有發(fā)送,按邏輯推算,這應該是 在 LwIP_Init(); 初始化ip,mac的時候發(fā)送的。而且兩個數(shù)據(jù)包都是請求包,也就是opcode=1。找了一下沒找到程序是在什么時候發(fā)送出去的。。
最后串口助手輸出如下:
也就是收到數(shù)據(jù)包了,可是并不知道收到了啥。
顯然,我這個程序設計得不合理,本來以為ping一下會觸發(fā)LwIP_Periodic_Handle 里的字符串打印函數(shù)的,結(jié)果想太多了。 沒錯,接著再設計一個程序,要把收到的數(shù)據(jù)包打印出來。
在局域網(wǎng)中ping 單片機ip的報文:
注意,這里ping是一個icmp報文,data里面基本就是26個字母。
然后
總結(jié)
以上是生活随笔為你收集整理的lwip接收文件 stm32_接收数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪些因素影响购车
- 下一篇: 人行联网核查更新_又一批新职业公布,学互