STM32F103VET6基于ENC28J60移植LWIP1.4.1(标准库,FreeRTOS)

在进行移植之前,大家需要学会FreeRTOS的基本使用与无OS移植LWIP的经验,因为基于FreeRTOS移植LWIP需要准备一个FreeRTOS模板项目以及无OS移植LWIP成功的项目。

不知道什么是FreeRTOS的应该不会点开这篇博客。

没有无OS移植LWIP项目的一定要准备一个,LWIP相关文件就直接复制过来。可以点击查看我的上一篇博客来学习。

硬件与引脚连接也是看上一篇博客。

准备模板

准备一个FreeRTOS模板项目,启用计数量、消息队列
在这里插入图片描述

启动文件把堆栈都设置大点
在这里插入图片描述

LWIP文件夹

复制无OS移植LWIP项目中的LWIP文件夹,粘贴到本项目下
在这里插入图片描述

新建组

打开空STM32项目、新建组lwip-api、lwip-arch、lwip-netif、lwip-core、lwip-core-ipv4

lwip-arch添加cc.h、lwipopts.h、perf.h、网卡驱动文件,arch目录下新建两个文件sys_arch.h与sys_arch.c并加入分组
在这里插入图片描述

lwip-netif添加ethernetif.c、etharp.c、slipif.c
在这里插入图片描述

lwip-core添加core全部文件,lwip-core-ipv4添加core/ipv4全部文件
在这里插入图片描述在这里插入图片描述

lwip-api添加api下的全部文件
在这里插入图片描述

魔术棒

添加头文件路径
在这里插入图片描述

Misc Control里面输入–diag_suppress=1,1295,174,167,111,128,177,550
规避部分警报
在这里插入图片描述

修改lwipopts.h

NO SYS 设置为0
LWIP_SOCKET与LWIP_NETCONN设置为1

新添加以下宏:

//以太网首部填充:
#define ETH_PAD_SIZE	0
//TCPIP任务以及用到的队列大小定义,默认为0所以必须要改
#define TCPIP_THREAD_STACKSIZE          512
#define TCPIP_THREAD_PRIO               1
#define TCPIP_MBOX_SIZE                 1024
#define DEFAULT_RAW_RECVMBOX_SIZE       1024
#define DEFAULT_UDP_RECVMBOX_SIZE       1024
#define DEFAULT_TCP_RECVMBOX_SIZE       1024
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

#define NO_SYS                  0
#define LWIP_SOCKET             1
#define LWIP_NETCONN            1

#define MEM_ALIGNMENT           4  
#define MEM_SIZE                10*1024

#define TCP_SND_BUF             4000
#define TCP_MSS                 1000

#define ETHARP_DEBUG 	LWIP_DBG_ON
#define ICMP_DEBUG    LWIP_DBG_ON

//新加部分
#define ETH_PAD_SIZE						0

#define TCPIP_THREAD_STACKSIZE          512
#define TCPIP_THREAD_PRIO               1
#define TCPIP_MBOX_SIZE                 1024
#define DEFAULT_RAW_RECVMBOX_SIZE       1024
#define DEFAULT_UDP_RECVMBOX_SIZE       1024
#define DEFAULT_TCP_RECVMBOX_SIZE       1024
#endif /* __LWIPOPTS_H__ */

修改sys_arch.h

实现部分要求的类型以及函数定义(部分用宏定义代替)

LWIP要求实现的类型有三个:sys_sem_t(信号量)、sys_mbox_t(邮箱)、sys_thread_t(任务),其实还有一个互斥量也要实现,但是可以通过设置宏LWIP_COMPAT_MUTEX为1,使得互斥量等价于信号量

这里信号量、邮箱、任务分别用FreeRTOS的信号量、消息队列与任务来实现。

LWIP还要我们实现一些函数,部分过于简单的函数直接在这个头文件里面用宏定义代替。

#ifndef __SYS_ARCH_H__
#define __SYS_ARCH_H__

#define LWIP_COMPAT_MUTEX 					1

#include "FreeRTOS.h"
#include "queue.h"
#include "semphr.h"
#include "task.h"

typedef xSemaphoreHandle 						sys_sem_t;
#define SYS_SEM_NULL 								NULL
#define sys_sem_valid(sema) 				((*sema)!=NULL)
#define sys_sem_set_invalid(sema) 	((*sema)=NULL)

typedef xQueueHandle		 						sys_mbox_t;
#define SYS_MBOX_NULL 							NULL
#define sys_mbox_valid(mbox) 				((*mbox)!=NULL
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值