文章目录

  • 环境
  • 一、lwip介绍
  • 二、stm32 ETH介绍
    • 2.1 MAC特征
    • 2.2 DMA特征
    • 2.3 PTP特征
  • 三、原理图
  • 四、cubemx配置
    • 4.1 ETH配置
      • 4.1.1 以太网phy标准寄存器
      • 4.1.2 cubemx的配置
    • 4.2 FreeRTOS配置
      • 4.2.1 CMSIS-RTOS
      • 4.2.2 cubemx配置
    • 4.3 其他配置
      • 4.3.1 时基配置
      • 4.3.2 时钟配置
      • 4.3.3 配置调试串口
  • 五、添加TCP回显代码
  • 六、添加debug支持
  • 七、TCP测试和ping测试

环境

cubemx版本:6.1.2
stm32型号:stm32f429zit6
phy芯片:lan8720a

一、lwip介绍

  LwIP是Light Weight (轻型)IP协议,有无操作系统的支持都可以运行。LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用,它只需十几KB的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。
  lwIP协议栈主要关注的是怎么样减少内存的使用和代码的大小,这样就可以让lwIP适用于资源有限的小型平台例如嵌入式系统。为了简化处理过程和内存要求,lwIP对API进行了裁减,可以不需要复制一些数据。
  lwip项目地址:http://git.savannah.nongnu.org/cgit/lwip.git

二、stm32 ETH介绍

以太网外设使 STM32F4xx 能够通过以太网发送和接收符合 IEEE 802.3-2002 标准的数据。
以太网提供了一个可配置的、灵活的外设来满足各种应用和客户的需求。 它支持到外部物理层 (PHY) 的两个行业标准接口:IEEE 802.3 规范中定义的默认媒体独立接口 (MII) 和简化的媒体独立接口 (RMII)。 它可用于多种应用,例如交换机、网络接口卡等。
以太网符合以下标准:
• 用于以太网 MAC 的 IEEE 802.3-2002
• 用于精确网络时钟同步的 IEEE 1588-2008 标准
• 用于 AHB 主/从端口的 AMBA 2.0
• RMII 联盟的 RMII 规范

2.1 MAC特征

• 使用外部 PHY 接口支持 10/100 Mbit/s 数据传输速率
• 符合 IEEE 802.3 的 MII 接口与外部快速以太网 PHY 通信
• 支持全双工和半双工操作
 – 支持 CSMA/CD 协议 双工操作
 – 支持用于全双工操作的 IEEE 802.3x 流控制
 – 在全双工操作中可选地将接收到的暂停控制帧转发到用户应用程序
 – 对半双工操作的背压支持
 – 在取消断言时自动传输零量子暂停帧 全双工操作中的流量控制输入
• 发送中的前导码和帧起始数据 (SFD) 插入,以及接收路径中的删除
• 自动 CRC 和填充生成可在每帧基础上进行控制
• 自动填充/CRC 选项 接收帧上的剥离
• 可编程帧长度以支持大小高达 16 KB 的标准帧
• 可编程帧间间隙(40-96 位时间,以 8 为步长)
• 支持各种灵活的地址 ss 过滤模式:
 – 最多四个 48 位完美 (DA) 地址过滤器,每个字节带有掩码
 – 最多三个 48 位 SA 地址比较检查,每个字节带有掩码
 – 64 位哈希过滤器(可选)用于多播和 单播 (DA) 地址
 – 传递所有多播寻址帧的选项
 – 混杂模式支持传递所有帧而不进行任何网络监控过滤
 – 传递所有传入数据包(根据过滤器)并带有状态报告
• 返回用于传输的单独 32 位状态 和接收数据包
• 支持接收帧的 IEEE 802.1Q VLAN 标记检测
• 应用程序的单独传输、接收和控制接口
• 支持使用 RMON/MIB 计数器 (RFC2819/RFC2665) 的强制性网络统计
• 用于 PHY 设备配置和管理的 MDIO 接口
• 检测 LAN 唤醒帧和 AMD Magic Packet™ 帧
• 接收功能,用于对接收的 IPv4 和以太网帧封装的 TCP 数据包进行校验和卸载
• 增强的接收功能 用于检查 IPv4 报头校验和封装在 IPv4 或 IPv6 数据报中的 TCP、UDP 或 ICMP 校验和
• 支持 IEEE 1588-2008 中所述的以太网帧时间戳。 在每个帧的发送或接收状态中给出了 64 位时间戳
• 两组 FIFO:具有可编程阈值功能的 2 KB 发送 FIFO 和具有可配置阈值的 2 KB 接收 FIFO(默认为 64 字节)
• 在 EOF 传输后插入接收 FIFO 的接收状态向量可在接收 FIFO 中启用多帧存储,而无需另一个 FIFO 来存储这些帧的接收状态
• 在接收时过滤所有错误帧的选项,而不是将它们转发到应用程序
• 可选择转发尺寸不足的良好帧
• 通过为接收 FIFO 中丢失或损坏(由于溢出)的帧生成脉冲来支持统计
• 支持存储和转发机制以传输到 MAC 内核
• 自动生成暂停帧控制或返回 基于接收 FIFO 填充(阈值可配置)级别向 MAC 内核发送压力信号
• 处理冲突帧的自动重传以进行传输
• 在后期冲突、过度冲突、过度延迟和欠载情况下丢弃帧
• 用于刷新 Tx FIFO 的软件控制
• 计算 并在存储转发模式传输的帧中插入 IPv4 报头校验和 TCP、UDP 或 ICMP 校验和
• 支持 MII 内部环回以进行调试

2.2 DMA特征

• 支持AHB Slave 接口中的所有AHB 突发类型。
• 软件可以在AHB Master 接口中选择AHB 突发类型(固定或无限突发)。
• 从 AHB 主端口选择地址对齐突发的选项
• 使用帧分隔符优化面向数据包的 DMA 传输
• 字节对齐寻址以支持数据缓冲区
• 双缓冲区(环)或链表(链式)描述符链接
• 描述符 架构,允许以最少的 CPU 干预进行大数据块传输;
• 每个描述符最多可传输 8 KB 的数据
• 针对正常操作和错误传输的综合状态报告
• 发送和接收 DMA 引擎的单独可编程突发大小,以实现最佳主机总线利用率
• 针对不同操作条件的可编程中断选项
• 每帧 发送/接收完成中断控制
• 接收和发送引擎之间的循环或固定优先级仲裁
• 启动/停止模式
• 当前 Tx/Rx 缓冲区指针作为状态寄存器
• 当前 Tx/Rx 描述符指针作为状态寄存器

2.3 PTP特征

• 接收和发送帧的时间戳
• 粗细修正方法
• 当系统时间大于目标时间时触发中断
• 每秒脉冲输出(产品交替功能输出)

三、原理图

排针没有引出复位引脚,外部有一个50MHz的有源晶振给lan8720提供时钟,PHYAD0接上拉电阻,地址为1。

四、cubemx配置

4.1 ETH配置

4.1.1 以太网phy标准寄存器

PHY是IEEE802.3中定义的一个标准模块,STA(station management entity,管理实体,一般为MAC或CPU)通过SMI(Serial Manage Interface)对PHY的行为、状态进行管理和控制,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。PHY寄存器的地址空间为5位,从0到31最多可以定义32个寄存器(随着芯片功能不断增加,很多PHY芯片采用分页技术来扩展地址空间以定义更多的寄存器,在此不作讨论),IEEE802.3定义了地址为0-15这16个寄存器的功能,地址16-31的寄存器留给芯片制造商自由定义。

4.1.2 cubemx的配置

配置PHY时,PHY Address Value为phy的地址,lan8720通过PHYAD[0],即PHYAD0引脚的电平决定地址是1还是0。PHYAD0引脚的配置用于设置收发器的SMI地址,我的这个引脚接的高电平,所以地址为1。

通用的寄存器不需要修改,需要检查厂商扩展的寄存器是否与cubemx的默认配置一致。

4.2 FreeRTOS配置

4.2.1 CMSIS-RTOS

CMSIS-RTOS是ARM公司为统一操作系统、降低嵌入式门槛而发布的操作系统标准软件接口。通俗讲,CMSIS-RTOS将操作系统(不管是FREE-RTOS还是RTX等)屏蔽起来,然后提供CMSIS-RTOS API给最终使用者调用。如此以来,最终使用者只需要学习CMSIS-ROTS即可,从而降低学习门槛。(不过,目前只有FREE-RTOS和RTX能够支持CMSIS-RTOS)。

4.2.2 cubemx配置

ST将FreeRTOS封装到CMSIS-RTOS(操作系统标准软件接口),选择v1版本。

4.3 其他配置

4.3.1 时基配置

hal的时基选择TIM1,操作系统和hal硬件层使用两套时基,可以参考https://blog.csdn.net/u010020404/article/details/106375690

4.3.2 时钟配置

使用内部高速时钟HSI和内部低速时钟LSI。

4.3.3 配置调试串口

添加串口重定向的代码,并在keil中使能microlib。

int fputc(int ch, FILE* stream)
{HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,100);return ch;
}

五、添加TCP回显代码

在cubemx下载好的hal库中找到tcp回显的demo,添加到keil工程中,并且添加好头文件,编译和下载。

六、添加debug支持

需要注意的是,默认没有开启LWIP_DEBUG,lwip各个模块的调试也没有使能。
在debug.h的开头定义LWIP_DEBUG,并在opt.h中添加如下的代码,需要打印什么模块的调试信息就去掉相应的注释。

//#define ETHARP_DEBUG                    LWIP_DBG_ON
//#define NETIF_DEBUG                     LWIP_DBG_ON
//#define PBUF_DEBUG                      LWIP_DBG_ON
//#define API_LIB_DEBUG                   LWIP_DBG_ON
//#define API_MSG_DEBUG                   LWIP_DBG_ON
//#define SOCKETS_DEBUG                   LWIP_DBG_ON
//#define ICMP_DEBUG                      LWIP_DBG_ON
//#define IGMP_DEBUG                      LWIP_DBG_ON
//#define INET_DEBUG                      LWIP_DBG_ON
//#define IP_DEBUG                        LWIP_DBG_ON
//#define IP_REASS_DEBUG                  LWIP_DBG_ON
//#define RAW_DEBUG                       LWIP_DBG_ON
//#define MEM_DEBUG                        LWIP_DBG_ON
//#define MEMP_DEBUG                      LWIP_DBG_ON
//#define SYS_DEBUG                       LWIP_DBG_ON
#define TCP_DEBUG                       LWIP_DBG_ON
//#define TCP_INPUT_DEBUG                 LWIP_DBG_ON
//#define TCP_FR_DEBUG                    LWIP_DBG_ON
//#define TCP_RTO_DEBUG                   LWIP_DBG_ON
//#define TCP_CWND_DEBUG                  LWIP_DBG_ON
//#define TCP_WND_DEBUG                   LWIP_DBG_ON
//#define TCP_OUTPUT_DEBUG                LWIP_DBG_ON
//#define TCP_RST_DEBUG                   LWIP_DBG_ON
//#define TCP_QLEN_DEBUG                  LWIP_DBG_ON
//#define UDP_DEBUG                       LWIP_DBG_ON
//#define TCPIP_DEBUG                     LWIP_DBG_ON
//#define PPP_DEBUG                       LWIP_DBG_ON
//#define SLIP_DEBUG                      LWIP_DBG_ON
//#define DHCP_DEBUG                      LWIP_DBG_ON
//#define AUTOIP_DEBUG                    LWIP_DBG_ON
//#define SNMP_MSG_DEBUG                  LWIP_DBG_ON
//#define SNMP_MIB_DEBUG                  LWIP_DBG_ON
//#define DNS_DEBUG                       LWIP_DBG_ON

七、TCP测试和ping测试

【lwip】第一篇:使用cubemx配置使能lwip相关推荐

  1. gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第一篇:安装配置gradle...

    一个bug 一个脚印的叫你们用gradle. 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走 ...

  2. 微信jsapi支付获取code_微信支付 第一篇 JSAPI 支付配置与获取 OpenID

    开通微信支付支付产品 首先要在微信支付申请成为 微信支付商户. 选择开通具体的支付产品 成为微信支付商户后在管理后台选择微信支付中的具体支付产品并申请开通如 JSAPI . 将支付商户与公众号关联 这 ...

  3. SAP License:BCS进阶第一篇-BCS相关概念

    SAP进阶-BCS(合并报表)-第一篇 1.后台配置 2.合并结构 2.1合并集团结构 在合并集团结构中,我们维护整个企业集团的组织结构,这种组织结构既可以是按股权投资关系描述的,用于法定对外会计报表 ...

  4. 第一篇Mac上fluter开发环境配置

    第一篇Mac上fluter开发环境配置 一.安装Xcode 二.安装Android studio 1.下载并安装[下载android studio](https://developer.android ...

  5. 第一章 stm32 cubemx基础配置实验以及proteus 8的使用

    第一章 stm32 cubemx基础配置实验以及proteus 8的使用 文章目录 第一章 stm32 cubemx基础配置实验以及proteus 8的使用 前言 一.STM32 Cubemx基础配置 ...

  6. SpringBoot SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 2.2 yaml 文件

    SpringBoot [千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程] SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 ...

  7. 「个人第一篇博客」 UAP用友平台配置(NC65)

    笔记pdf文件下载:https://download.csdn.net/download/d_c_hao/10841598 1.配置ufjdk环境变量 将D:\nc_work\studio\UAP-S ...

  8. 基于stm32c8t6的两轮平衡小车 第二篇——原理图及CubeMx配置

    目录 1.原理图 2.CubeMx配置 (1)创建工程 (2)配置时钟树 (3)仿真模式选择 (4)TIM2配置为PWM输出模式 (5)定时器TIM3,TIM4设置为编码器模式 (6)蓝牙串口配置 ( ...

  9. CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC

    CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC 引言 FTP代码库的移植 Cubemx配置SNTP以及RTC RTC配置方法 SNTP配置方法 FATFS载入RT ...

最新文章

  1. 【基础知识】如何快速转发CSDN博客
  2. 你要的用户画像实践来了!
  3. 二叉树的层序遍历和二叉树的线索化
  4. Problem G. Graph 2015-2016 acmicpc neerc 拓扑排序模拟
  5. Linux操作Oracle(10)——plsql配置Oracle客户端方法【Oracle客户端安装、资源下载】详细教程
  6. pythonista安装tkinter_Python又把GUI界面攻下了,今天就告诉你怎么玩
  7. CF932E Team Work
  8. 我所佩服的古人——乐毅
  9. 月饼(python)
  10. cad审图软件lisp_CAD审图标记下载_CAD审图标记官方下载_CAD审图标记v4-华军软件园...
  11. 如何在AppSec测试中处理SAST FPs
  12. I3D泛读【Que Vadis,Action Recognition?A New Model and the Kinetics Dataset】
  13. setInterval使用过程中报Uncaught SyntaxError: Unexpected identifier
  14. 表情包组件(vue)
  15. 公司数据库使用的是sqlServer 以防万一留着 SQLsever误删数据恢复
  16. discord linux_如何加入Discord服务器
  17. LeetCode一周题解(20220328-20220403)
  18. 如何定义项目生命周期?
  19. Linux网络不通Tcpdump抓包提示:ICMP host *** unreachable - admin prohibited
  20. 上海交通大学计算机科学导论论文,上海交通大学全能学霸:3年3篇SCI论文,数学全部满分,还爱写作...

热门文章

  1. 全国爱耳日|聆听世界从保护耳朵开始
  2. thinclient_drives
  3. 内存泄漏、内存溢出、内存越界、段错误、堆溢出、栈溢出
  4. 软件测试的基本过程共有几个步骤?
  5. ubuntu下出现u盘read-only情况,如何修复?
  6. 记事贴5:昨天发高烧-38.9摄氏度,今天还晕晕糊糊的,头脑不清醒!
  7. 保护眼睛-win10系统颜色(豆沙绿)设置
  8. 2022年10月份自考总结
  9. newsletter
  10. 字符串--用数组初始化和用指针初始化方法