原始工程:https://zh.arslanbar.net/post.php?t=24584
【最終效果】
1.能夠在PC端通過設定的計算機名ping通網卡。
2.能在PC端通過「http://計算機名」訪問單片機上的Web伺服器。
【注意】
路由器DHCP頁面顯示的設備名不屬於計算機名,而是發送請求時hostname欄位的名稱。兩者可以不相同。
作者共發了7篇帖子。
![]() |
原始工程:https://zh.arslanbar.net/post.php?t=24584 【最終效果】 1.能夠在PC端通過設定的計算機名ping通網卡。 2.能在PC端通過「http://計算機名」訪問單片機上的Web伺服器。 【注意】 路由器DHCP頁面顯示的設備名不屬於計算機名,而是發送請求時hostname欄位的名稱。兩者可以不相同。 |
![]() |
【步驟】 注意,原工程中下面這句話設置的是路由器中顯示的設備名,跟這裡的計算機名沒有關係。這個名稱是在申請DHCP動態IP位址時發送給路由器的。 |
![]() |
4. 允許網卡接收所有的廣播數據包。 設置後,網卡就能接收到PC端的ping命令發送的NetBIOS請求數據包。 |
![]() |
5. 最後我們需要解決Keil MDK編譯器本身的問題。 這樣一來我們就可以得到正確的輸出: |
![]() |
為了給所有的lwip結構體添加__packed關鍵字,打開之前創建的空白的cc.h文件,添加下面一句話:
#define PACK_STRUCT_BEGIN __packed 然後打開lwipopts.h文件,把之前定義的LWIP_SKIP_PACKING_CHECK宏刪掉,也就是刪除下面三句話: // 這個必須要定義, 否則在執行lwip_init函數時會在串口中提示: // Assertion "Struct packing not implemented correctly. Check your lwIP port." failed at line 345 in Library\lwip\core\init.c #define LWIP_SKIP_PACKING_CHECK |
![]() |
6. 編譯並下載程序。
然後打開瀏覽器,在地址欄輸入「http://enc28j60」,看是否能打開網頁。 |
![]() |
![]() |