首先,为什么要做无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

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

2330

被折叠的 条评论
为什么被折叠?



