硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7289|回复: 11
收起左侧

[以太网] 分享一下V7板子移植LWIP

  [复制链接]

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2019-5-12 12:55:49 | 显示全部楼层 |阅读模式
本帖最后由 在水一方 于 2019-5-12 13:36 编辑

1.先移植一个FreeRTOS操作系统这里就不多废话
2.将LWIP源码考入工程内
1.png
3.在工程添加源码
3.1添加API文件
2.png
3.2添加Core文件
3.png
3.3添加Core/IPv4文件
4.png
3.4添加Netif文件
5.png
3.5添加文件路径
6.png
3.6编译工程
7.png
缺少配置文件,这里ST给提供了一个
8.png
3.7在User创建一个Lwip文件夹用于存放文件(把 lwipopts.h 拷贝进去,添加路径)
9.png
3.8再次编译,发现缺少cc.h文
10.png
这里ST也为我们提供了一个
11.png
我们需要的FreeRTOS支持文件也在这里
12.png
3.9把system文件夹拷贝进我们的工程内
13.png
如下
14.png
再次添加文件和路径
15.png
3.10第三次编译,这次只剩两个错误了
16.png
一个一个解决,缺少 sys_mbox_trypost_fromisr  (referred from tcpip.o). 在tcpip.c文件里未定义。全局搜索一下
17.png
18.png
sys_mbox_trypost_fromisr 和 sys_mbox_trypost 名字几乎一样,根据名字可以判断sys_mbox_trypost_fromisr是用于中断内使用的,我们搜索 sys_mbox_trypost
19.png
这里我是用的cmsis_os.c封装的FreeRTOS sys_mbox_trypost调用的osMessagePut是支持中断调用的。这里有两个解决办法:
1.sys_mbox_trypost_fromisr 替换成 sys_mbox_trypost 使用
2.创建一个sys_mbox_trypost_fromisr 把 sys_mbox_trypost复制粘贴改个名的事
20.png
3.11再次编译(第四次)
21.png
缺少sys_now函数,我们打开官方的例程搜索一下这个函数 发现在ethernetif.c实现。
22.png
我们把.c和.h拷贝到我们的工程,添加文件
23.png
3.12再次编译(第五次)
24.png
我们打开安富莱的出场测试历程,将下面连个文件拷贝过来
25.png
再次添加进工程
26.png
3.13再次编译(第6次)
发现文件很多宏定义对不上,自己修改吧,这里不多说基本功了。
27.png
3.14再次编译(第7次),这次没有问题了
28.png
4.修改LWIP驱动
4.1配置MUP
4.1.1描述符以及接受数组的定义,我使用了指针的方式所以不用修改Link文件(各有个好)
29.png
4.1.2 发送缓存Lwip堆栈配置
30.png
4.1.3 MPU的配置(这个很重要,配置不好就会有各种问题)
31.png
4.2 修改ethernetif.c文件
4.2.1修改Rx_Buff (因为我是用的是指针方式)
32.png
4.2.2 封装 ethernet_link_check_state ( struct netif *netif ) 函数,如下图
33.png
4.2.3 替换 ethernet_link_check_state
34.png
4.2.4 low_level_output 函数值 Cache处理,如下图,添加 SCB_CleanInvalidateDCache 函数
35.png
4.2.5 初始化配置 HAL_ETH_MspInit
之前的配置
36.png
使用安富莱的替换,如下
37.png
4.2.6 添加中断函数
38.png
这里就修改完成,大家编译一下看看有没有错误

5.运行LWIP (这里先使用固定IP的方式)
5.1.1创建Lwip_init.c以及lwip_dm9162.c等文件
39.png
5.1.2 Lwip_init.c 内容
40.png
5.1.3 Lwip_init.h 内容
41.png
5.1.4 lwip_dm9162.c内容
5.1.4.1 lwip_dm9162_default_ip_set 是设置默认的初始化IP 我的网段是51.1
42.png
5.1.4.2  lwip_dm9162_init(void) 初始化DM9162的Lwip网卡
43.png
5.1.4.3  ethernet_link_status_updated(struct netif *netif) 这里是连接状态改变回调函数
44.png
5.1.4.4  ethernet_link_thread  这里是检测连接状态任务
46.png
5.1.4.5  MAC地址修改,添加.h

添加完任务后在main.c调用
47.png
编译下载

打开Hyper Terminal,之后复位开发板
48.png
开发板已经运行
49.png
测试ping,已经通了


一步一步来就可以ping通,后面再弄些应用例子

50.png
43.png

lwip-2.1.2.zip

4.1 MB, 下载次数: 3383

LWIP源码

contrib-2.1.0.zip

613.85 KB, 下载次数: 1203

LWIP

Lwip.rar

16.49 KB, 下载次数: 357

2.LWIP 安富莱V7移植.pdf

9.3 MB, 下载次数: 3546

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 非常感谢分享

查看全部评分

回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2019-5-12 13:05:24 | 显示全部楼层
厉害了,点个赞。
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
 楼主| 发表于 2019-5-12 13:19:02 | 显示全部楼层
本帖最后由 在水一方 于 2019-5-12 13:37 编辑

为啥我编辑的字都没了,还倒叙了......



弄好了,上传问题,恢复一下就好了
回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
发表于 2019-5-12 16:29:51 | 显示全部楼层
厉害了,点个赞。
回复

使用道具 举报

6

主题

390

回帖

408

积分

高级会员

积分
408
发表于 2019-5-12 21:59:26 | 显示全部楼层
大妞,腻害啊
回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
发表于 2019-5-12 23:24:17 | 显示全部楼层
厉害 点赞
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106828
QQ
发表于 2019-5-13 02:08:42 | 显示全部楼层
非常感谢楼主分享

后面使用MDK5的RTE环境直接添加FreeRTOS和LwIP就方便了,比较省事,直接添加,并对底层驱动做个微小修改即可。
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2019-5-13 12:13:52 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2019-6-30 18:24:02 | 显示全部楼层
楼主有没有带freeos的,这个有适用价值。
回复

使用道具 举报

0

主题

59

回帖

59

积分

初级会员

积分
59
发表于 2019-8-14 10:00:43 | 显示全部楼层
楼主说明详细,调试思路清晰,学习了
回复

使用道具 举报

3

主题

45

回帖

54

积分

初级会员

积分
54
发表于 2019-8-15 08:03:33 | 显示全部楼层
感谢分享,赞一个
回复

使用道具 举报

10

主题

247

回帖

282

积分

高级会员

积分
282
发表于 2019-8-15 19:02:20 | 显示全部楼层
我觉得楼主的Hyper Terminal很好用的样子啊,楼主方便共享一个么?外面的不大敢下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 12:43 , Processed in 0.267770 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表