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

移植LWIP到STM32F207

[复制链接]
STMCU小助手 发布时间:2021-7-23 14:38
在上篇文章《LWIP初体验-修改ST官方demo》中我们已经在自己的开发板上实现了简单的TCPsever和TCPclient功能。验证完了硬件,接下来的工作就是优化代码,添加应用程序。+ h- \+ |& b/ b5 n) n" ]
有些同学想学习一下,如果下载LWIP的代码,然后移植到自己的代码中,下面我们聊聊移植问题。
$ T8 T1 v2 d2 T% q我们需要的基础工程是已经实现了10ms定时,led灯1s闪烁,实现了串口打印工程。还需要一份LWIP1.4.1的源码,需要STM32F2系列的以太网驱动。( J4 x# K+ L5 o. f  s0 j5 ^
3 \$ m% u/ H0 a
IAR工程移植
. D7 K9 T- p% L" y( x7 s2 s6 f0 ]
6 @, E* O, s, z
首先是IAR工程的移植操作。0 w1 d6 b6 x$ n  K
添加以太网驱动库,注意,以太网驱动库并不在标准外设库中,需要大家自行到网上或ST官网下载。. Q( z" c: J1 s! M  B& @9 N" @
1.jpg - t( E9 |# P6 ^" x: a# h- I: T3 b
把以太网驱动库添加进工程. q" j) o/ |% x  a' d0 M- L1 ^
2.jpg
3 b5 m  u. o& ]: x# s& s% l3 J% Q( E$ S$ k' R7 A
增加新库的头文件路径' V$ @+ M) v3 ?$ e9 c' k8 Z1 _
3.jpg ) t/ k( N" I/ V" ^
' H9 W  h4 A1 ^1 h1 K% r
将LWIP源码放入目录中,我的个人习惯放到了Third_Party文件夹中,属于第三方库,以后用到其他类似FATFS这样的第三方库,都会放入次文件夹内。
9 p) ?8 Q" E! N7 |- o' F) e 4.jpg 4 m  Z4 ~! P. {
9 y8 z0 ]# r0 ]" t4 g; Z- X3 K
我们把stm32f2x7_eth_conf_template.h文件剪切到文件夹中,并重命名为stm32f2x7_eth_conf.h7 j- R) u4 v  R0 |& u. V: @
5.png 7 x4 p" O* C- ]7 C
+ I7 @. L8 m4 A1 B" m" ?7 @
修改文件名称9 @2 J6 Q2 @% P8 H
6.jpg
! j. C# B4 X: n; q% _# b
& h7 l1 z3 n; S# c5 a
当然新加的头文件,要添加新的头文件路径。
& O* C3 F3 s0 c) Z+ f  X! } 7.jpg
0 `1 A1 d1 ~( H5 x* ^) D/ T. X9 U" ?5 f0 X; ^8 r
注意:这个文件是只读文件,要把对勾去掉,不然的话在IDE中无法修改代码。
6 l$ Z* N  f! c5 d, U+ _ 8.png
9 L* u$ o( _7 }6 T) Q: u# D: p3 a' W
添加以太网RTL8201EL的驱动程序( o, R0 ~' Y) z5 [5 v
我们首先拷贝官方历程驱动,这部分主要是硬件层的初始化,在《LWIP初体验-修改ST官方demo》中,我们已经修改完代码,直接拷贝过来就行。
5 A' ]! {3 u9 M! \* j 9.png 4 k% s; V5 O; D4 f
- T/ S1 q3 t4 h1 T0 v" G5 D
放入对应的位置* `6 k5 w6 Y" d. z9 i* R7 X
10.jpg - V( P9 Y2 n! S/ N; D% l

. i0 U! _$ C6 f, p- k. l
然后把BSP硬件驱动添加进入工程% z6 \; q( B9 t1 |. \; w
11.jpg # v( Y" [3 w0 g
9 `5 T( Q- b+ M9 u0 C
添加lwip源代码,直接按照LWIP源码目录结构添加即可,不用全部添加,按下图所示接口( c) [3 R/ `4 _
12.jpg # `7 p/ h9 m: `$ M, ]
$ d/ D2 o$ {% B
添加API相关文件1 N9 n$ P& B3 T: I2 K4 }
13.jpg
( ~: r3 X* i$ I8 T9 t. o% R' o6 ?! R4 \. t, w2 s. t
添加Netif相关文件
" {: U' p% {0 Z 14.jpg
1 K7 y5 W4 l# M) v% s, D+ h1 P+ p; l# W0 Z+ z6 J- q! d9 D
添加IPV4相关文件
6 |3 \1 f; Y( p0 a( a; e$ v 15.jpg
% F3 U# r5 k! a6 a5 l4 ]4 N. y, Q3 [. Q5 `: h% G
当然,还要添加头文件路径,这是必不可少的4 V$ ?$ X: i8 ^. s: j4 \- u+ @
16.jpg + ]! i3 ^! k4 P/ R. l: C

& w" o; r1 @3 |' v
添加中间文件  h: X9 u9 }3 _" H/ G% v
17.jpg 2 [( q4 ?4 [# m7 O; Z& R' }

. k& E3 K. l( S* w+ X# |& h
添加lwipopts.h/ ~$ k  Q& J  ^& F  @
18.jpg $ ^# d* K! l5 h6 s8 m) H0 E. s
" I, d8 z% w1 X# H6 U! _
编译出错2 u  C7 N+ x. T& q1 a0 w  \1 W
19.jpg
6 k2 J( i1 e2 ?1 T2 v  `) _9 G1 ^
这些文件主要是官方开发板的lcd相关文件,把他们屏蔽掉7 y" J. f& e1 r/ t* Q( m1 I2 i/ D
20.jpg . N# ]8 E$ X5 R5 C+ f) j; @: J
* m  l' J+ y) z' I
再编译,出新的错误,再次屏蔽这些现实部分的代码。. U" }* F1 m- m' \# M! s$ a4 r
21.jpg 5 Y* }  v  x7 ?
2 ~/ g- w; {6 a, X8 G
修改之后,编译没有问题
+ f3 v( I. ?/ G! B, C6 q4 [# G( l' v# | 22.jpg 4 P" Z( @8 v- Y6 o) c

( i4 c; @* h' b# I
复制驱动,直接使用官方demo的文件,
$ z# q  D% j! B9 ]/ h- D/ m 23.jpg # D# c, ~+ u' F" G

0 x- ?4 x: \& @1 D1 H
拷贝ethernetif.c文件
% d6 d6 }! D. y2 I% h3 y6 M1 y* k3 Z! D 24.jpg
( s9 A4 c# `1 |, e# |
7 f+ z. `- `+ u0 c* G; H- d2 K
拷贝lwipopts.h文件。
9 m- o- |5 b' j8 t8 [ 25.jpg
' i9 y) {9 |8 l9 b
2 m3 o/ e) r" X/ F) F: E5 f8 x
把原来的文件删除掉/ O/ E% v" Z3 ^$ X2 Q9 N
26.jpg
* A+ M4 y: O6 L  f: D
6 A+ y$ x4 Z! V. I# j
重新添加我们新添加的文件(注意解除只读属性)' H1 k  v. o: A  W: E+ u
修改文件7 M- a1 G$ B/ l
27.jpg
& o1 M, [: M  V0 c0 v, @2 v
7 [& a1 ]) e4 w* [( ~
新建lwip_app.c和lwip_app.h文件7 Y2 K7 ^. H4 z: `
28.jpg 4 N. [7 b: g* J6 m) e
5 |' R: j2 X4 R& a6 m& e" s3 }
添加LwIP_Init函数接口。
6 W1 Z, {; K" l0 H 29.jpg
" n0 q5 z% A  N3 U; n' b  K
  v7 h+ ^" }' t$ x2 }
增加LwIP_Pkt_Handle函数。
- T. O  @* ]) l1 h0 f7 E2 z 30.jpg
" V4 c3 d% B! }
0 d! P& k9 Z* i, B* V* G2 s& |
定义一下宏8 e, b5 t! F( R, y# U4 u! B+ F
31.jpg % Q8 S$ `( J7 W
$ M+ R' [' l/ q  b$ [
包头文件包含一下( T% g2 t2 d( S
32.png 6 g! S2 f# F: M
- u2 H' Q# z" K+ {  A& k
修改函数
6 {& F: C% Y/ ]% ~1 J" M 33.jpg
' z$ l: G: s0 ~& F2 L& u/ X- G% Z/ w2 {. I+ _
修改主函数
  V+ j3 M" c$ r 34.jpg ) c) v! q! M$ y, E! E/ b
9 m" @9 a% Q$ J( m6 v+ z
使用PC端ping一下开发板的IP
$ Y) C* v8 t9 h6 ` 35.jpg
+ z7 b% q3 K3 r3 A5 e; F( h+ P/ T( j! ?2 k) w! O( ]
移植成功,可以正常响应ping。
3 T: p& y) N4 j# F这只是个简单的移植,就是个流水账,想看具体修改内容的,可以到文章开头下载工程代码,对比修改前和修改后的区别。网络部分有很多知识,想深入了解,还需要自己多看看代码。5 z+ E- s, U" P0 f

% q; F( g' X: b; B3 {, c+ ]
/ a( Z* U9 U6 x3 s4 D% a  H4 P: b
赞 收藏 评论0 发布时间:2021-7-23 14:38

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版