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

【经验分享】STM32移植LWIP

[复制链接]
STMCU小助手 发布时间:2022-4-19 23:00
01、IAR工程移植
2 X5 ~) j' a3 d5 z) M! e% d首先是IAR工程的移植操作。" S7 {. A! E  G+ ]- C

, V6 u( I( d0 x8 p" l0 n6 z添加以太网驱动库,注意,以太网驱动库并不在标准外设库中,需要大家自行到网上或ST官网下载。
% X# m8 l  c* X" |% H9 f( h2 v& q
  c; c9 x  E. F; ]$ S 1f745e440429f0a1526ee6277bd4550a.png
( L: W- U. y1 J
. ?6 P! ?  m$ c( C8 Z8 P! a  W把以太网驱动库添加进工程+ F/ u$ V. z* ]: ^
3 z1 f( @$ `& K- k* b5 ]" E
e06f1a4cc73e19e45ccdb1fdc5615089.png
9 x1 T$ M4 |: N+ u# c( v( M0 b1 _9 m) k
增加新库的头文件路径  @! S- _# B  z  L2 Z- {

( Q' x/ C8 I5 V/ M 498b8adcea87056902c059ceb5630f13.png . c# B8 B9 n0 `9 \

8 x% C# ]. M& `% L% V3 M将LWIP源码放入目录中,我的个人习惯放到了Third_Party文件夹中,属于第三方库,以后用到其他类似FATFS这样的第三方库,都会放入次文件夹内。9 x# h1 B: U- _, P
+ N) ~# X- L4 g1 z' j/ a
1573040b0c5c201ebc0882663befe66d.png
  {8 y9 |) c, k' o: }
* [2 ?! n+ n6 P2 o, s我们把stm32f2x7_eth_conf_template.h文件剪切到文件夹中,并重命名为stm32f2x7_eth_conf.h
" ~2 k, Q- y0 J4 E) e2 I- d1 \( i. Z6 z2 [2 B! @- z$ R8 C8 M! K
5c9591ce998030988e98bf72d9fa4f0e.png
: T: _$ d) e5 }/ w5 R9 [3 f8 M" l+ f
$ o$ {2 K5 e* p修改文件名称
2 u4 k: V) A* z) D; q$ y4 K; [& I0 G. N  I5 q' N
a9fcc3bd84adc1f24cfb5b2a33ddb410.png , S) H% c2 l0 q

# I% |3 B' x8 O) J9 \  D当然新加的头文件,要添加新的头文件路径。) j) V; c9 I) e9 U/ U  T* c
- A' L. ]+ A* j9 e8 S/ o
eb951db551193af8ea4d626d43ab5238.png
+ L- y$ x" k/ l8 }$ g) r) u! W; o5 I% n3 O  ]. Q* a' Q7 C
注意:这个文件是只读文件,要把对勾去掉,不然的话在IDE中无法修改代码。
+ a, Y' T6 x# o7 w- V, T" R9 ~8 q# I! b
d0c4e72946d9d4e935b863ea93e994a0.png
& L0 _. X  p( r3 R, G. J: ?- x1 H% _) z! c1 i9 D# r4 {) h6 v$ s
添加以太网RTL8201EL的驱动程序
1 j& y2 Y3 L6 [* U6 j1 P* G7 E1 F" w; }
我们首先拷贝官方历程驱动,这部分主要是硬件层的初始化,在《LWIP初体验-修改ST官方demo》中,我们已经修改完代码,直接拷贝过来就行。! ~( B' w* o& G1 Q! U6 _

- T- g# a( _2 y: K: n 6fbd62d3810b14e629450745ade7efb0.png
& l" ?" e5 a  i7 H. [
) X3 h3 h8 Y- e8 [% m7 o放入对应的位置
* f5 ^' O' A- ^( {5 y$ V$ y9 P* _
7 `6 N5 H8 _/ n' I6 t+ T d83f76234671dbd2644b84d028a60a6f.png $ T( W/ G6 p* G2 Z% e
/ W) C% H: N; L% b5 _
然后把BSP硬件驱动添加进入工程7 Y# q4 @( f, b3 }# k* F. v
0 r5 Z' R. F# d; @" M+ m# A! K7 V6 G
8ed88da43af541d3e346f6881b1f143b.png
" H% H4 h  V" X6 l, y# C* J1 |* A6 ]/ |5 g# _2 s7 g, T; P7 ]
添加lwip源代码,直接按照LWIP源码目录结构添加即可,不用全部添加,按下图所示接口
$ _; R8 m8 M- f) e' Z& `9 M
2 R4 B7 t( V/ m# b% h 84f7110defc436c4293dd5a2daec1f9b.png   @# ?$ h5 d9 i4 [% _4 S
( m. U6 O0 {# a* e1 J; x: h; q
添加API相关文件  }: y% _0 W# q, K, O
' U( a3 g1 ^+ m9 l& }) b' F- g
c231e625e6d0348009cf745252d42878.png
! T5 Z# j( L: B$ B! o4 y+ c1 Q) J2 U- H
添加Netif相关文件
4 {- U& l, Z! N' \; `# A  T7 C! @! Y3 O* D1 ~3 n
3700e2e7e3057c45e4276c2297d1b126.png ' r1 a3 g' G1 s1 w7 U3 v
6 N- `2 _& O5 }/ y
添加IPV4相关文件* @+ A0 V' m/ x! a- I
6 w$ _- ^3 a% h
a2f0ae98516f3c257d7a21f860a32311.png + u2 h# H3 I) I6 q# U1 A: c
/ N; r' m+ u. S+ R! ]
当然,还要添加头文件路径,这是必不可少的; _, U( l2 h8 @: d1 H- U5 `; d
5 X; f$ v7 n0 N; K
d296d76ae070d69fe8e5ea4e11b4dd8e.png 1 c; w- O/ E( h  C; n
* }- R3 E: W. T7 b+ C7 s. R; M2 `
添加中间文件- M" l0 n: U6 d0 {/ q" l% Q; K

0 D; m! |0 r/ j c3c1200d2304b8fa42f9be7b1c2c2a21.png
% ~$ R. p2 c( p3 T
& ]" A6 M" l0 E1 Q$ m添加lwipopts.h  }& l3 }9 G; l; J4 ?6 ]
* b! V: L' B% I7 ~( y. j
a83f4e00ad9ff4c0cfc65aa9abec13b6.png
1 k- m' o9 u) A
2 F7 h) J1 a4 k0 V编译出错1 R; ]% \: y1 U, r- p

9 n3 [" X  z+ t# s$ W 1b67b5bbe3f5431ed62cfea838fc1da3.png & h/ e* {3 N1 i; s( h, R8 K$ U6 {5 U

+ z4 D6 W+ X/ B/ J这些文件主要是官方开发板的lcd相关文件,把他们屏蔽掉
; f) l3 z8 S* `: H0 O% z  j$ W& |6 g
c5245b4632cf8253b64b85a1f369a960.png ! c5 W" L4 m4 [: e, s
+ R2 j& P) A6 a: K
再编译,出新的错误,再次屏蔽这些现实部分的代码。! |1 @- D7 O/ ~! B: ]. @

6 q7 Y: G. |1 ~& o; E& d 6fc6f77d999f69d55ade059ae941a3dd.png 5 K# \3 O$ k2 }" `& _) C

1 |5 q% I1 a9 c; F. @- n4 s修改之后,编译没有问题
) {! a, Z' f: S% k: N
6 N5 h( ^8 q7 Z5 f/ W( C 273984ff1a8415cd93de4861cc782b6f.png 5 q/ v+ S3 c5 E3 M( G
( z8 ]. l! N! |1 L: X  a5 d$ }
复制驱动,直接使用官方demo的文件,
3 w! [7 s4 P0 z- f, b3 F2 b2 w1 g
185f015cda2796d2a076ee4ebe7b3b19.png 8 ?3 C- A8 j( b: i# [) u4 g

* {2 d: H1 r) T' I% s, B% A拷贝ethernetif.c文件5 A; T. y/ \6 e9 \/ U2 Y  a
9 \, P# U: c- y# A$ \0 J8 v+ O/ @
165ca8c819c9037f3b4393f9d9f2a556.png
+ J. T" H% ~/ b; N! @; G* E' M1 t6 S  m, n3 D0 o! f
拷贝lwipopts.h文件。
! ]# Q  o& l# \. [# P- _+ |( @: I& G# u$ a
0f50205657669bd081d30e2291f7962f.png 1 m- ^+ }+ N3 s6 [1 L
5 R8 \  D! c' H& r& C
把原来的文件删除掉
/ y0 [: l/ r8 k- D
- {/ K& W; k  R5 [" d. k 21c613ac9c41e4b2103e6e2aa1b2fe28.png 7 ~+ ?; j5 ]; V( \( c
3 j# s' x6 d$ k9 u  r1 V" a6 ?
重新添加我们新添加的文件(注意解除只读属性)
# e9 O) X( f. r& i; d% a* \$ F  ~0 u- Z
修改文件. \/ m1 ^; m" M( v
# V* t9 S3 \5 C) q# m
be0b35ad77e375d5bd5b109c919e2ee1.png
( w/ u9 w1 O7 C3 [8 I8 ?, }; I8 g& f1 d" Z  _- g: i$ ~5 T4 r
新建lwip_app.c和lwip_app.h文件
; g& ^( }4 _' a" {6 f, a+ T8 x; k+ C- G
3f586d71809f026978175e1e446177c4.png : N' K& `# }, X9 C4 U; E7 D3 |; |
  Z8 q. Q/ _6 T, |6 @% Q
添加LwIP_Init函数接口。% J9 G6 d$ j- v0 p% X5 U
% H4 m% o6 N2 I0 m8 Q- J" o9 g  n
bfa259382a8ea9061f645462296c234e.png & f8 }, @; ^! K2 n* m8 |
) k, R) n" X2 G0 i
增加LwIP_Pkt_Handle函数。, k7 N+ P3 ?; Z: T

" k8 n: J* \& U7 g7 p& }  O2 ? a6d7942ffd68fbd2633b88356c1e761f.png * \: F7 `) I0 J6 b

2 j: |3 A( B+ @& b" i& _& `8 h定义一下宏: o( X: Y0 s7 S( T& {$ s

- U, _$ t! x, C! K 6d484f1e20d8f0ff17cadfa2b002d610.png & D" y5 ~/ X9 I
1 q% q/ X. e! r2 b
包头文件包含一下& f1 Q8 |. N7 v8 L

) Q/ ?) Y3 Z9 n+ H 70d45e0f9c96c5a0c50c28ef8764edfc.png
3 b6 }/ k; ~5 M) N6 I7 J
6 b. S( m+ e, o- o修改函数
/ Y- D0 F. y1 S# v! M0 T. {, x" |: V% D% ~" F3 [
b0de1f1dae287878d35d84f7d3c62ed5.png , u! E9 h% v' n6 x/ {
  u4 B* R7 U  _4 x2 Q; @& c
修改主函数
7 h8 R# Y7 C. Y; o" _2 s# u4 W; K1 z& n# B; x* F$ o8 _
7f04b4d65b01f88b096a2af402faafe4.png   f$ l) T. O' m7 L' L5 V! S+ n

' Q, x5 \, e2 c  V使用PC端ping一下开发板的IP+ S' D, Y* S7 i

/ Z% K, x! u2 i! J2 A& \- M0 ]8 @ 8dd280abfb557714d82826495f754b4b.png 1 z& \# ^# o7 e2 ?1 ]1 H
( {; q( }8 O8 F! A- _
移植成功,可以正常响应ping。
6 g# f% B% L  L- ^: Y# ]5 v0 j8 A  @! d: l) e' u9 w
这只是个简单的移植,就是个流水账,想看具体修改内容的,可以到文章开头下载工程代码,对比修改前和修改后的区别。网络部分有很多知识,想深入了解,还需要自己多看看代码。
4 K$ D5 M" T* z& ]
1 r( s! z, x4 C# \3 z! e/ a  q$ P02、修改Keil工程
" _3 B  }  ^; b5 L$ w" d  R  {" z添加文件,这些基本和IAR一样。
: K6 ~+ s2 g  W5 B1 p9 I* q0 h& v' C7 g
9b14231f1cf035928c9fff35be819087.png
+ B4 v: L! h; U+ P  x9 Y( W. y9 {" H8 K6 K# u1 \
添加头文件路径( D, [2 t+ @. L% _
5 D& u7 h+ L$ H& m  B) M) p
08172af71a169d889a3c1b0a60a0f4e1.png
0 m3 x4 O8 ~- O4 A% k' @6 z
  f& E  W, i* {* L) C& n编译代码,有1个错误" Y8 K& t5 |8 v' v

/ P; y" Y2 @6 F& W& m' i7 j6 H) B. B a49ecf6b8053ce2d52e4c3aacc267906.png % F) u2 H* }. P- f

7 i# ]2 J7 H: b( t$ r0 o在timers.c添加
" t3 n2 E! d7 q* C' c* F. }( J* U" F1 P3 I7 j6 }6 C9 @! P
4078634d9185ccc0429afabc42ad47c1.png # W2 u8 [% P+ F2 k8 L8 c

0 ]: `. F* X- h6 l# l6 W* f代码如下; D/ O' r( [7 e" c' S: @

2 i# J% r2 M& y# R
  1. #if defined   (__CC_ARM) /*!< ARM Compiler */
    ( T; W2 G/ r& C+ e9 D$ V
  2.     u32_tsys_now(void){}
    ) l, [  e3 n: H% J4 N( g
  3. #endif
复制代码

. V/ S8 X  j' C. p* o: e, i4 |​​​​编译下载,发现ping会死机- u, o) M3 Q0 k" J
修改代码优化等级就好了* \# X0 g9 T# u% Y

9 x1 Z8 }, Q7 z 950c66fd285bb7fd33ce38e653edd704.png * ~) x/ ?. ^: K& I
# g* g3 E( A) g
测试成功
2 I$ B! D7 v' a$ n+ }8 ]
6 r. a5 o' u) v8 t" ?- } fcafdab9111c71433555efa050145a68.png * Y1 w' E: E0 @8 V0 }7 P' g

- V0 F9 V. K9 \, n7 F总结:这是一篇流水账的移植记录,深入了解LWIP网络开发,还是要动手自己移植,多多研究源码。( y& d1 c9 d! K; T, X% M4 t
: Q: O7 D- I' G( K% M
" ^0 [( n. ~# G
赞 收藏 评论0 发布时间:2022-4-19 23:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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