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

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 评论28 发布时间:2015-8-30 11:39

举报

28个回答
风子 回答时间: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
汗,这不是教程,写给自己看的笔记

哈哈,差不多啦
苏柚 回答时间:2015-8-31 09:18:01
笔记也相当于半个教程的
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:01
JackieLaura 发表于 2015-8-31 11:02
不错,这快就把lwip移植好了,前两天还在研究的。。。。

一起研究,我了解一点皮毛而已
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

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