使用 LwIP TCP/IP 栈,在 STM32Cube 上开发应用

2014 5
DocID025731 Rev 1 1/44
UM1713
用户手册
使用 LwIP TCP/IP 栈,在 STM32Cube 上开发应用
前言
STM32F4x7/9xx STM32F2x7xx 微控制器配有高质量 10/100 Mbit/s 以太网外设,支持媒
体独立接口 ( MII )和缩减的媒体独立接口 ( RMII ),以便与物理层 ( PHY )接口。
当使用以太网通信接口时,会使用 TCP/IP 软件协议栈以实现局域网或者广域网中的通信。
本用户手册说明了怎样使用 STM32CubeF2 STM32CubeF4 HAL 驱动程序,将一个免费中
间件 TCP/IP 栈分别集成到基于 STM32F2x7xx STM32F4x7/9xx 微控制器的嵌入式应用
(请参考 1 章节 以获得 STM32Cube 的详细信息)。该中间件 TCP/IP 栈为 LwIP (轻量级
IP ),专为嵌入式应用开发的开源协议栈。
对于每款评估 板,此包都包含了九个运行于 LwIP 栈之上的应用:
基于 Raw API ,运行于独立模式 (没有 RTOS )的应用:
– Web 服务器
– TFTP 服务器
– TCP 回响客户端应用
– TCP 回响服务器应用
– UDP 回响客户端应用
– UDP 回响服务器应用
运行于 FreeRTOS 操作系统的应用:
基于 netconn API Web 服务器
基于 socket API Web 服务器
基于 netconn API TCP/UDP 回响服务器应用。
:
在本文中, STM32Cube 指的是 STM32CubeF2 STM32CubeF4 STM32F4xx 指的是
STM32F4x7xx STM32F4x9xx 微控制器, STM322xx-EVAL STM324xx-EVAL 指的是
STM3221x-EVAL STM324xG-EVAL STM324x9I-EVAL 评估板。
本文提供的截屏和文件名对应的是运行于 STM32F4 微控制器上的应用样例。然而,它们也
适用于 STM32F2x7xx
www.st.com 目录
2/44 DocID025731 Rev 1
目录
1 STM32Cube™ 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 LwIP TCP/IP 栈描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1
栈特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2
授权 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 LwIP 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 LwIP 栈的目录组织 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 LwIP API 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.1 Raw API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.2 Netconn API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5.3 Socket API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 LwIP 缓冲管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6.1
包缓冲结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6.2 pbuf 管理 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 LwIP STM32Cube 以太网 HAL 驱动之间的接口 . . . . . . . . . . . . . . . . . 15
4 LwIP 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1
模块支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2
存储器配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5
使用 LwIP 栈开发应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.1
使用 Raw API 在独立模式中开发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.1.1
工作模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.1.2 TCP 回响服务器演示举例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2
使用 Netconn Socket API 基于 RTOS 开发 . . . . . . . . . . . . . . . . . . . . . 23
5.2.1
工作模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2.2
使用 Netconn API TCP 回响服务器演示举例 . . . . . . . . . . . . . . . . . . . 24
6 LwIP 包描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.1 LwIP 包目录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2
应用设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2.1 PHY 接口配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 DocID025731 Rev 1 3/44
目录
3
6.2.2 MAC IP 地址设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2.3
固件特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3
评估板设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3.1 STM324x9I-EVAL 设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3.2 STM324xG-EVAL 设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3.3 STM3222xG-EVAL 设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7
使用 LwIP 应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1
入门级应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.1 TCP 回响客户端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.2 TCP 回响服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.1.3 UDP 回响客户端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.1.4 UDP 回响服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.1.5
基于 netconn API UDP TCP 回响服务器 . . . . . . . . . . . . . . . . . . . . . . 34
7.2
特性级应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.2.1
基于 raw API Web 服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.2.2
基于 netconn API Web 服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.2.3
基于 socket API Web 服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.3
集成级应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.3.1 TFTP 服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8
结论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
附录 A FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
A.1
我怎样选择静态或动态 ( DHCP IP 地址分配? . . . . . . . . . . . . . . . . . . . 42
A.2
当以太网网线断开时,应用如何处理? . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
A.3
怎样将应用移植到不同的硬件上? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9
修订历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 表格索引
4/44 DocID025731 Rev 1
表格索引
1. TCP Raw API 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. UDP Raw API 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Netconn API 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4. Socket API 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5. Pbuf API 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.
以太网接口函数说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7. LwIP 内存配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8. STM324x9I-EVAL 跳线配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
9. STM324xG-EVAL 跳线配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
10. STM322xG-EVAL 跳线配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
11. LwIP 应用分类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
12.
文档修订历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 DocID025731 Rev 1 5/44
图片索引
5
图片索引
1. STM32Cube 框图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2. LwIP 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.
2 LwIP 目录结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4. Pbuf 结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.
独立工作模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6.
使用 RTOS 时的 lwIP 工作模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7. TCP 回响客户端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8. TCP 回响服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
9. UDP 回响客户端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
10. UDP 回响服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
11. Web 服务器主页 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
12. HTTP 服务器中的 SSI 使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
13.
任务页面的 Web 服务器列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
14. TFTP 工具 ( tftpd32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 STM32Cube™ 概述
6/44 DocID025731 Rev 1
1 STM32Cube™ 概述
STM32Cube 计划源自意法半导体,旨在通过减少开发的工作量、时间与成本,使开发者受
益。 STM32Cube 涵盖 STM32 产品组合。
STM32Cube 1.x 版包括:
图形软件配置工具 STM32CubeMX ,可通过图形向导生成初始化 C 代码。
针对每个系列提供综合的嵌入式软件平台 (例如 STM32CubeF2 用于 STM32F2 系列,
STM32CubeF4 用于 STM32F4 系列)
– STM32 抽象层嵌入式软件 STM32Cube HAL ,确保在 STM32 各个产品之间实现
最大限度的可移植性
一套一致的中间件,比如 RTOS USB TCP/IP 、图形
所有嵌入式软件实用工具均配备一套完整的示例。
1. STM32Cube 框图 DocID025731 Rev 1 7/44
LwIP TCP/IP 栈描述
43
2 LwIP TCP/IP 栈描述
2.1
栈特性
LwIP 为免费 TCP/IP 栈,由 Adam Dunkels 在瑞典计算机科学院 ( SICS )开发,由修正的
BSD 许可授权。
LwIP TCP/IP 实现的侧重点为在全面保持 TCP/IP 栈的同时,尽可能的减少 RAM 的使用。这
使得 LwIP 特别适合在嵌入式系统中使用。
LwIP 具有下列协议:
IPv4 IPv6 (网际协议 v4 v6
ICMP (互联网控制消息协议),用于网络维护和调试
IGMP (互联网组管理协议),用于多播流量的管理
UDP (用户数据报协议)
TCP (传输控制协议)
DNS (域名服务器)
SNMP (简单网络管理协议)
DHCP (动态主机配置协议)
PPP (点到点协议)
ARP (地址解析协议)
LwIP 具有三种应用编程接口 ( API ):
Raw API 为原始的 LwIP API 。它通过事件回调机制进行应用开发。该 API 提供了最好的
性能和优化的代码长度,但增加了应用开发的复杂性。
Netconn API 为高层有序 API ,需要实时操作系统 ( RTOS )的支持 (提供进程间通讯
的方法)。 Netconn API 支持多线程工作。
BSD Socket API :类似 Berkeley 的套接字 API (开发于 Netconn API 之上)
LwIP 栈的源代码可从 http://savannah.nongnu.org 下载。
2.2
授权
LwIP BSD 许可证完成。下面是 LwIP 授权文档副本,它也包括在源代码中:
/*
* 瑞典计算机科学院版权所有 ( c 2001-2004
* 保留所有权利。
*
* 若要以源代码或二进制形式对其或使用,不管修改与否,
* 都必须满足下述条件:
*
* 1. 对源代码重新发布时必须保留以上版权说明、
* 此条件列表及下述免责声明。 LwIP TCP/IP 栈描述
8/44 DocID025731 Rev 1
* 2. 以二进制形式重新发布时必须将以上版权说明、
* 此条件列表及下述免责声明复制到文档
* / 或其它一同发布的材料中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值