STM32F407 - DP83848 - Lwip移植方法

更新时间:2023-11-25 00:08:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

前段时间做项目用到百兆网通信,用到了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文件夹架构

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取消注释,如下图所示:

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

取消//#define USE_DHCP的注释,启用动态地址分配,当地址分配不成功则使用静态IP地址。如图:

注释掉或删除 USE_LCD和serial_debug,本项目没有用到这两项,如下图:

本项目中直接删除掉,因为删除掉了SERIAL_DEBUG,所以我们可以将

serial_debug.c文件从项目中移除。

点击红色的叉号删除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函数的头文件删除,如下图。

将stm32f4x7_eth_bsp.c文件里面关于LCD的部分删除掉,如下图,将这些行删除。

将netconf.c中141-148行关于LCD的函数删掉

/* Set the LCD Text Color */ LCD_SetTextColor(Red);

/* Display message on the LCD */

LCD_DisplayStringLine(Line5, (uint8_t*)\ Network Cable is \ LCD_DisplayStringLine(Line6, (uint8_t*)\ not connected \

/* Set the LCD Text Color */ LCD_SetTextColor(White); 再编译就没有问题了。

8、按电路图修改时钟,修改 stm32f4xx.h中宏定义标识符HSE_VALUE 的值为我们的外部时钟20MHz

设置主 PLL 时钟, 在 System_stm32f4xx.c 文件开头的地方配置

所以我们的主 PLL 时钟为:

PLL = 20MHz * N/ (M*P) = 20MHz* 336 /(20*2) = 168MHz SystemInit()函数中设置的系统时钟大小:

SYSCLK(系统时钟) = 168MHz AHB 总线时钟 (HCLK=SYSCLK) = 168MHz APB1 总线时钟 (PCLK1=SYSCLK/4) = 42MHz APB2 总线时钟 (PCLK2=SYSCLK/2) = 84MHz PLL 主时钟 = 168MHz

9、这个例程默认的是STM324xG_EVAL开发板,它使用的主芯片是STM32F407IG,而我们项目所使用的主芯片是STM32F407VE,要更改芯片配置。

点击弹出如下窗口

选择 Device 将下面的主芯片改为

10、下面我们进入main.c函数看一下程序:

首先的注释是说明系统时钟已经配置完成,如果修改的话可以参考第8条。接下来就是配置中断优先级分组NVIC_PriorityGroupConfig,这个很重要,只要定义了中断,就必须配置中断优先级分组,这个函数在系统中只能被调用一次,一旦分组确定就最好不要更改。这里分配的是组4,4位抢占优先级, 0位响应优先级。

接下来的是条件编译和LCD初始化,在前面我们已经删除SERIAL_DEBUG 串口调试和LCD头文件,这里我们直接将这段程序删除。如下图,将这几行代码删除掉。

删除mian.c下面关于LCD的信息:

删除128行以后的所有数据。

打开stm324xg_eval.h,注释掉第39行#include \,这个头文件是关于开发板上LCD及按键的声明,本项目中没有用到LCD和按键。

打开stm32f4x7_eth_bsp.c文件,删除关于LCD的一些程序,删除447行至472行的程序和485行到495行的程序,这里的程序是在LCD屏上显示一些语句及本机的IP。删除如下图所示程序。

打开netconf.c文件,删除关于LCD的程序,删除第219至223行程序,删除239至255行程序,删除274至290行程序。这是关于LCD显示分配动态IP的信息的程序。

11、下面是stm32f4x7_eth_bsp.c ; 配置以太网 (GPIOs, clocks, MAC, DMA),对于GPIO的配置,我们选用的是RMII接口,而且芯片是STM32F407VE,和STM324xG_EVAL开发板上有些引脚定义有些差别,所以我们要对网口的GPIO接口修改:

修改结果如上图所示 , 注意以太网配置那段注释里面,双斜线的是我们RMII没有用到的引脚,还有就是要将PG11/PG13/PG14修改为PB11/PB12/PB13。

12、接下来就是修改关于LED和按键的程序了,删除netconf.c里面第179行、第234行和252行,有些行数可能不对,但代码不会变,找到相应代码并修改

将stm324xg_eval.c文件除了#include \其他全部删除,如图所示

将stm324xg_eval.h文件除了下图所示程序其他全部删除:

本文来源:https://www.bwwdw.com/article/l20t.html

Top