STMCU小助手
发布时间:2021-7-23 14:38
|
在上篇文章《LWIP初体验-修改ST官方demo》中我们已经在自己的开发板上实现了简单的TCPsever和TCPclient功能。验证完了硬件,接下来的工作就是优化代码,添加应用程序。+ h- \+ |& b/ b5 n) n" ] 有些同学想学习一下,如果下载LWIP的代码,然后移植到自己的代码中,下面我们聊聊移植问题。 我们需要的基础工程是已经实现了10ms定时,led灯1s闪烁,实现了串口打印工程。还需要一份LWIP1.4.1的源码,需要STM32F2系列的以太网驱动。( J4 x# K+ L5 o. f s0 j5 ^ 3 \$ m% u/ H0 a IAR工程移植 6 @, E* O, s, z 首先是IAR工程的移植操作。0 w1 d6 b6 x$ n K 添加以太网驱动库,注意,以太网驱动库并不在标准外设库中,需要大家自行到网上或ST官网下载。. Q( z" c: J1 s! M B& @9 N" @
把以太网驱动库添加进工程. q" j) o/ |% x a' d0 M- L1 ^
3 J% Q( E$ S$ k' R7 A 增加新库的头文件路径' V$ @+ M) v3 ?$ e9 c' k8 Z1 _
' H9 W h4 A1 ^1 h1 K% r 将LWIP源码放入目录中,我的个人习惯放到了Third_Party文件夹中,属于第三方库,以后用到其他类似FATFS这样的第三方库,都会放入次文件夹内。
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: @
+ I7 @. L8 m4 A1 B" m" ?7 @ 修改文件名称9 @2 J6 Q2 @% P8 H
当然新加的头文件,要添加新的头文件路径。
) D/ T. X9 U" ?5 f0 X; ^8 r 注意:这个文件是只读文件,要把对勾去掉,不然的话在IDE中无法修改代码。
6 T) Q: u# D: p3 a' W 添加以太网RTL8201EL的驱动程序( o, R0 ~' Y) z5 [5 v 我们首先拷贝官方历程驱动,这部分主要是硬件层的初始化,在《LWIP初体验-修改ST官方demo》中,我们已经修改完代码,直接拷贝过来就行。
- T/ S1 q3 t4 h1 T0 v" G5 D 放入对应的位置* `6 k5 w6 Y" d. z9 i* R7 X
然后把BSP硬件驱动添加进入工程% z6 \; q( B9 t1 |. \; w
9 `5 T( Q- b+ M9 u0 C 添加lwip源代码,直接按照LWIP源码目录结构添加即可,不用全部添加,按下图所示接口( c) [3 R/ `4 _
$ d/ D2 o$ {% B 添加API相关文件1 N9 n$ P& B3 T: I2 K4 }
% R' o6 ?! R4 \. t, w2 s. t 添加Netif相关文件
+ h1 P+ p; l# W0 Z+ z6 J- q! d9 D 添加IPV4相关文件
5 l4 ]4 N. y, Q3 [. Q5 `: h% G 当然,还要添加头文件路径,这是必不可少的4 V$ ?$ X: i8 ^. s: j4 \- u+ @
添加中间文件 h: X9 u9 }3 _" H/ G% v
添加lwipopts.h/ ~$ k Q& J ^& F @
" I, d8 z% w1 X# H6 U! _ 编译出错2 u C7 N+ x. T& q1 a0 w \1 W
1 T2 v `) _9 G1 ^ 这些文件主要是官方开发板的lcd相关文件,把他们屏蔽掉7 y" J. f& e1 r/ t* Q( m1 I2 i/ D
* m l' J+ y) z' I 再编译,出新的错误,再次屏蔽这些现实部分的代码。. U" }* F1 m- m' \# M! s$ a4 r
2 ~/ g- w; {6 a, X8 G 修改之后,编译没有问题
复制驱动,直接使用官方demo的文件,
拷贝ethernetif.c文件
拷贝lwipopts.h文件。
把原来的文件删除掉/ O/ E% v" Z3 ^$ X2 Q9 N
重新添加我们新添加的文件(注意解除只读属性)' H1 k v. o: A W: E+ u 修改文件7 M- a1 G$ B/ l
新建lwip_app.c和lwip_app.h文件7 Y2 K7 ^. H4 z: `
5 |' R: j2 X4 R& a6 m& e" s3 } 添加LwIP_Init函数接口。
增加LwIP_Pkt_Handle函数。
定义一下宏8 e, b5 t! F( R, y# U4 u! B+ F
$ M+ R' [' l/ q b$ [ 包头文件包含一下( T% g2 t2 d( S
- u2 H' Q# z" K+ { A& k 修改函数
& u/ X- G% Z/ w2 {. I+ _ 修改主函数
9 m" @9 a% Q$ J( m6 v+ z 使用PC端ping一下开发板的IP
( j! ?2 k) w! O( ] 移植成功,可以正常响应ping。 这只是个简单的移植,就是个流水账,想看具体修改内容的,可以到文章开头下载工程代码,对比修改前和修改后的区别。网络部分有很多知识,想深入了解,还需要自己多看看代码。5 z+ E- s, U" P0 f |
微信公众号
手机版