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

【经验分享】STM32移植LWIP

[复制链接]
STMCU小助手 发布时间:2022-4-19 23:00
01、IAR工程移植7 m9 {1 ]( T  B3 Q9 H6 |
首先是IAR工程的移植操作。
& M* m- E$ E/ U
2 Q( O: ~9 V7 o添加以太网驱动库,注意,以太网驱动库并不在标准外设库中,需要大家自行到网上或ST官网下载。
8 @; a8 `; b# F6 X- F' [" E1 f$ a' Q2 O# p$ U% I
1f745e440429f0a1526ee6277bd4550a.png
% J) V5 ~/ l3 J; ]( `, D/ V- a0 {
把以太网驱动库添加进工程0 E2 R- c9 d% m9 B2 {$ i9 B1 Q
" }$ f$ `3 Z3 `$ |6 w9 [, g4 P
e06f1a4cc73e19e45ccdb1fdc5615089.png
; ]2 Z" m" b8 Y8 K7 `( O# a- U
+ U: c$ U. f- n' h) g增加新库的头文件路径
  z2 E1 ?8 n7 K8 I& [- _- E, q6 [, s
498b8adcea87056902c059ceb5630f13.png & i1 ?8 v5 K. U+ K0 |; b. z

! L0 N8 H1 w* k将LWIP源码放入目录中,我的个人习惯放到了Third_Party文件夹中,属于第三方库,以后用到其他类似FATFS这样的第三方库,都会放入次文件夹内。
$ [3 V& \) I7 \4 H  M; `' h% X) ]
0 a' ]3 q! |8 D, l  I2 Q! ~" H 1573040b0c5c201ebc0882663befe66d.png
# y) d# y# U) r3 Y$ x3 h% b4 h
* A. ], V$ d/ ^. f) H2 ^6 k我们把stm32f2x7_eth_conf_template.h文件剪切到文件夹中,并重命名为stm32f2x7_eth_conf.h' U, l5 l) }2 d  ~

: ]* |% V3 B) L( T8 M4 ~; R 5c9591ce998030988e98bf72d9fa4f0e.png
7 p% l9 O( j, C& x% Q# u6 V; C: S% M& O4 J3 C1 c2 m( H+ a
修改文件名称2 h4 T* o# P" e1 P4 `' [, O5 J
" t/ _9 C! U# y9 c4 C
a9fcc3bd84adc1f24cfb5b2a33ddb410.png , t8 n( x3 j% \& p( l6 ]! X. x

% }& }0 Q3 N/ g& e7 \当然新加的头文件,要添加新的头文件路径。
0 g9 Q+ J& c5 `2 ^( i* X+ G2 p. w& m7 f- _- Z
9 d6 \/ G" g. n eb951db551193af8ea4d626d43ab5238.png
2 b1 u1 B/ D+ }& X
0 ]0 {6 A; e/ _$ l注意:这个文件是只读文件,要把对勾去掉,不然的话在IDE中无法修改代码。  D1 i, a4 z& Q( c. n
: F' p4 X! r; _5 k
d0c4e72946d9d4e935b863ea93e994a0.png 7 \( W5 ]& Z: [% g9 a" q

9 L: T2 V6 R) M( G' _" F0 @添加以太网RTL8201EL的驱动程序) K0 ?0 J! ~8 r( {
. [2 o5 j& q# Q0 G6 ]/ x
我们首先拷贝官方历程驱动,这部分主要是硬件层的初始化,在《LWIP初体验-修改ST官方demo》中,我们已经修改完代码,直接拷贝过来就行。7 d+ x* Q: g# Z, V; V, j' ~" w/ U, C1 Q

$ q; U- A* _  ?- B: X: K 6fbd62d3810b14e629450745ade7efb0.png
; Y" R2 h1 ?0 y2 C
. {# Q3 U" a4 j  y放入对应的位置
) m: j) K+ ^+ w) O+ ^- W% G& ?* R/ D, I0 j2 A
d83f76234671dbd2644b84d028a60a6f.png
) v: E& R& J' j4 @0 S  a+ z2 a  P# h  {, C
然后把BSP硬件驱动添加进入工程
' g5 D+ ~5 ~: T( \
! S" W& R, U2 W 8ed88da43af541d3e346f6881b1f143b.png   r3 P" ~4 i2 s) ^9 V

/ G- J2 C5 |$ V; R; J# C. q添加lwip源代码,直接按照LWIP源码目录结构添加即可,不用全部添加,按下图所示接口
2 h: Z& I/ }  V) U. Q( j, R! N
  X$ X: t1 q$ a# R 84f7110defc436c4293dd5a2daec1f9b.png
& d9 E8 j: T  I, s/ h, d6 x" u) Z& e$ t0 E, \+ Z% @9 z
添加API相关文件
& H5 V6 k8 y' n2 M! c" _& N
# i" T* \, o3 E8 q c231e625e6d0348009cf745252d42878.png
& ], ?" r: v6 S5 y! S; v3 S5 }/ T
添加Netif相关文件
' F, X5 w" _# H, j: q6 O
2 X# w# o) k+ a: ^ 3700e2e7e3057c45e4276c2297d1b126.png # m4 ?/ i$ `: w% C3 Z$ L: ~+ O% V1 d
* G9 Z7 w3 v3 b6 S/ A4 m* g
添加IPV4相关文件& ~9 ]0 K. P1 y8 [/ [7 s
6 \" w4 x2 i4 P5 O8 _
a2f0ae98516f3c257d7a21f860a32311.png
/ l8 w  [% o5 r, H& J; B
" V5 l9 T2 Z  ]: q) K- W当然,还要添加头文件路径,这是必不可少的) _3 g5 u& b' ~: `

4 u" B  ^+ ^8 K: U, O d296d76ae070d69fe8e5ea4e11b4dd8e.png
9 [' U6 C4 s3 F$ G" a. v! w% n/ P, E9 P0 {( W2 W
添加中间文件7 s3 R: h" J! [" _- u+ R
3 K; w! X9 ?- ^) D0 S
c3c1200d2304b8fa42f9be7b1c2c2a21.png ) Q4 C& F$ b) i+ J! N
5 W! z" ]+ ]( S; E  }6 f* _
添加lwipopts.h
/ F' Y% g* Z- K# ?' _0 K. H
0 e1 G1 w5 n+ y0 p a83f4e00ad9ff4c0cfc65aa9abec13b6.png . `4 r; @7 u+ o# H
3 i9 x4 G) \$ c1 W" b
编译出错
1 ?: u) h, E7 @1 H2 W2 {1 B6 j- f  X$ i: p3 f% N
1b67b5bbe3f5431ed62cfea838fc1da3.png . ?6 j4 q. x+ O

# d4 M: |& h3 p5 o8 B9 E" N) Y- F这些文件主要是官方开发板的lcd相关文件,把他们屏蔽掉
4 [, m# `' Q5 b$ _- o0 [  m% L% s: k, q3 e) u
c5245b4632cf8253b64b85a1f369a960.png ; c. `  O0 a9 O% d2 w$ z

1 I' e# n8 X8 c/ U9 t+ ~  e, a/ c再编译,出新的错误,再次屏蔽这些现实部分的代码。6 C( F8 g" R( X
6 G- r0 x$ I% M5 ?" W* ~
6fc6f77d999f69d55ade059ae941a3dd.png
/ T8 \( V) }& W3 h: E
6 M" u) D4 B# ?. |8 a& G, N! b修改之后,编译没有问题& z0 e; Z+ _7 d. J1 q# B/ G7 M
% ?1 i$ s0 `: a& o  q" _
273984ff1a8415cd93de4861cc782b6f.png
# L1 a/ |; p% H* b) P$ o% ?- Y0 n% z4 b1 `& C4 W
复制驱动,直接使用官方demo的文件,3 x* R9 B1 u8 k5 I" d

) W$ H3 U+ Y0 R4 ^9 A$ x 185f015cda2796d2a076ee4ebe7b3b19.png 5 J4 z1 c  v' B5 U- ~

! m  o/ N/ V: _% _拷贝ethernetif.c文件  o6 q+ \  v# B7 m, H- `) y

- |# d3 A+ ^  X/ |' W/ O 165ca8c819c9037f3b4393f9d9f2a556.png 7 d" I# C: H' m: }# P& x/ R4 U

3 y6 h5 z# W6 S( }3 T8 {拷贝lwipopts.h文件。6 Z% V* Z/ M3 j- H* d% i

6 J6 G2 O% d8 t0 e9 Z9 h5 S7 c7 B 0f50205657669bd081d30e2291f7962f.png & N/ J6 D3 Z, G

% J4 h' m9 p! C/ D5 O把原来的文件删除掉8 W- A& o. ]: ]8 n" x0 F6 o  e
6 A  J" `' k0 X# B- M6 S
21c613ac9c41e4b2103e6e2aa1b2fe28.png
8 u0 T2 ~  n9 }+ f4 w$ p( u0 Q
, R7 _, Z! [% ?# v5 v, v  a重新添加我们新添加的文件(注意解除只读属性). f, @6 O( i+ g) Z- f8 T3 u

# ~' ~( F  Q. q, t$ T( w* j修改文件  {# B4 X8 E5 q7 g. @3 M

2 b$ c! |: i: Y3 Y7 ~ be0b35ad77e375d5bd5b109c919e2ee1.png
. |, O) u+ d" K8 Y# ?- k  V5 Z
新建lwip_app.c和lwip_app.h文件
$ R! w" t: l# U! u: K6 O
9 T1 N; k' F/ \$ K3 C% Q! F$ o 3f586d71809f026978175e1e446177c4.png
# v! c- [" [& H
2 n$ h! ]. S$ U4 U. [添加LwIP_Init函数接口。
) p1 v3 D& I- `* b/ G+ Q. U" A4 d" d' T9 h" ~  O* i
bfa259382a8ea9061f645462296c234e.png
9 k4 y. n$ _: g* Z$ P
: h' P1 z: S. R2 N1 e8 Q5 r增加LwIP_Pkt_Handle函数。4 H- |& f3 Z/ U* ?5 ^8 N% i

; ?6 V" a9 l" l; ]4 [1 \ a6d7942ffd68fbd2633b88356c1e761f.png
: ^& O( i0 L) c7 T  ~  W; n- K3 q* i/ X3 ?4 h
定义一下宏
7 S' @# k, G( p; h
0 n3 k* f( T1 T7 E# ~: T9 ? 6d484f1e20d8f0ff17cadfa2b002d610.png
+ }* c! A# Y7 m& j9 k. n( O0 H  A& m. D/ h" K3 g
包头文件包含一下7 M7 @  c; [$ {" ^, @2 V) [2 T
& q1 U6 ~5 w/ i8 O6 H- l
70d45e0f9c96c5a0c50c28ef8764edfc.png 9 e" @1 ^' c( }; K) x9 n
  |: t1 a" y3 u6 m4 }
修改函数8 _! k% \( Q& T/ z" r
( Q4 @) [0 ]8 i2 a6 F# t. @4 \
b0de1f1dae287878d35d84f7d3c62ed5.png
4 C+ F- S) x4 K9 h/ _- m8 V2 _; H8 x  g* I
修改主函数
' ^- d9 q& X  B- I8 D
8 V" Y9 r0 w* H# X9 d2 }8 E5 Z 7f04b4d65b01f88b096a2af402faafe4.png 5 o' r) r8 u1 E9 F) {. T

/ _: c  O7 M- G, k- N- I" @6 t. W使用PC端ping一下开发板的IP
% u& m+ b: c& {. l  `3 ?# k% P; J5 C; S
8dd280abfb557714d82826495f754b4b.png ( b7 ~% p4 l) u( w9 L3 Q& |- @' r

2 l3 B: t2 V8 {% H, x% F5 }移植成功,可以正常响应ping。
3 [( S% M5 @4 n$ ?$ ~, }: E3 \& O9 G( U3 s% _
这只是个简单的移植,就是个流水账,想看具体修改内容的,可以到文章开头下载工程代码,对比修改前和修改后的区别。网络部分有很多知识,想深入了解,还需要自己多看看代码。  V  k5 F; L5 W  i, O* R

- j0 W: r2 U2 B* H3 q. \# S( N% h02、修改Keil工程
( D2 x: E3 B, r( l添加文件,这些基本和IAR一样。
1 x; K' }2 h3 C1 }3 |3 u
" O% n& x. U: d  f4 T5 u; M 9b14231f1cf035928c9fff35be819087.png 8 s* z/ Q- q2 M( a, I/ b0 v" w

# }0 J' l8 K$ n: s- T. N添加头文件路径% i4 r/ L' L  H+ P& }# ]
  G  J( Y* f) H7 y
08172af71a169d889a3c1b0a60a0f4e1.png
& c, y2 _* J3 K: |+ {3 ~0 Y
( P+ ^, i2 \! O. m- H8 s编译代码,有1个错误
1 `5 d0 F2 i; m' Z* U( V+ r8 U
# C# Q$ k9 O/ D4 l a49ecf6b8053ce2d52e4c3aacc267906.png - T9 b! [' ^  p6 X$ \: k+ @

2 n) ]) S" e6 i9 g, G; _$ h在timers.c添加
2 m6 a/ Y+ z) C/ k$ Q: e/ T: K0 O& t( o/ G
4078634d9185ccc0429afabc42ad47c1.png , u8 \. ^8 c6 i% j! G; T. K
& ]8 A* U: g- j9 k  Y1 j" Z/ p* T
代码如下
/ l  T% Q2 D& J' n# O, E6 W& T4 u) l- }  t' |5 ?: P7 j
  1. #if defined   (__CC_ARM) /*!< ARM Compiler */ 6 o2 M3 ~, @/ E9 [' U
  2.     u32_tsys_now(void){} , T$ {: ^! v* s7 k6 B
  3. #endif
复制代码
: ~8 x3 D: {3 k  p2 J% h2 l& h7 n
​​​​编译下载,发现ping会死机% {- C& G/ ~# u6 B7 P
修改代码优化等级就好了0 F2 E) r1 `8 r
- o' N' n4 |- P( u4 f6 Z
950c66fd285bb7fd33ce38e653edd704.png
% J* _3 n/ ?8 N; U1 c6 W& v1 k9 x" K8 U: V
测试成功$ \* D9 o  R- L% C/ `3 `! I+ @

. y  w7 p# G" z: Z9 D5 ? fcafdab9111c71433555efa050145a68.png , b, ^2 Q; ?4 \( \7 r9 g
6 F" O3 D) {3 H& I
总结:这是一篇流水账的移植记录,深入了解LWIP网络开发,还是要动手自己移植,多多研究源码。
( _( w. @- q2 Z- g+ s. C( ~- [9 i. Z% ^4 f9 X1 |

2 N) y3 a! b1 j: @  K$ U
收藏 评论0 发布时间:2022-4-19 23:00

举报

0个回答

所属标签

相似分享

官网相关资源

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