STM32F407-DP83848-Lwip移植方法

  前段时间做项目用到百兆网通信,用到了LWIP,一开始是参照原子的例程做移植,因为原子的例程中使用的是LAN8720,为了改成DP83848,改寄存器地址,改位定义,改速度计算公式,折腾了好多天也没成功,最后只好听从网友的建议,修改ST官方的一个例程,几天下来,竟然成功了,现在将步骤分享给大家,感觉实际工程中用DP83848的还是大多数。.其实本文并不是移植LWIP,只是将ST官方的例程改成我们项目所需要的,然后我们再在这个基础上完成自己的项目即可,这对新接触LWIP又急着做项目的人比较适合,没必要去了解LWIP的具体实现,会用就行了。.

  本人的项目配置:STM32F407VET6 + DP83848C

  1、从官方网站http://www.stmcu.org/document/list/index/category-523下载STSW-STM32070 面向STM32F4x7微控制器的LwIP TCP/IP协议栈的演示代码 的英文文档DM00036052.pdf和软件包stsw-stm32070.zip。stsw-stm32070.zip是面向STM32F4x7微控制器的LwIP TCP/IP协议栈的基于官方EVAL开发板的演示代码,显然,我们直接修改这个演示代码要比我们去移植LWIP简单得多。DM00036052.pdf是演示代码的说明文档。

  2、将stsw-stm32070.zip解压得到STM32F4x7_ETH_LwIP_V1.1.0文件夹,下面是STM32F4x7_ETH_LwIP_V1.1.0文件夹架构

STM32F407-DP83848-Lwip移植方法

  3、删除_htmresc文件夹,这个文件夹是ST及CMSIS公司logo,没什么用。

  4、打开project文件夹,这个文件夹包括两个文件夹:FreeRTOS和Standalone。

  FreeRTOS文件夹里的程序示例是基于FreeRTOS系统的LWIP移植示例,这里我们不需要,直接删除。

  Standalone文件夹里是一些无操作系统LWIP移植示例程序,在这里我们工程需要的是普通的数据传输,所以只使用到UDP,所以我们只保留udp_echo_client文件夹,其他的都删除掉。在udp_echo_client文件夹中EWARM文件夹是IAR EWARM建立的工程,MDK-ARM是keil MDK建立的工程。在这里我们选择MDK工程,IAR建立的工程可以保留也可以删除。还有一个文件夹RIDE,打开看了看,应该是用另一款编译软件建立的工程空间,这里我们不需要,直接删除。

  5、UTIliTIes-》Third_Party文件夹下面有三个文件夹FatFs_vR0、FreeRTOSV7.3 、lwip-1.4.1。FatFs_vR0一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统,FreeRTOSV7.3一个迷你操作系统内核的小型嵌入式系统,在这里我们都用不上,直接删除。lwip-1.4.1文件夹是LWIP源码,是我们所需要的。

  6、打开MDK-ARM文件夹里面的MDK工程,我们先编译一下,可以看到有0个错误,三个警告,其中两个警告是定义了变量但是没有使用,我们不去管它,另一个警告是。.\。.\。.\。.\UTIliTIes\Third_Party\lwip-1.4.1\port\STM32F4x7\Standalone

  \ethernetif.c(366): warning: #1-D: last line of file ends without a newline 提示ethernetif.c文件的最后一行(也就是366行)没有换行,MDK里面每个文件的最后一行必须换行,不然会提示一个警告,这里把366行后面换行再编译,这个警告就消失了。

  7、打开 main.h 文件,因为我们电路板上使用的是RMII接口,所以将#define MII_MOD注释掉,将//#define RMII_MODE取消注释,如下图所示:

STM32F407-DP83848-Lwip移植方法

  在这里要注意RMII的时钟为50MHz,在电路板上直接焊接一个50MHz的有源晶振就可以了。

  取消//#define USE_DHCP的注释,启用动态地址分配,当地址分配不成功则使用静态IP地址。如图:STM32F407-DP83848-Lwip移植方法

  本项目中直接删除掉,因为删除掉了SERIAL_DEBUG,所以我们可以将serial_debug.c文件从项目中移除。

 

  STM32F407-DP83848-Lwip移植方法

  点击红色的叉号删除serial_debug.c,然后点击OK就可以了。

  将Groups栏STM324xG_EVAL中的stm324x7i_eval.c和stm324x7i_eval_lcd.c删除,将MDK_ARM中的启动文件startup_stm32f427x.s删除,将Project Targets分栏中的项目名STM324x7I_EVAL删除,将STM324xG_EVAL中的stm324xg_eval_lcd.c删除,这都是和本项目无关的东西。这时候编译会提示错误,我们将stm32f4x7_eth_bsp.h文件里关于包含LCD函数的头文件删除,如下图。

技术专区

  • 低成本开发系统现在正处于物联网期望膨胀峰值期
  • 因特尔Cyclone 10 LP FPGA评估板电路图集及PCB装配图
  • 采用32位MCU系列对新型无磁水表设计
  • 一个嵌入式或者X86的工业控制板上,少不了CAN口!
  • 以MSP432主机微控制器的软件与硬件集成解决方案
  • STM32F407-DP83848-Lwip移植方法已关闭评论
    A+
发布日期:2019年07月14日  所属分类:物联网