 |
-- 會員 / 註冊 --
|
|
|
|
LWIP應用開發實戰指南-基于STM32 ( 簡體 字) |
作者:劉火良 楊森 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> STM32 |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 51858 詢問書籍請說出此書號!【缺書】 NT售價: 595 元 |
出版日:9/19/2019 |
頁數:447 |
光碟數:0 |
|
站長推薦:  |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111635826 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:本書以LwIP源碼為核心,講解TCP/IP協議棧的實現,講解常見的網絡協議,講解LwIP各層之間的數據傳遞,*終輔以實戰案例,教你如何連接各大云平臺,配套野火STM32 M4/M7系列開發板,提供完整源代碼,極具操作性。 |
目錄:前 言 第1章 網絡協議概述 1 1.1 常用網絡協議 1 1.2 網絡協議的分層模型 2 1.3 協議層報文間的封裝與拆封 3 第2章 LwIP概述 5 2.1 LwIP的優缺點 5 2.2 LwIP的文件說明 6 2.2.1 獲取LwIP源碼文件 6 2.2.2 LwIP文件說明 8 2.3 LwIP的說明文檔 11 2.4 使用vs code查看源碼 14 2.4.1 查看文件中的符號列表和函數列表 14 2.4.2 函數定義跳轉 15 2.5 LwIP源碼里的示例 16 2.6 LwIP的3種編程接口 17 2.6.1 RAW/Callback API 17 2.6.2 Netconn API 18 2.6.3 Socket API 19 第3章 開發平臺 20 3.1 以太網概述 20 3.1.1 PHY層 20 3.1.2 MAC子層 21 3.2 STM32的ETH外設 23 3.3 MII和RMII接口 24 3.4 PHY:LAN8720A 25 3.5 硬件設計 27 3.6 軟件設計 29 3.6.1 獲取STM32的裸機工程模板 29 3.6.2 添加bsp_eth.c與bsp_eth.h 29 3.6.3 修改stm32f4xx_hal_conf.h文件 35 第4章 LwIP的網絡接口管理 37 4.1 netif結構體 37 4.2 netif的使用 41 4.3 與netif相關的底層函數 45 4.4 ethernetif.c文件內容 46 4.4.1 ethernetif數據結構 46 4.4.2 ethernetif_init() 47 4.4.3 low_level_init() 48 第5章 LwIP的內存管理 50 5.1 幾種內存分配策略 50 5.1.1 固定大小的內存塊 50 5.1.2 可變長度分配 51 5.2 動態內存池 52 5.2.1 內存池的預處理 52 5.2.2 內存池的初始化 57 5.2.3 內存分配 58 5.2.4 內存釋放 59 5.3 動態內存堆 61 5.3.1 內存堆的組織結構 61 5.3.2 內存堆初始化 62 5.3.3 內存分配 64 5.3.4 內存釋放 67 5.4 使用C庫的malloc和free函數來管理內存 71 5.5 LwIP中的配置 72 第6章 網絡數據包 74 6.1 TCP/IP的分層思想 74 6.2 LwIP的線程模型 75 6.3 pbuf結構體說明 76 6.4 pbuf的類型 77 6.4.1 PBUF_RAM類型的pbuf 78 6.4.2 PBUF_POOL類型的pbuf 78 6.4.3 PBUF_ROM和PBUF_REF類型的pbuf 80 6.5 pbuf_alloc() 81 6.6 pbuf_free() 84 6.7 其他pbuf操作函數 88 6.7.1 pbuf_realloc() 88 6.7.2 pbuf_header() 88 6.7.3 pbuf_take()、pbuf_copy()、pbuf_chain()和pbuf_ref() 88 6.8 網卡中使用的pbuf 88 6.8.1 low_level_output() 88 6.8.2 low_level_input() 91 6.8.3 ethernetif_input() 93 第7章 無操作系統移植LwIP 94 7.1 將LwIP添加到裸機工程 94 7.2 移植頭文件 97 7.3 移植網卡驅動 103 7.4 LwIP時基 111 7.5 協議棧初始化 112 7.6 獲取數據包 114 7.6.1 查詢方式 114 7.6.2 ping命令詳解 115 7.6.3 中斷方式 116 第8章 有操作系統移植LwIP 119 8.1 向LwIP中添加操作系統 119 8.1.1 復制FreeRTOS源碼到工程文件夾 119 8.1.2 添加FreeRTOS源碼到工程組文件夾 120 8.1.3 指定FreeRTOS頭文件的路徑 120 8.1.4 修改stm32f10x_it.c 121 8.2 lwipopts.h文件需要加入的配置 122 8.3 sys_arch.c/h文件的編寫 126 8.4 網卡底層的編寫 136 8.5 協議棧初始化 138 8.6 移植后使用ping命令測試基本響應 141 第9章 LwIP一探究竟 142 9.1 網卡數據傳入LwIP內核的流程 142 9.2 內核超時處理 142 9.2.1 sys_timeo結構體與超時鏈表 144 9.2.2 注冊超時事件 144 9.2.3 超時檢查 147 9.3 tcpip_thread線程 149 9.4 LwIP中的消息 151 9.4.1 消息結構 151 9.4.2 數據包消息 153 9.4.3 API消息 154 9.5 揭開LwIP的神秘面紗 158 第10章 ARP 159 10.1 數據鏈路層概述 159 10.2 MAC地址的基本概念 159 10.3 初識ARP 160 10.4 以太網幀結構 160 10.5 IP地址映射為物理地址 161 10.6 ARP緩存表 162 10.7 ARP緩存表的超時處理 165 10.8 ARP報文 167 10.9 發送ARP請求包 170 10.10 數據包接收流程 172 10.10.1 以太網中數據包的接收 172 10.10.2 ARP數據包處理 176 10.10.3 更新ARP緩存表 178 10.11 數據包發送流程 182 10.11.1 etharp_output() 182 10.11.2 etharp_output_to_arp_index() 185 10.11.3 etharp_query() 186 第11章 IP 193 11.1 IP地址 193 11.1.1 概述 193 11.1.2 IP地址編址 193 11.1.3 特殊IP地址 195 11.2 局域網和廣域網的概念 196 11.2.1 局域網 196 11.2.2 廣域網 196 11.3 網絡地址轉換 197 11.4 IP數據報 198 11.5 IP數據報的數據結構 202 11.6 IP數據報分片 204 11.7 IP數據報發送 208 11.8 IP數據報接收 214 第12章 ICMP 222 12.1 ICMP功能簡介 222 12.2 ICMP報文結構 223 12.3 ICMP報文類型 224 12.3.1 ICMP差錯報告報文 224 12.3.2 ICMP查詢報文 226 12.4 LwIP中的ICMP實現 227 12.4.1 ICMP報文數據結構 227 12.4.2 發送ICMP差錯報文 229 12.4.3 處理ICMP報文 231 第13章 TCP 235 13.1 TCP服務概述 235 13.2 TCP的特性 235 13.2.1 連接機制 235 13.2.2 確認與重傳 235 13.2.3 緩沖機制 236 13.2.4 全雙工通信 236 13.2.5 流量控制 236 13.2.6 差錯控制 237 13.2.7 擁塞控制 237 13.3 端口號的概念 237 13.4 TCP報文段結構 239 13.4.1 TCP報文段的封裝 239 13.4.2 TCP報文段格式 239 13.5 TCP連接 243 13.5.1 “三次握手”建立連接 243 13.5.2 “四次揮手”終止連接 246 13.6 TCP狀態 247 13.6.1 LwIP中定義的TCP狀態 247 13.6.2 TCP狀態轉移 248 13.7 TCP中的數據結構 250 13.8 窗口的概念 253 13.8.1 接收窗口 254 13.8.2 發送窗口 254 13.9 TCP報文段處理 255 13.9.1 報文段緩沖隊列 255 13.9.2 TCP報文段發送 256 13.9.3 TCP報文段接收 260 第14章 UDP 265 14.1 UDP概述 265 14.2 UDP常用端口號 266 14.3 UDP報文 266 14.4 UDP報文的數據結構 267 14.4.1 UDP報文首部結構體 267 14.4.2 UDP控制塊 267 14.5 UDP報文發送 270 14.6 UDP報文接收 272 第15章 使用Netconn接口編程 277 15.1 netbuf結構體 277 15.2 netbuf相關函數說明 279 15.2.1 netbuf_new() 279 15.2.2 netbuf_delete() 279 15.2.3 netbuf_alloc() 280 15.2.4 netbuf_free() 280 15.2.5 netbuf_ref() 281 15.2.6 netbuf_chain() 282 15.2.7 netbuf_data() 282 15.2.8 netbuf_next()與netbuf_first() 282 15.2.9 netbuf_copy() 283 15.2.10 netbuf_take() 284 15.2.11 其他操作netbuf的宏定義 285 15.3 netconn結構體 285 15.4 netconn函數接口說明 287 15.4.1 netconn_new() 287 15.4.2 netconn_delete() 288 15.4.3 netconn_getaddr() 290 15.4.4 netconn_bind() 290 15.4.5 netconn_connect() 291 15.4.6 netconn_disconnect() 292 15.4.7 netconn_listen() 293 15.4.8 netconn_accept() 293 15.4.9 netconn_recv() 295 15.4.10 netconn_send() 296 15.4.11 netconn_sendto() 297 15.4.12 netconn_write() 298 15.4.13 netconn_close() 301 15.5 實驗 302 15.5.1 TCP Client實驗 302 15.5.2 TCP Client實驗現象 307 15.5.3 TCP Server實驗 308 15.5.4 TCP Server實驗現象 314 15.5.5 UDP實驗 315 15.5.6 UDP實驗現象 319 第16章 使用Socket接口編程 321 16.1 什么是Socket 321 16.2 LwIP中的Socket 321 16.3 Socket API 322 16.3.1 socket() 322 16.3.2 bind() 323 16.3.3 connect() 324 16.3.4 listen() 325 16.3.5 accept() 325 16.3.6 read()、recv()、recvfrom() 325 16.3.7 sendto() 326 16.3.8 send() 327 16.3.9 write() 327 16.3.10 close() 327 16.3.11 ioctl()、ioctlsocket() 327 16.3.12 setsockopt() 328 16.3.13 getsockopt() 329 16.4 實驗 329 16.4.1 TCP Client實驗 329 16.4.2 TCP Server實驗 331 16.4.3 UDP實驗 333 第17章 使用RAW API接口編程 335 17.1 RAW API的UDP編程 335 17.1.1 新建控制塊:udp_new() 335 17.1.2 綁定控制塊:udp_bind() 336 17.1.3 建立會話:udp_connect() 337 17.1.4 斷開會話:udp_disconnect() 338 17.1.5 接收數據:udp_recv() 339 17.1.6 發送數據:udp_send()與udp_sendto() 339 17.1.7 刪除UDP控制塊:udp_remove() 341 17.2 RAW API的TCP編程 341 17.2.1 新建控制塊:tcp_new() 341 17.2.2 綁定控制塊:tcp_bind() 342 17.2.3 控制塊監聽:tcp_listen() 343 17.2.4 處理連接:tcp_accept() 345 17.2.5 建立連接:tcp_connect() 346 17.2.6 終止連接:tcp_close() 348 17.2.7 接收數據:tcp_recv() 350 17.2.8 發送數據:tcp_sent() 350 17.2.9 異常處理:tcp_err() 351 17.2.10 周期性回調:tcp_poll() 351 17.2.11 構建報文段:tcp_write() 352 17.2.12 更新接收窗口:tcp_recved() 352 17.3 實驗 353 17.3.1 TCP Client實驗 353 17.3.2 TCP Server實驗 358 17.3.3 UDP實驗 360 第18章 使用JPerf工具測試網速 362 18.1 iPerf與JPerf 362 18.2 測試網絡速度 362 18.2.1 獲取JPerf網絡測速工具 362 18.2.2 測試開發板接收速度(Netconn API) 363 18.2.3 測試開發板接收速度(Socket API) 366 18.2.4 測試開發板發送速度(Netconn API) 369 18.2.5 測試開發板發送速度(Socket API) 372 18.3 提高LwIP網絡傳輸的速度 375 第19章 HTTP 377 19.1 什么是HTTP 377 19.2 URL與資源 378 19.3 HTTP報文 379 19.4 使用Postman獲取論壇數據 380 19.5 使用開發板獲取論壇數據 382 第20章 HTTP服務器 386 20.1 Hello World網頁demo 386 20.2 提供網頁控制LED開關的功能 389 第21章 MQTT協議 394 21.1 MQTT協議概述 394 21.2 MQTT通信模型 394 21.3 消息主題與服務質量 395 21.4 MQTT控制報文 396 21.4.1 固定報頭 396 21.4.2 可變報頭 397 21.4.3 有效載荷 400 21.5 移植MQTT協議 401 21.6 cJSON移植 407 第22章 連接到百度天工物接入 411 22.1 物接入概述 411 22.2 使用IoT Hub 411 22.2.1 創建計費套餐 411 22.2.2 創建項目 411 22.2.3 創建策略 413 22.2.4 創建身份與創建用戶 413 22.2.5 MQTT軟件測試連接 415 22.3 開發板連接IoT Hub 417 22.4 IoT Hub的規則引擎 422 22.4.1 什么是規則引擎 422 22.4.2 使用規則引擎 422 22.5 數據可視化 424 22.5.1 IoT Hub的時序數據庫 424 22.5.2 IoT Hub的物可視 426 第23章 連接到阿里云物聯 429 23.1 使用阿里云物聯 429 23.2 MQTT軟件測試連接 431 23.3 開發板連接阿里云物聯 434 23.4 阿里云物聯的規則引擎 435 第24章 連接到OneNET 437 24.1 使用OneNET 437 24.2 測試連接 438 24.3 開發板連接OneNET 439 24.4 添加數據流 441 24.5 系統主題的發布格式 442 24.6 使用開發板發布數據點 443 24.7 數據可視化 446 |
序: |
|