书籍 电子与嵌入式系统设计丛书  LWIP应用开发实战指南  基于STM32的封面

电子与嵌入式系统设计丛书 LWIP应用开发实战指南 基于STM32PDF电子书下载

(中国)刘火良,杨森

购买点数

14

出版社

北京:机械工业出版社

出版时间

2019

ISBN

标注页数

448 页

PDF页数

462 页

图书目录

第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和PBUFREF类型的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

查看更多关于的内容

本类热门
在线购买PDF电子书
下载此书RAR压缩包