在stm32f103c8t6 上进行无OS移植LWIP

本文详细介绍了如何在资源受限的STM32F103C8T6单片机上,不使用操作系统的情况下移植LWIP协议栈,包括内存配置调整、网络接口初始化、定时器处理等关键步骤。

首先,为什么要做无OS的LWIP呢?原因很简单,因为stm32f103c8t6只有20K的RAM,很难支持OS+LWIP。

无OS的LWIP的一个优点是,可以提高单片机的以太网的响应速度。

LWIP的介绍就不说了,网上查一大把。

我的无OS移植LWIP基于ST官网的一个示例:

STSW-STM32026 LwIP TCP/IP stack demonstration for STM32F107xx (AN3102)

大家可以到官网下载。

这个示例是运行在stm32f107上面的,如果要运行到stm32f103上,还需要进行一些修改。下面是移植的主要步骤。

1. 从ST官网项目中的lwip-1.3.1目录整个复制到你的项目中

2. 修改文件lwip-1.3.1\port\ethernetif.c,我的网卡是enc28j60,主要修改如下

2.1 添加

uint8_t mac[6] = {0x00, 0xe0, 0x3d, 0xf4, 0xdd, 0xf7};  //网卡的mac地址
uint8_t Tx_Data_Buf[512];  //网卡发送缓冲区
uint8_t Rx_Data_Buf[512];  //网卡接收缓冲区

2.2 修改low_level_init

static void
low_level_init(struct netif *netif)
{
  /* set MAC hardware address length */
  netif->hwaddr_len = ETHARP_HWADDR_LEN;

  /* set MAC hardware address */
  netif->hwaddr[0] =  mac[0];
  netif->hwaddr[1] = mac[1];
  netif->hwaddr[2] =  mac[2];
  netif->hwaddr[3] =  mac[3];
  netif->hwaddr[4] = mac[4];
  netif->hwaddr[5] =  mac[5];

  /* maximum transfer unit */
  netif->mtu = 1500;

  /* device capabilities */
  /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */
  netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;

    enc28j60_init(netif->hwaddr);
}

2.3 修改low_level_output

static err_t
low_level_output(struct netif *netif, struct pbuf *p

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值