文章索引
信息源
- Github-“stm32-hotspot/STM32H7-LwIP-Examples/”
- ST社区-”Problem with LWIP generated with Cube_H7_V1.9.1“
- CSDN-”NUCLEO-H743ZI2开发板在STM32CubeIDE 1.6.1环境下使用FreeRTOS和LWIP实现网络通信”
- 野火-“LwIP应用开发实战指南“
文件结构
- ethernetif.c
- 管理ETH外设内存数据结构,如Tx/Rx DMA Descriptor、RxPool(接收缓冲)等
- 管理ETH的MAC层信息,如MAC地址、MTU、PHY接口协议、链路信息等MAC层的配置
- 管理ETH接口来的数据,当ETH中断发生时传递Semaphore、Mutex等
- 注意:
- 库版本1.10.0中对RxPool的声明不完整需要手动补充
- 使用STM32CubeIDE时,Tx/Rx DMA Descriptor、RxPool需要在链接器ld文件中配置内存地址
- “INTERFACE_THREAD_STACK_SIZE”宏定义即”EthIf”任务的栈大小,改到500可以满足TCP和UDP,默认值350会造成溢出
- “ethernet_link_thread”函数即”EthLink”任务的函数,生成的代码中链路状态改变时没有使能ETH中断,需要手动修改
- lwip.c
- 初始化所有以太网内容,包括lwip层(包括dns、arp、tcp、udp等)、tcpip任务、链路层等
- 注意:
- 使用”netif_set_status_callback()”连接到协议栈状态改变回调函数,可以在网络接口Up/Down/IP获取时等变化时被调用以获取信息
- 使用”netif_set_link_callback()”连接到链路状态改变回调函数,可以在链路Down时清除IP信息,在链路Up时调用”dhcp_start()”获取IP
- lwipopts.h
- 配置lwip选项、参数等,该文件有更高的优先级
- 注意:
- 使用”LWIP_TCP_KEEPALIVE”等宏定义配置TCP的KeepAlive机制,在TCP客户端离线时能够主动切断连接释放资源