版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、前段时间做项目用到百兆网通信 , 用到了 LWIP,一开始是参照原子的例程做移植 , 因为原子的例程中使用的是 LAN8720,为了改成 DP83848,改寄存器地址 , 改位定义 , 改速度计算公式 , 折腾了好多天也没成功 , 最后只好听从网友的建议 , 修改 ST 官方的一个例程 , 几天下来 , 竟然成功了 , 现在将步骤分享给大家 , 感觉实际工程中用 DP83848的还是大多数 . 其实本文并不是移植 LWIP,只是将 ST 官方的例程改成我们项目所需要的 , 然后我们再在这个基础上完成自己的项目即可 , 这对新接触 LWIP又急着做项目的人比较适合 , 没必要去了解 LWIP的具
2、体实现 , 会用就行了 .本文作者:武汉普创科技易宇转载请注明出处本人的项目配置:STM32F407VET6 + DP83848C1、从官方网站/document/list/index/category-523下载 STSW-STM32070面向STM32F4x7微控制器的LwIP TCP/IP协议栈的演示代码的英文文档DM00036052.pdf和软件包stsw-stm32070.zip。 stsw-stm32070.zip是面向STM32F4x7微控制器的LwIP TCP/IP协议栈的基于官方EVAL开发板的演示代码,显然,我们直接修改这个演示代码要比
3、我们去移植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 移
4、植示例程序,在这里我们工程需要的是普通的数据传输,所以只使用到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
5、.1 。FatFs_vR0一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT 文件系统, FreeRTOSV7.3一个迷你操作系统内核的小型嵌入式系统,在这里我们都用不上,直接 删除 。 lwip-1.4.1文件夹是LWIP 源码,是我们所需要的。6、打开 MDK-ARM文件夹里面的MDK 工程,我们先 编译 一下,可以看到有 0 个错误,三个警告,其中两个警告是定义了变量但是没有使用,我们不去管它,另一个 警告是 .UtilitiesThird_Partylwip-1.4.1portSTM32F4x7Standaloneethernetif.c(366): warning:#1-D:
6、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的注释
7、,启用动态地址分配,当地址分配不成功则使用静态 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分
8、栏中的项目名 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 th
9、e LCD */LCD_DisplayStringLine(Line5, (uint8_t*)LCD_DisplayStringLine(Line6, (uint8_t*)Network Cable is not connected););/* Set the LCD Text Color */LCD_SetTextColor(White);再编译就没有问题了。8、按电路图修改时钟,修改stm32f4xx.h 中宏定义标识符HSE_VALUE的值为我们的外部时钟 20MHz设置主PLL 时钟 , 在 System_stm32f4xx.c 文件开头的地方配置所以我们的主PLL 时钟为:PLL =
10、 20MHz * N/ (M*P) = 20MHz* 336 /(20*2) = 168MHzSystemInit()函数中设置的系统时钟大小:SYSCLK(系统时钟)=168MHzAHB总线时钟 (HCLK=SYSCLK)=168MHzAPB1总线时钟 (PCLK1=SYSCLK/4)=42MHzAPB2总线时钟 (PCLK2=SYSCLK/2)=84MHzPLL主时钟=168MHz9、这个例程默认的是 STM324xG_EVAL开发板,它使用的主芯片是STM32F407IG ,而我们项目所使用的主芯片是STM32F407VE,要更改芯片配置。点击弹出如下窗口选择Device将下面的主芯片改
11、为10 、下面我们进入main.c函数看一下程序:首先的注释是说明系统时钟已经配置完成,如果修改的话可以参考第8 条。接下来就是配置中断优先级分组NVIC_PriorityGroupConfig,这个很重要,只要定义了中断,就必须配置中断优先级分组,这个函数在系统中只能被调用一次,一旦分组确定就最好不要更改。这里分配的是组4, 4 位抢占优先级,0 位响应优先级。试和接下来的是 条件编译和LCD 初始化 ,在前面我们已经删除SERIAL_DEBUGLCD 头文件,这里我们直接将这段程序删除。如下图,将这几行代码删除掉。串口调删除 mian.c下面关于LCD 的信息:删除128 行以后的所有数据
12、。打开 stm324xg_eval.h, 注释掉第 39 行 #include stm32_eval_legacy.h 件是关于开发板上 LCD 及按键的声明,本项目中没有用到 LCD 和按键。,这个头文打开 stm32f4x7_eth_bsp.c 文件 ,删除关于的程序和 485 行到 495 行的程序 ,这里的程序是在LCD 的一些程序,删除 447 行至LCD 屏上显示一些语句及本机的472 行IP。删除如下图所示程序。打开netconf.c文件 ,删除关于LCD的程序, 删除第219 至223 行程序,删除239至255行程序,删除274 至290行程序 。这是关于LCD显示分配动态I
13、P的信息的程序。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 行
14、 , 有些行数可能不对,但代码不会变,找到相应代码并修改将 stm324xg_eval.c文件除了 #include stm324xg_eval.h其他全部删除, 如图所示将 stm324xg_eval.h文件除了下图所示程序其他全部删除:我们项目电路板上所用到的功能就可以在这两个文件夹定义和声明了。13 、在官方 UDP 客户端这个例程中是利用按键中断来发送数据包的,本人开发的项目是当收到下位机的数据后就将数据转发给PC ,所以在这里用不到按键中断。之前我们删除了LCD_LED_BUTTON_Init();这个函数, 这个函数就是配置LED 、LCD 以及按键初始化及按键中断的函数。所以在这里这个按键中断已经没有作用了,我们可以将UDP 客户端发送数据包的函数直接复制到主函数中,然后将按键中断函数清空。按键中断函数在stm32f4xx_it.c函数中,如下图,将udp_echoclient_connect();复制到主函数中以便使用,等我们改写主函数时会用到这个函数。这个函数是基于EVAL开发板写的一个数据收发函数,我们自己实现收发功能都可以参照这个函数来写, 复制完之后直接将这个中断函数内容清空就可以了。在main.c中还要添加udp_echoclient_connect()函数所在文件对应的头文件 #incl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河北承德县中医院招聘20人备考题库及答案详解(全优)
- 2026广东广州番禺区第二人民医院高层次人才招聘6人备考题库带答案详解(新)
- 2026岚图区域市场岗位社会招聘备考题库及答案详解一套
- 2026重庆市南岸区海棠溪街道办事处公益性岗位招聘14人备考题库及答案详解(有一套)
- 2026广东广州市黄埔区新龙镇面向社会招聘政府聘员5人备考题库带答案详解(突破训练)
- 2026广东汕头大学医学院第一批招聘6人备考题库及完整答案详解1套
- 2026黑龙江黑河市第一人民医院上半年招聘劳动合同制工作人员6人备考题库附参考答案详解(轻巧夺冠)
- 2026江苏徐州市国盛控股集团有限公司招聘18人备考题库附答案详解(b卷)
- 2026黑龙江五大连池市乡镇卫生院招聘医学相关专业毕业生1人备考题库含答案详解(能力提升)
- 2026内蒙古通辽市科尔沁左翼后旗招聘政府专职消防员29人备考题库及答案详解【有一套】
- 非遗泥塑传承与创新:传统色彩·现代技艺·实践探索【课件文档】
- 汽车行业无人配送专题报告:无人配送应用前景广阔国内迎来加速期-
- 城管队伍建设考核制度
- 卫生院中层干部任用制度
- 2026年高级经济师宏观经济学实务操作题集
- 前程无忧在线测试题库及答案行测
- HG-T 2521-2022 工业硅溶胶介绍
- 小学“英语单词达人”比赛活动方案
- 月施工现场安全检查记录表
- GA/T 1971-2021法医精神病学精神检查指南
- 《健康教育学》第五章-健康心理课件
评论
0/150
提交评论