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

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

[复制链接]
netlhx 发布时间:2015-8-30 11:39
本帖最后由 netlhx 于 2015-8-30 11:44 编辑 7 Y9 o: v: S5 B. s3 S

: \  ]  @* A; P7 TETH折腾得最久,足足两个星期,终于搞清楚了一点皮毛。
* W- d+ @6 v# R% {, R& d4 j8 r/ v6 i1 Y$ x: O$ B
主要原因,一是LWIP结构有点复杂,看例程及源码足足一个星期,算是简单入门。毕竟这个牵涉到网络结构。二是顺带看了一下HTTP的通信过程,什么GET, POST等数据通信方法,现在还是迷迷糊糊的。不过程序总算跑起来了,再慢慢研究。8 d4 t, Z1 a& y' J- |- S# a

8 D" C& g) I$ O+ F2 G: X! g+ x, k下面先说几点体会,供菜鸟们一起学习参考,老鸟们请路过并指导!" ~& Z! X( O- a& i) d& }, z
7 S5 g0 r, F4 s: N
1 关于IEEE的七层网络模型,这个要了解一下,大致了解通信过程。重点是TCP/IP的四层模型。这些知识会具体体现在LWIP提供的各API中。; h) H2 p) R& {, y
2 LWIP提供了几种类型的API,一种是所谓的RAW API,就是原生的TCP/IP通信,这种通信效率最高,写起来也最难,我是直接不管它。二是NETCONN模型,通过对RAW API进行封装,API更抽象,用起来相对简单;但是这个需要RTOS的支持,所以其副作用就是需要额外的了解RTOS,好在前面也花了一段时间研究FREERTOS。第三种就是BSD类型的API,这种类型的API使用SOCKET来进行网络通信,适合那些曾经接触过SOCKET编程的老鸟们,再慢慢研究吧。6 l) @' `2 G. W
3 底层驱动,也就是所谓的ETHERNETIF,这个就是以太网接口。它是上层的IP与底层的硬件之间的接口,也就是通常意义上的网卡驱动。这个过程包括GPIO初始化,ETH控制器及PHY的初始化。F7-DISCO使用的是内置的ETH控制器,外置的PHY接口。这个地方坑爹的地方在于,我们要设置PHY的地址,这个值为0,但我查看原理图的时候硬是没找着。一直按的是1来初始化,结果是导致了DHCP不能获取到正确的IP地址。这一个地方就折腾了3天!
5 y) I, A3 ], h& C: ~5 @4 如果要自动获取IP地址的话,还需要了解一下DHCP的原理及初始化过程,这里需要注意的地方就是通过全局的NETIF中的DHCP变量来查看初始化过程中的返回状态,直到得到DHCP_BOUND的返回值。才表明正确得到了DHCP IP地址。- E* U1 j. ]' j1 M4 X
5 关于调试,建议初学者不要打开LWIP自带的DEBUG输出功能,否则你会被那些输出信息淹死的。就算要开,也是一个一个的打开。充分利用串口输出来查看代码的执行情况,效果也许会更好。
% a) T" |. ~. }) b# c9 u  q" g
+ m  p+ K7 H6 g( W2 s上面都是自己的一点个人体会,也许老鸟们会有更好的做法,欢迎指出。% P+ A# S2 X! k6 \9 n- Y0 ?% S$ s8 h! @6 Y
7 K+ ]* l4 b8 x
一、生成LWIP代码框架
, M0 \  c2 p; \. A. a由于LWIP结构有点复杂,建议新手们还是使用STM32CUBEMX来生成框架,需要注意的是,要想得到更好的性能,对于LWIP中的一些内存大小的分配要仔细考虑,只是刚开始的时候,这个度也不是很好把握,慢慢来吧。3 B- q: z7 S" E9 e! X4 |

- L, v# E$ p& B" M6 b" ^3 X我使用的是NETCONN API,所以还要启用FREERTOS的支持,如果使用其它的RTOS,需要调整一些相应的代码。1 O2 m) T1 R" _
7 A4 C3 L$ l  B8 A9 M) C  t9 b) Z
二、代码简单分析
" E1 x& r  O- O- E$ G8 d7 b% i" q
' |' ?6 U$ o; E. Q6 x: `% P正如TCP/IP分层模型一样,LWIP也将代码结构按层次组织,简单点来说,工程里面将代码按层次分为LWIP层及底层的ETHETNET层来处理。LWIP实现TCP/IP通信,ETHERNETIF实现物理层通信。这里特别要注意的是数据链路层实际被分开为数据链路层LL及MAC子层,但LL层被划分到了LWIP里,而MAC则是在ETHERNETIF层。7 B' }7 L6 i% U
) f! H$ @" _  t: Q
下面是初始化框架6 f' ^5 q- z1 A# I, p

3 z; Q& y! ^9 t& s- ]+ I QQ截图20150830112404.png
5 ~' }9 C0 t' x$ R) G
, t: F& l( b: c1 Netif_add函数的倒数两个参数,这两个参数是两个函数,分别负责ETHERNET的初始化和输入数据的处理。  L# r5 J$ T/ y
2 dhcp_start负责获取IP地址,需要一个DHCP服务器,使用一个与电脑相连的DHCP服务器即可。. o" q& m! z! ]5 ^% {+ ^* {
; K( z" a. Y) M
如果配置正确的话,应该可以获取到正确的IP地址。
  x' k, u$ z/ Z$ e3 D0 N& V, ~4 @$ k8 |$ {0 w! g5 ~
QQ截图20150830112813.png 0 J/ \( d, b& o
- c; M6 f& r5 i- l( D
HTTP服务器配置
+ _$ M# D3 z, n  h9 O+ H/ I  T0 Y1 g5 h8 g: |8 Z; a$ r7 ~/ }6 y
打开LWIP源代码的CONTRIB目录下的APPS,里面有一个示例代码,如果使用的是FREERTOS的话,基本不需要修改就可以照用了,如果使用其它的RTOS,需要修改LWIP里的sys_arch.c文件里的实现,这实际上就是在实现LWIP的移植!
' L- M+ r1 o- R5 J& l
- [! R+ y7 L; s3 X5 V* ~ QQ截图20150830112952.png ; S3 r# k# t+ z% f( k; b  ]
实际上这里就是把HTTP服务器以一个任务的形式实现,代码如下; t+ X8 ^5 A0 L  G

3 Z& U! d) `- | QQ截图20150830113538.png 4 f. ]: A) u, F' o

; T9 N4 ~+ ~. \7 E
) M, M& h7 ~2 F$ H8 n运行的效果5 O6 N4 R. b0 N3 c$ B* o1 H2 D9 S
8 l( d$ y; c, @2 R/ }
QQ截图20150830113608.png
- l$ y) x9 n$ D0 }2 K% K
6 t. c$ G$ x" |+ A  o( I  W0 V1 m$ |$ t
虽然代码跑起来了,还有很多事情要做,接下来准备做一个WEB控制界面,来实现通过WEB控制一些简单外设如LED灯的控制。
. O. w0 V% C& ^+ z/ c: Y( V' s% P7 h8 M) w1 V4 A- N5 x. v
最后再说一句,新手学习LWIP的话,最好先拿一个例程开刀,把它吃透了,也就弄明白了。虽然这个过程不是一下就能搞清楚的,中间肯定要查找很多的资料,但物有所值啊!还有一点,网络模型这个东西不要太陷进去了,免得到时出不来,够用就行了!% H  @; l* y9 z8 [* C
0 t! d( M9 K/ K0 N  N0 v

% C6 ?6 E8 {( _! {% V$ J: e
( R% d) M3 j* X& ~6 H) v! b6 m, Q$ e' |( o2 s! o

评分

参与人数 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! M% R; t5 m5 {1 d* r. W/ j- F+ c* d
不错,这快就把lwip移植好了,前两天还在研究的。。。。
& V7 ?$ ^" J+ z* w! c, `( Q
一起研究,我了解一点皮毛而已
netlhx 回答时间:2015-8-31 15:52:01
JackieLaura 发表于 2015-8-31 11:02
: R: G6 w) a" s6 X  |不错,这快就把lwip移植好了,前两天还在研究的。。。。

, Y* ]% X3 y# {5 O7 x一起研究,我了解一点皮毛而已
风子 回答时间:2015-8-30 13:09:00
楼主又出新教程,顶
netlhx 回答时间:2015-8-30 13:16:46
风子 发表于 2015-8-30 13:09
" P7 G5 q; x' `楼主又出新教程,顶
9 ]% e8 a! J* t$ {; Q
汗,这不是教程,写给自己看的笔记
netlhx 回答时间:2015-8-30 13:16:49
风子 发表于 2015-8-30 13:09( z  ^* `9 ^2 X2 h# H( C
楼主又出新教程,顶

' Y, y5 ]3 l. G+ y9 P$ v5 s汗,这不是教程,写给自己看的笔记
风子 回答时间:2015-8-30 13:45:08
netlhx 发表于 2015-8-30 13:16
* F6 W% E, T' x8 u7 W- r汗,这不是教程,写给自己看的笔记

7 r, c: {. S8 e' D0 d哈哈,差不多啦
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:287 g0 v0 e8 `% P: t
这个网页是用啥编辑的
- H& G0 ?7 L' Z# s5 W/ E- s$ Y& ^
直接HTML,
netlhx 回答时间:2015-8-31 15:53:14
党国特派员 发表于 2015-8-31 15:50* N( T! \5 R1 e9 S( x* Z
有钱淫,我们做朋友吧
4 k9 w5 X; N5 J
做个朋友吧,壕
netlhx 回答时间:2015-8-31 15:54:27
苏柚 发表于 2015-8-31 09:18
7 r/ b) i; ^0 ]" b+ H% j$ G笔记也相当于半个教程的

8 T! N$ n* K' t2 m嗯,确实
bleukey 回答时间:2015-8-31 16:17:35
这个以后要用到,mark下
JackieLaura 回答时间:2015-9-1 12:02:10
netlhx 发表于 2015-8-31 15:52% X. j9 u6 ], r' W$ l. O
一起研究,我了解一点皮毛而已
- J* I. I$ G* b+ I0 X2 q- T5 T5 e
还没有研究过呢,也要去研究研究,以后备用。。
stmcu.org.png
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版