简要
LwIP 不仅能在裸机上开发,也能在操作系统环境下运行,而且在操作系统环境下,用户能使用 NETCONN API 与 Socket API 编程。相比于 RAW API 编程会更加简便。使用操作系统环境下,这意味着 多线程的环境,一般来说,LwIP作为一个独立的处理线程运行,用户也独立一个或者多个线程,这样就在操作系统中相互独立开了,并且借助操作系统的 IPC 通信机制,更好的实现功能的需求。
LwIP 需要使用操作系统,那么就需要依赖操作系统自身的通信机制,如信号量、互斥量、消息队列(邮箱)等。所以LwIP设计者在设计的时候就提供了一套与操作系统相关的接口,由用户依据操作系统的不同进行移植。这样子就能降低耦合度,让LwIP内核不受其运行环境的影响,因为往往用户并不能完全了解内核的运作,所以只需要用户在移植的时候对LwIP提供的接口,根据不同的操作系统进行完善就可以。
移植参考:
ST官方提供了一个以太网通信的Demo:STSW-STM32070,适配与STM32F4系列,使用LwIP协议栈,适配PHY为DP83848,移植时,主要参考该demo。
STSW-STM32070介绍
移植工作
- 准备好一个带FreeRTOS的项目工程文件,将刚才下载的 stsw-stm32070.zip 解压后的 lwip-1.4.1拷贝到工程目录下,如图所示:
- ThirdParth目录下:
- lwip-1.4.1 目录下:
- 其中 prot 文件就是 LwIP与STM32F4x7移植的接口文件,
- 其中分为带FreeRTOS操作系统和不带操作系统(Standalone)的接口。
- 添加文件到项目组文件夹,如图所示:
- 展开为:
- 该文件位于 /STM32F4x7_ETH_LwIP_V1.1.1/Libraries/STM32F4x7_ETH_Driver下面的 stm32f4x7_eth.c 以及配套的.h文件 。该文件是官方提供类似于标准库提供的那些I2C,UART,SPI等库函数文件。
- 这些文件是 LwIP-1.4.1 的源码文件和适配FreeRTOS的接口文件。
- 添加相应源文件的头文件路径
- 添加 stm32f4x7_eth_bsp.c 文件并修改
该文件位于如下所示文件下面:
由于demo中采用的是 MII模式,而我们硬件采用的是RMII模式,所以需要修改部分定义:
在main.h文件中修改宏:
stm32f4x7_eth_bsp.c中修改:
由于我们没有使用以太网链接中断(DP83848 第7脚:PWR_DOWN/INT ),因此注释掉关于以太网链接中断配置。
GPIO部分配置也保留RMII的配置:
- 添加 netconf.c文件:
该文件位于如下路径:
该文件主要是网络连接配置文件,主要与LwIP初始化,DHCP任务初始化,直接移植过来,删除不必要的LCD显示即可:
- 添加 lwippopts.h 文件。
该文件位于如下所示路径中
将其添加到项目文件中。
lwipopts.h 就是用于配置 LwIP 的相关参数的,一般来说LwIP默认会有参数的配置,存放在opt.h文件中,如果用户没有在lwipopts.h文件进行配置,那么LwIP就会使用opt.h默认的参数,注意,在移植的时候出现定义某些参数是非常重要的,这对我们LwIP的性能至关重要,甚至在配置错误的时候能直接导致LwIP的运行崩溃。具体的作用可参考注释:
- 修改 stm32f4xx_it.c 文件。
因为我们这里使用了以太网中断,所以需要添加以太网中断服务函数,否则就会跳转失败。
- main.c中,,添加以太网底层bsp驱动和LwIP驱动。
以上即完成了 LwIP 与 FreeRTOS的移植。
ping测试
底层网络配置在main.h文件中,
移植注意事项
- 第一次在移植的过程中,可能是DP83848芯片有问题。通过电脑连接网线至底层板卡后2个指示灯一直亮,也没有闪烁。(PS: 刚开始还不清楚是芯片有问题,结果一直在找软件的问题,卡了3-4天)后来换了一块板卡后,发现不关有没有配置 dp83849 和 lwip 刚插上网线后,有一个灯是会闪烁的。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/16865.html