LwIP应用开发实战指南:基于STM32
作者: 刘火良,杨森130.28万字44人 正在读
已完结现代当代当代文学
目录 (490章)
倒序
正文
001 .1 常用网络协议002 .2 网络协议的分层模型003 .3 协议层报文间的封装与拆封004 .1 LwIP的优缺点005 .2 LwIP的文件说明006 .2.1 获取LwIP源码文件007 .2.2 LwIP文件说明008 .3 LwIP的说明文档009 .4 使用vs code查看源码010 .4.1 查看文件中的符号列表和函数列表011 .4.2 函数定义跳转012 .5 LwIP源码里的示例013 .6 LwIP的3种编程接口014 .6.1 RAW/Callback API015 .6.2 Netconn API016 .6.3 Socket API017 .6.3 Socket API018 .1 以太网概述019 .1.1 PHY层020 .1.2 MAC子层021 .2 STM32的ETH外设022 .3 MII和RMII接口023 .4 PHY:LAN8720A024 .5 硬件设计025 .6 软件设计(1)026 .6 软件设计(2)027 .6.1 获取STM32的裸机工程模板(1)028 .6.1 获取STM32的裸机工程模板(2)029 .6.2 添加bsp_eth.c与bsp_eth.h(1)030 .6.2 添加bsp_eth.c与bsp_eth.h(2)031 .6.3 修改stm32f4xx_hal_conf.h文件032 .6.3 修改stm32f4xx_hal_conf.h文件033 .1 netif结构体(1)034 .1 netif结构体(2)035 .2 netif的使用(1)036 .2 netif的使用(2)037 .3 与netif相关的底层函数038 .4 ethernetif.c文件内容039 .4.1 ethernetif数据结构040 .4.2 ethernetif_init()041 .4.3 low_level_init()042 .4.3 low_level_init()043 .1 几种内存分配策略044 .1.1 固定大小的内存块045 .1.2 可变长度分配046 .2 动态内存池(1)047 .2 动态内存池(2)048 .2 动态内存池(3)049 .2 动态内存池(4)050 .2.1 内存池的预处理(1)051 .2.1 内存池的预处理(2)052 .2.1 内存池的预处理(3)053 .2.1 内存池的预处理(4)054 .2.2 内存池的初始化055 .2.3 内存分配056 .2.4 内存释放057 .3 动态内存堆(1)058 .3 动态内存堆(2)059 .3 动态内存堆(3)060 .3 动态内存堆(4)061 .3.1 内存堆的组织结构(1)062 .3.1 内存堆的组织结构(2)063 .3.1 内存堆的组织结构(3)064 .3.1 内存堆的组织结构(4)065 .3.2 内存堆初始化(1)066 .3.2 内存堆初始化(2)067 .3.2 内存堆初始化(3)068 .3.3 内存分配(1)069 .3.3 内存分配(2)070 .3.3 内存分配(3)071 .3.4 内存释放(1)072 .3.4 内存释放(2)073 .4 使用C库的malloc和free函数来管理内存074 .5 LwIP中的配置075 .5 LwIP中的配置076 .1 TCP/IP的分层思想077 .2 LwIP的线程模型078 .3 pbuf结构体说明079 .4 pbuf的类型080 .4.1 PBUF_RAM类型的pbuf081 .4.2 PBUF_POOL类型的pbuf082 .4.3 PBUF_ROM和PBUF_REF类型的pbuf083 .5 pbuf_alloc()(1)084 .5 pbuf_alloc()(2)085 .6 pbuf_free()086 .7 其他pbuf操作函数087 .7.1 pbuf_realloc()088 .7.2 pbuf_header()089 .7.3 pbuf_take()、pbuf_copy()、pbuf_chain()和pbuf_ref()090 .8 网卡中使用的pbuf(1)091 .8 网卡中使用的pbuf(2)092 .8 网卡中使用的pbuf(3)093 .8.1 low_level_output()(1)094 .8.1 low_level_output()(2)095 .8.1 low_level_output()(3)096 .8.2 low_level_input()(1)097 .8.2 low_level_input()(2)098 .8.3 ethernetif_input()099 .8.3 ethernetif_input()100 .1 将LwIP添加到裸机工程101 .2 移植头文件(1)102 .2 移植头文件(2)103 .3 移植网卡驱动(1)104 .3 移植网卡驱动(2)105 .4 LwIP时基106 .5 协议栈初始化107 .6 获取数据包108 .6.1 查询方式109 .6.2 ping命令详解110 .6.3 中断方式111 .6.3 中断方式112 .1 向LwIP中添加操作系统113 .1.1 复制FreeRTOS源码到工程文件夹114 .1.2 添加FreeRTOS源码到工程组文件夹115 .1.3 指定FreeRTOS头文件的路径116 .1.4 修改stm32f10x_it.c117 .2 lwipopts.h文件需要加入的配置(1)118 .3 sys_arch.c/h文件的编写(1)119 .3 sys_arch.c/h文件的编写(2)120 .4 网卡底层的编写121 .5 协议栈初始化122 .6 移植后使用ping命令测试基本响应123 .6 移植后使用ping命令测试基本响应124 .1 网卡数据传入LwIP内核的流程125 .2 内核超时处理(1)126 .2 内核超时处理(2)127 .2.1 sys_timeo结构体与超时链表(1)128 .2.1 sys_timeo结构体与超时链表(2)129 .2.2 注册超时事件(1)130 .2.2 注册超时事件(2)131 .2.3 超时检查132 .3 tcpip_thread线程133 .4 LwIP中的消息(1)134 .4 LwIP中的消息(2)135 .4 LwIP中的消息(3)136 .4.1 消息结构(1)137 .4.1 消息结构(2)138 .4.1 消息结构(3)139 .4.2 数据包消息(1)140 .4.2 数据包消息(2)141 .4.3 API消息(1)142 .4.3 API消息(2)143 .5 揭开LwIP的神秘面纱144 .1 数据链路层概述145 .2 MAC地址的基本概念146 .3 初识ARP147 .4 以太网帧结构148 .5 IP地址映射为物理地址149 .6 ARP缓存表150 .7 ARP缓存表的超时处理151 .8 ARP报文152 .9 发送ARP请求包153 .10 数据包接收流程(1)154 .10 数据包接收流程(2)155 .10 数据包接收流程(3)156 .10 数据包接收流程(4)157 .10.1 以太网中数据包的接收(1)158 .10.1 以太网中数据包的接收(2)159 .10.1 以太网中数据包的接收(3)160 .10.1 以太网中数据包的接收(4)161 .10.2 ARP数据包处理(1)162 .10.2 ARP数据包处理(2)163 .10.2 ARP数据包处理(3)164 .10.3 更新ARP缓存表165 .11 数据包发送流程(1)166 .11 数据包发送流程(2)167 .11 数据包发送流程(3)168 .11.1 etharp_output()(1)169 .11.1 etharp_output()(2)170 .11.1 etharp_output()(3)171 .11.2 etharp_output_to_arp_index()(1)172 .11.2 etharp_output_to_arp_index()(2)173 .11.3 etharp_query()(1)174 .11.3 etharp_query()(2)175 .11.3 etharp_query()176 .1 IP地址177 .1.1 概述178 .1.2 IP地址编址179 .1.3 特殊IP地址180 .2 局域网和广域网的概念181 .2.1 局域网182 .2.2 广域网183 .3 网络地址转换184 .4 IP数据报185 .5 IP数据报的数据结构186 .6 IP数据报分片(1)187 .6 IP数据报分片(2)188 .7 IP数据报发送(1)189 .7 IP数据报发送(2)190 .8 IP数据报接收(1)191 .8 IP数据报接收(2)192 .1 ICMP功能简介193 .2 ICMP报文结构194 .3 ICMP报文类型195 .3.1 ICMP差错报告报文196 .3.2 ICMP查询报文197 .4 LwIP中的ICMP实现(1)198 .4 LwIP中的ICMP实现(2)199 .4.1 ICMP报文数据结构(1)200 .4.1 ICMP报文数据结构(2)201 .4.2 发送ICMP差错报文(1)202 .4.3 处理ICMP报文203 .4.3 处理ICMP报文204 .1 TCP服务概述205 .2 TCP的特性206 .2.1 连接机制207 .2.2 确认与重传208 .2.3 缓冲机制209 .2.4 全双工通信210 .2.5 流量控制211 .2.6 差错控制212 .2.7 拥塞控制213 .3 端口号的概念214 .4 TCP报文段结构215 .4.1 TCP报文段的封装216 .4.2 TCP报文段格式217 .5 TCP连接218 .5.1 “三次握手”建立连接219 .5.2 “四次挥手”终止连接220 .6 TCP状态221 .6.1 LwIP中定义的TCP状态222 .6.2 TCP状态转移223 .7 TCP中的数据结构224 .8 窗口的概念225 .8.1 接收窗口226 .8.2 发送窗口227 .9 TCP报文段处理(1)228 .9 TCP报文段处理(2)229 .9 TCP报文段处理(3)230 .9.1 报文段缓冲队列(1)231 .9.1 报文段缓冲队列(2)232 .9.1 报文段缓冲队列(3)233 .9.2 TCP报文段发送(1)234 .9.2 TCP报文段发送(2)235 .9.2 TCP报文段发送(3)236 .9.3 TCP报文段接收(1)237 .9.3 TCP报文段接收(2)238 .9.3 TCP报文段接收239 .1 UDP概述240 .2 UDP常用端口号241 .3 UDP报文242 .4 UDP报文的数据结构243 .4.1 UDP报文首部结构体244 .4.2 UDP控制块245 .5 UDP报文发送246 .6 UDP报文接收(1)247 .6 UDP报文接收(2)248 .6 UDP报文接收249 .1 netbuf结构体250 .2 netbuf相关函数说明(1)251 .2 netbuf相关函数说明(2)252 .2 netbuf相关函数说明(3)253 .2.1 netbuf_new()(1)254 .2.1 netbuf_new()(2)255 .2.1 netbuf_new()(3)256 .2.2 netbuf_delete()(1)257 .2.2 netbuf_delete()(2)258 .2.2 netbuf_delete()(3)259 .2.3 netbuf_alloc()(1)260 .2.3 netbuf_alloc()(2)261 .2.3 netbuf_alloc()(3)262 .2.4 netbuf_free()(1)263 .2.4 netbuf_free()(2)264 .2.5 netbuf_ref()(1)265 .2.5 netbuf_ref()(2)266 .2.6 netbuf_chain()(1)267 .2.6 netbuf_chain()(2)268 .2.7 netbuf_data()269 .2.8 netbuf_next()与netbuf_first()270 .2.9 netbuf_copy()271 .2.10 netbuf_take()272 .2.11 其他操作netbuf的宏定义273 .3 netconn结构体274 .4 netconn函数接口说明(1)275 .4 netconn函数接口说明(2)276 .4 netconn函数接口说明(3)277 .4 netconn函数接口说明(4)278 .4 netconn函数接口说明(5)279 .4.1 netconn_new()(1)280 .4.1 netconn_new()(2)281 .4.1 netconn_new()(3)282 .4.1 netconn_new()(4)283 .4.1 netconn_new()(5)284 .4.2 netconn_delete()(1)285 .4.2 netconn_delete()(2)286 .4.2 netconn_delete()(3)287 .4.2 netconn_delete()(4)288 .4.2 netconn_delete()(5)289 .4.3 netconn_getaddr()(1)290 .4.3 netconn_getaddr()(2)291 .4.3 netconn_getaddr()(3)292 .4.3 netconn_getaddr()(4)293 .4.4 netconn_bind()(1)294 .4.4 netconn_bind()(2)295 .4.4 netconn_bind()(3)296 .4.4 netconn_bind()(4)297 .4.5 netconn_connect()(1)298 .4.5 netconn_connect()(2)299 .4.5 netconn_connect()(3)300 .4.5 netconn_connect()(4)301 .4.6 netconn_disconnect()(1)302 .4.6 netconn_disconnect()(2)303 .4.6 netconn_disconnect()(3)304 .4.6 netconn_disconnect()(4)305 .4.7 netconn_listen()(1)306 .4.7 netconn_listen()(2)307 .4.7 netconn_listen()(3)308 .4.8 netconn_accept()(1)309 .4.8 netconn_accept()(2)310 .4.8 netconn_accept()(3)311 .4.9 netconn_recv()(1)312 .4.9 netconn_recv()(2)313 .4.9 netconn_recv()(3)314 .4.10 netconn_send()(1)315 .4.10 netconn_send()(2)316 .4.11 netconn_sendto()(1)317 .4.11 netconn_sendto()(2)318 .4.12 netconn_write()(1)319 .4.12 netconn_write()(2)320 .4.13 netconn_close()321 .5 实验(1)322 .5 实验(2)323 .5 实验(3)324 .5 实验(4)325 .5 实验(5)326 .5 实验(6)327 .5.1 TCP Client实验(1)328 .5.1 TCP Client实验(2)329 .5.1 TCP Client实验(3)330 .5.1 TCP Client实验(4)331 .5.1 TCP Client实验(5)332 .5.1 TCP Client实验(6)333 .5.2 TCP Client实验现象(1)334 .5.2 TCP Client实验现象(2)335 .5.2 TCP Client实验现象(3)336 .5.2 TCP Client实验现象(4)337 .5.3 TCP Server实验(1)338 .5.3 TCP Server实验(2)339 .5.3 TCP Server实验(3)340 .5.3 TCP Server实验(4)341 .5.4 TCP Server实验现象(1)342 .5.4 TCP Server实验现象(2)343 .5.5 UDP实验(1)344 .5.5 UDP实验(2)345 .5.6 UDP实验现象346 .1 什么是Socket347 .2 LwIP中的Socket348 .3 Socket API(1)349 .3 Socket API(2)350 .3 Socket API(3)351 .3.1 socket()(1)352 .3.1 socket()(2)353 .3.1 socket()(3)354 .3.2 bind()(1)355 .3.2 bind()(2)356 .3.2 bind()(3)357 .3.3 connect()(1)358 .3.3 connect()(2)359 .3.4 listen()(1)360 .3.4 listen()(2)361 .3.5 accept()362 .3.6 read()、recv()、recvfrom()363 .3.7 sendto()364 .3.8 send()365 .3.9 write()366 .3.10 close()367 .3.11 ioctl()、ioctlsocket()368 .3.12 setsockopt()369 .3.13 getsockopt()370 .4 实验(1)371 .4 实验(2)372 .4.1 TCP Client实验(1)373 .4.1 TCP Client实验(2)374 .4.2 TCP Server实验(1)375 .4.3 UDP实验376 .4.3 UDP实验377 .1 RAW API的UDP编程(1)378 .1 RAW API的UDP编程(2)379 .1.1 新建控制块:udp_new()(1)380 .1.1 新建控制块:udp_new()(2)381 .1.2 绑定控制块:udp_bind()(1)382 .1.2 绑定控制块:udp_bind()(2)383 .1.3 建立会话:udp_connect()(1)384 .1.3 建立会话:udp_connect()(2)385 .1.4 断开会话:udp_disconnect()386 .1.5 接收数据:udp_recv()387 .1.6 发送数据:udp_send()与udp_sendto()388 .1.7 删除UDP控制块:udp_remove()389 .2 RAW API的TCP编程(1)390 .2 RAW API的TCP编程(2)391 .2 RAW API的TCP编程(3)392 .2 RAW API的TCP编程(4)393 .2.1 新建控制块:tcp_new()(1)394 .2.1 新建控制块:tcp_new()(2)395 .2.1 新建控制块:tcp_new()(3)396 .2.1 新建控制块:tcp_new()(4)397 .2.2 绑定控制块:tcp_bind()(1)398 .2.2 绑定控制块:tcp_bind()(2)399 .2.2 绑定控制块:tcp_bind()(3)400 .2.2 绑定控制块:tcp_bind()(4)401 .2.3 控制块监听:tcp_listen()(1)402 .2.3 控制块监听:tcp_listen()(2)403 .2.3 控制块监听:tcp_listen()(3)404 .2.3 控制块监听:tcp_listen()(4)405 .2.4 处理连接:tcp_accept()(1)406 .2.4 处理连接:tcp_accept()(2)407 .2.4 处理连接:tcp_accept()(3)408 .2.5 建立连接:tcp_connect()(1)409 .2.5 建立连接:tcp_connect()(2)410 .2.5 建立连接:tcp_connect()(3)411 .2.6 终止连接:tcp_close()(1)412 .2.6 终止连接:tcp_close()(2)413 .2.7 接收数据:tcp_recv()414 .2.8 发送数据:tcp_sent()415 .2.9 异常处理:tcp_err()416 .2.10 周期性回调:tcp_poll()417 .2.11 构建报文段:tcp_write()418 .2.12 更新接收窗口:tcp_recved()419 .3 实验(1)420 .3 实验(2)421 .3 实验(3)422 .3.1 TCP Client实验(1)423 .3.1 TCP Client实验(2)424 .3.1 TCP Client实验(3)425 .3.2 TCP Server实验426 .3.3 UDP实验427 .1 iPerf与JPerf428 .2 测试网络速度(1)429 .2 测试网络速度(2)430 .2 测试网络速度(3)431 .2 测试网络速度(4)432 .2.1 获取JPerf网络测速工具(1)433 .2.1 获取JPerf网络测速工具(2)434 .2.1 获取JPerf网络测速工具(3)435 .2.1 获取JPerf网络测速工具(4)436 .2.2 测试开发板接收速度(Netconn API)(1)437 .2.2 测试开发板接收速度(Netconn API)(2)438 .2.2 测试开发板接收速度(Netconn API)(3)439 .2.3 测试开发板接收速度(Socket API)(1)440 .2.3 测试开发板接收速度(Socket API)(2)441 .2.3 测试开发板接收速度(Socket API)(3)442 .2.4 测试开发板发送速度(Netconn API)(1)443 .2.4 测试开发板发送速度(Netconn API)(2)444 .2.5 测试开发板发送速度(Socket API)445 .3 提高LwIP网络传输的速度446 .1 什么是HTTP447 .2 URL与资源448 .3 HTTP报文449 .4 使用Postman获取论坛数据450 .5 使用开发板获取论坛数据451 .1 Hello World网页demo452 .2 提供网页控制LED开关的功能(1)453 .1 MQTT协议概述454 .2 MQTT通信模型455 .3 消息主题与服务质量456 .4 MQTT控制报文457 .4.1 固定报头458 .4.2 可变报头459 .4.3 有效载荷460 .5 移植MQTT协议(1)461 .5 移植MQTT协议(2)462 .6 cJSON移植463 .1 物接入概述464 .2 使用IoT Hub465 .2.1 创建计费套餐466 .2.2 创建项目467 .2.3 创建策略468 .2.4 创建身份与创建用户469 .2.5 MQTT软件测试连接470 .3 开发板连接IoT Hub(1)471 .3 开发板连接IoT Hub(2)472 .4 IoT Hub的规则引擎473 .4.1 什么是规则引擎474 .4.2 使用规则引擎475 .5 数据可视化476 .5.1 IoT Hub的时序数据库477 .5.2 IoT Hub的物可视478 .5.2 IoT Hub的物可视479 .1 使用阿里云物联480 .2 MQTT软件测试连接481 .3 开发板连接阿里云物联482 .4 阿里云物联的规则引擎483 .4 阿里云物联的规则引擎484 .1 使用OneNET485 .2 测试连接486 .3 开发板连接OneNET487 .4 添加数据流488 .5 系统主题的发布格式489 .6 使用开发板发布数据点490 .7 数据可视化
精选推荐
领导力法则
[中国纺织出版社]
陆禹萌
已完结当代文学
销售心理学
[中国纺织出版社]
兰华
已完结当代文学
销售就是玩转情商
[中国纺织出版社]
王威
已完结当代文学
销售员情商实战训练
成功的销售需要高智商,更需要高情商。一个销售员的销售业绩,往往与他的情商成正比。本书从十个方面详细讲述了有效运用情商,提高销售业绩的方法和技巧。通过实际销售案例和销售心理学理论指导,以及实战点拨和情商拓展训练,帮助读者全方位、快速提高情商。故事性、多版块、碎片化的内容设置,有效降低读者阅读疲劳,提高阅读兴趣,不论是奔波在路上的销售小白,还是带领团队奋勇向前的销售经理,都能从中找到适合自己的销售软技巧。
刘军
已完结当代文学
让未来的你,感谢现在勇敢的自己
[中国纺织出版社]
王介威
已完结当代文学
行为心理学:华生的实用心理学课
[中国纺织出版社]
(美)约翰·华生著.倪彩
已完结当代文学
行为心理学入门(完全图解版)
行为心理学入门(完全图解版)是以作者多来年的心理辅导和咨询数据为素材,对现实生活中的行为心理学应用进行了形象、深入、全面的论述和解读。本书与日本心理学图解书形式相同,浅显易读,有趣又益。
武莉
已完结当代文学
自卑与超越
《自卑与(全译插图典藏版)》是个体心理学研究领域的著作,也是人本主义心理学先驱阿尔弗雷德·阿德勒的很好著作。阿德勒的学说以“自卑感”与“创造性自我”为中心,并强调“社会意识”。全书立足个人心理学的观点,从教育、家庭、婚姻、伦理、社交等多个领域,以大量的实例为论述基础,阐明了人生意义的真谛,帮助人们克服自卑、不断超自己,正确对待职业,正确理解社会与性。本书直接促进了亲子教育、人格培养、婚姻与爱情、职业生涯、家庭建设、人际关系等诸多领域的长足发展,成为人们了解心理学的经典读物。
(奥)阿尔弗雷德·阿德勒
已完结当代文学
自制力:道理我都懂,为什么就是过不好人生
[中国纺织出版社]
邱开杰
已完结当代文学