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