你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F7-DISCO笔记之五:ETH及简单的HTTP服务器  

[复制链接]
netlhx 发布时间:2015-8-30 11:39
本帖最后由 netlhx 于 2015-8-30 11:44 编辑

ETH折腾得最久,足足两个星期,终于搞清楚了一点皮毛。

主要原因,一是LWIP结构有点复杂,看例程及源码足足一个星期,算是简单入门。毕竟这个牵涉到网络结构。二是顺带看了一下HTTP的通信过程,什么GET, POST等数据通信方法,现在还是迷迷糊糊的。不过程序总算跑起来了,再慢慢研究。

下面先说几点体会,供菜鸟们一起学习参考,老鸟们请路过并指导!

1 关于IEEE的七层网络模型,这个要了解一下,大致了解通信过程。重点是TCP/IP的四层模型。这些知识会具体体现在LWIP提供的各API中。
2 LWIP提供了几种类型的API,一种是所谓的RAW API,就是原生的TCP/IP通信,这种通信效率最高,写起来也最难,我是直接不管它。二是NETCONN模型,通过对RAW API进行封装,API更抽象,用起来相对简单;但是这个需要RTOS的支持,所以其副作用就是需要额外的了解RTOS,好在前面也花了一段时间研究FREERTOS。第三种就是BSD类型的API,这种类型的API使用SOCKET来进行网络通信,适合那些曾经接触过SOCKET编程的老鸟们,再慢慢研究吧。
3 底层驱动,也就是所谓的ETHERNETIF,这个就是以太网接口。它是上层的IP与底层的硬件之间的接口,也就是通常意义上的网卡驱动。这个过程包括GPIO初始化,ETH控制器及PHY的初始化。F7-DISCO使用的是内置的ETH控制器,外置的PHY接口。这个地方坑爹的地方在于,我们要设置PHY的地址,这个值为0,但我查看原理图的时候硬是没找着。一直按的是1来初始化,结果是导致了DHCP不能获取到正确的IP地址。这一个地方就折腾了3天!
4 如果要自动获取IP地址的话,还需要了解一下DHCP的原理及初始化过程,这里需要注意的地方就是通过全局的NETIF中的DHCP变量来查看初始化过程中的返回状态,直到得到DHCP_BOUND的返回值。才表明正确得到了DHCP IP地址。
5 关于调试,建议初学者不要打开LWIP自带的DEBUG输出功能,否则你会被那些输出信息淹死的。就算要开,也是一个一个的打开。充分利用串口输出来查看代码的执行情况,效果也许会更好。

上面都是自己的一点个人体会,也许老鸟们会有更好的做法,欢迎指出。

一、生成LWIP代码框架
由于LWIP结构有点复杂,建议新手们还是使用STM32CUBEMX来生成框架,需要注意的是,要想得到更好的性能,对于LWIP中的一些内存大小的分配要仔细考虑,只是刚开始的时候,这个度也不是很好把握,慢慢来吧。

我使用的是NETCONN API,所以还要启用FREERTOS的支持,如果使用其它的RTOS,需要调整一些相应的代码。

二、代码简单分析

正如TCP/IP分层模型一样,LWIP也将代码结构按层次组织,简单点来说,工程里面将代码按层次分为LWIP层及底层的ETHETNET层来处理。LWIP实现TCP/IP通信,ETHERNETIF实现物理层通信。这里特别要注意的是数据链路层实际被分开为数据链路层LL及MAC子层,但LL层被划分到了LWIP里,而MAC则是在ETHERNETIF层。

下面是初始化框架

QQ截图20150830112404.png

1 Netif_add函数的倒数两个参数,这两个参数是两个函数,分别负责ETHERNET的初始化和输入数据的处理。
2 dhcp_start负责获取IP地址,需要一个DHCP服务器,使用一个与电脑相连的DHCP服务器即可。

如果配置正确的话,应该可以获取到正确的IP地址。

QQ截图20150830112813.png

HTTP服务器配置

打开LWIP源代码的CONTRIB目录下的APPS,里面有一个示例代码,如果使用的是FREERTOS的话,基本不需要修改就可以照用了,如果使用其它的RTOS,需要修改LWIP里的sys_arch.c文件里的实现,这实际上就是在实现LWIP的移植!

QQ截图20150830112952.png
实际上这里就是把HTTP服务器以一个任务的形式实现,代码如下

QQ截图20150830113538.png


运行的效果

QQ截图20150830113608.png


虽然代码跑起来了,还有很多事情要做,接下来准备做一个WEB控制界面,来实现通过WEB控制一些简单外设如LED灯的控制。

最后再说一句,新手学习LWIP的话,最好先拿一个例程开刀,把它吃透了,也就弄明白了。虽然这个过程不是一下就能搞清楚的,中间肯定要查找很多的资料,但物有所值啊!还有一点,网络模型这个东西不要太陷进去了,免得到时出不来,够用就行了!




评分

参与人数 1 ST金币 +30 收起 理由
沐紫 + 30

查看全部评分

收藏 6 评论27 发布时间:2015-8-30 11:39

举报

27个回答
DLGG-308046 回答时间:2016-5-30 17:14:10
楼主您用cubeMX生成的工程是带DHCP的吗?我不带DHCP和带的都不会,能发个您的工程学习一下吗?我也用F7discovery
netlhx 回答时间:2015-8-31 15:52:10
JackieLaura 发表于 2015-8-31 11:02
不错,这快就把lwip移植好了,前两天还在研究的。。。。

一起研究,我了解一点皮毛而已
netlhx 回答时间:2015-8-31 15:52:01
JackieLaura 发表于 2015-8-31 11:02
不错,这快就把lwip移植好了,前两天还在研究的。。。。

一起研究,我了解一点皮毛而已
风子 回答时间:2015-8-30 13:09:00
楼主又出新教程,顶
netlhx 回答时间:2015-8-30 13:16:46
风子 发表于 2015-8-30 13:09
楼主又出新教程,顶

汗,这不是教程,写给自己看的笔记
netlhx 回答时间:2015-8-30 13:16:49
风子 发表于 2015-8-30 13:09
楼主又出新教程,顶

汗,这不是教程,写给自己看的笔记
风子 回答时间:2015-8-30 13:45:08
netlhx 发表于 2015-8-30 13:16
汗,这不是教程,写给自己看的笔记

哈哈,差不多啦
JackieLaura 回答时间:2015-8-31 11:02:00
不错,这快就把lwip移植好了,前两天还在研究的。。。。
stmcu.org.png
shanji 回答时间:2015-8-31 15:28:20
这个网页是用啥编辑的
党国特派员 回答时间:2015-8-31 15:50:49
有钱淫,我们做朋友吧
netlhx 回答时间:2015-8-31 15:52:57
shanji 发表于 2015-8-31 15:28
这个网页是用啥编辑的

直接HTML,
netlhx 回答时间:2015-8-31 15:53:14
党国特派员 发表于 2015-8-31 15:50
有钱淫,我们做朋友吧

做个朋友吧,壕
netlhx 回答时间:2015-8-31 15:54:27
苏柚 发表于 2015-8-31 09:18
笔记也相当于半个教程的

嗯,确实
bleukey 回答时间:2015-8-31 16:17:35
这个以后要用到,mark下
JackieLaura 回答时间:2015-9-1 12:02:10
netlhx 发表于 2015-8-31 15:52
一起研究,我了解一点皮毛而已

还没有研究过呢,也要去研究研究,以后备用。。
stmcu.org.png
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版