在上篇文章《LWIP初体验-修改ST官方demo》中我们已经在自己的开发板上实现了简单的TCPsever和TCPclient功能。验证完了硬件,接下来的工作就是优化代码,添加应用程序。; g) d6 p& @9 l( h9 x 有些同学想学习一下,如果下载LWIP的代码,然后移植到自己的代码中,下面我们聊聊移植问题。 我们需要的基础工程是已经实现了10ms定时,led灯1s闪烁,实现了串口打印工程。还需要一份LWIP1.4.1的源码,需要STM32F2系列的以太网驱动。5 K0 I R) w# w" o ) l! U+ b2 I/ c! G IAR工程移植2 a( a/ ?6 D9 L/ n, @& K9 n 首先是IAR工程的移植操作。 添加以太网驱动库,注意,以太网驱动库并不在标准外设库中,需要大家自行到网上或ST官网下载。 把以太网驱动库添加进工程0 p% q7 }9 h+ ^5 {3 \ - _6 |0 R# o7 ^: w; R2 {2 a) ~ 增加新库的头文件路径! O$ I( l/ b2 p6 [0 N" H# w - G, ?2 ^+ k) e( m7 J7 ~ 将LWIP源码放入目录中,我的个人习惯放到了Third_Party文件夹中,属于第三方库,以后用到其他类似FATFS这样的第三方库,都会放入次文件夹内。) p1 S. W) u( J( u2 z( Y3 Y# n 我们把stm32f2x7_eth_conf_template.h文件剪切到文件夹中,并重命名为stm32f2x7_eth_conf.h / n6 m! u4 G2 d$ s 修改文件名称# D* d! ^$ q3 `' u: Y+ [ 当然新加的头文件,要添加新的头文件路径。 注意:这个文件是只读文件,要把对勾去掉,不然的话在IDE中无法修改代码。 W1 ]3 q/ p4 n# ?) K 添加以太网RTL8201EL的驱动程序 我们首先拷贝官方历程驱动,这部分主要是硬件层的初始化,在《LWIP初体验-修改ST官方demo》中,我们已经修改完代码,直接拷贝过来就行。 放入对应的位置, [* j( N- C7 }/ j ; K% x, Z+ _/ h A$ U 然后把BSP硬件驱动添加进入工程# m6 A3 p0 C" [& L+ P2 F 添加lwip源代码,直接按照LWIP源码目录结构添加即可,不用全部添加,按下图所示接口 添加API相关文件5 }& _' K7 `' o0 { & k" Z% c: v9 c5 C$ O# U 添加Netif相关文件 添加IPV4相关文件 6 S8 I1 K: L( \% h4 Y& @# ], H9 _ 当然,还要添加头文件路径,这是必不可少的 添加中间文件 添加lwipopts.h& h) T9 F' \3 D0 S( u* F6 | 1 q* g; s' R' H1 ]' A, t. f& Q 编译出错: ~; b. f$ a" m/ Z% W. T 这些文件主要是官方开发板的lcd相关文件,把他们屏蔽掉 4 f" l) ~7 |5 b* B5 I4 C% `. l9 [ 再编译,出新的错误,再次屏蔽这些现实部分的代码。 1 ]! x) _4 Q, M3 m 修改之后,编译没有问题: A; `3 x8 v' r$ E( D. D) O& _ M 复制驱动,直接使用官方demo的文件,/ `2 d( X' \, r' K / ]& x2 P6 G0 a$ {3 i/ u, s( E 拷贝ethernetif.c文件' [: m6 j$ J# V+ x( e( { $ I& \& r) t* G5 j6 A 拷贝lwipopts.h文件。( A+ s( f3 z: {# V0 j- x' ]4 O9 F 2 y! t' n1 D2 B& c/ F 把原来的文件删除掉/ U, b- C! x4 d8 e 重新添加我们新添加的文件(注意解除只读属性)1 r7 k$ N% P) V% M9 \2 h5 N 修改文件1 ?* B1 M; C9 V& t. k 1 f. R7 O) ^# Y$ A! d 新建lwip_app.c和lwip_app.h文件 添加LwIP_Init函数接口。 增加LwIP_Pkt_Handle函数。 0 [* L+ ]6 w' [; r, }8 q 定义一下宏 包头文件包含一下, |" c* e u/ B& f H ; w$ w( Z8 R. z+ m2 E5 Z5 L' y 修改函数 修改主函数1 U6 ^( w0 G, D/ y5 x( D* a2 n # y( ], U2 g9 W+ t 使用PC端ping一下开发板的IP 移植成功,可以正常响应ping。 这只是个简单的移植,就是个流水账,想看具体修改内容的,可以到文章开头下载工程代码,对比修改前和修改后的区别。网络部分有很多知识,想深入了解,还需要自己多看看代码。6 m6 Z' i5 U/ A5 A2 J6 E U 3 K4 }+ v) `& c; l2 \7 V, X! E+ R6 t |
stm32f207/stm32f407擦除内部flash讲解
【经验分享】STM32F2 中 DMA 的 FIFO 模式
STM32F2x7 通过以太网实现在应用中编程 (IAP)
STM32F2xx 微控制器中的 EEPROM 模拟
在 STM32 F0、 F2、 F3、 F4 和 L1 系列MCU 中使用硬件实时时钟 (RTC)
STM32F1xx、STM32F2xx、STM32F4xx、STM32L1xx、STM32F30/31/37/38x 定时器概览
使用 STM32F2xx 和 STM32F4xx 微控制器时如何提高 ADC 测量精度
使用 STM32F2 和 STM32F4 DMA 控制器
STM32F2x7 通过以太网实现在应用中编程 (IAP)
STM32F2xx 微控制器中的 EEPROM 模拟