STM32H723+Lwip+ETH+CUBE 完整配置(排了巨多坑!)

因为H723ZET6是ST目前最新的芯片,对于这个芯片的LWIP配置,官方库极其不友好,而且贼多BUG,踩了好久的坑,历经诸多苦难,终于能够正常PING通和进行TCP/UDP通讯了。而且在国内基本上找不到H723ZET6的LWIP配置教程,所以必须记录一下。
开发环境:
适用CUBE版本:STM32CubeIDE 1.9.0 及以上
stm32芯片型号:H723ZET6

一、配置部分

(一)常规配置,RCC和SYS

RCC启用外部高速时钟

在这里插入图片描述
在这里插入图片描述

(二)串口

串口的配置和代码实现本文不加以说明

在这里插入图片描述

(三)ETH配置

MAC随意,不必和图中一样

在这里插入图片描述

ETH的GPIO配置为高速,不然可能会ping不通

在这里插入图片描述

(四)LWIP(重点来了)

首先是LWIP的常规配置,设置IP,其他默认。

在这里插入图片描述

排坑一:H723系列不同于H7系列,官方库默认配置是0x30044000,我相信有不少朋友试过:代码编译正常,烧录正常,但是代码一执行就进入Handler。这是因为H723的内存不同于其他H7系列。H723的RAM_D2的地址范围是0x30000000~0x30008000,而其他的H7空间比这个大得多。

在这里插入图片描述

然后注意LWIP_NETIF_LINK_CALLBACK(检测网线插拔的)要使能就行,其他配置默认

在这里插入图片描述

排坑二:你实际用的PHY不一定是LAN8742,但官方配置就是默认且必须选择LAN8742,恶心死我了,所以到时要去修改它源码的PHY地址,后面会说到在哪里改。

在这里插入图片描述

使能SNTP

在这里插入图片描述

然后这里也默认就行

在这里插入图片描述

(五)PHY的复位引脚配置

我看很多教程都没详细写这一步,经常不知道这个复位是哪来的,实际上是必要的,除非硬件上设置了自动复位。设置一个引脚为输出模式,常态高电平。(具体哪个是复位引脚要看你们自己的硬件设计)

在这里插入图片描述

并且常态设置为高电平

在这里插入图片描述

(六)MPU配置(巨坑来了)

排坑三:H7系列的芯片想用LWIP必须配置MPU,而H723的配置与其他H7系列又有些不同,但哪里不同不需要管了,按我下面配置就完事

在这里插入图片描述

就这两个

在这里插入图片描述

(七)时钟树配置

这个没啥好说的,常规操作。

在这里插入图片描述

(八)生成代码

这里可以改大点

在这里插入图片描述

然后勾选划分模块

在这里插入图片描述

保存后就可以生成代码了。后面来到代码部分:

二、代码部分

(一)main函数的修改

使能D2SRAM1时钟:

在这里插入图片描述

后面再加上这几行,清空DVache和PHY复位

在这里插入图片描述

当然还有MX_LWIP_Process(),加在循环里面

在这里插入图片描述

(二) 修改phy地址

因为我用的phy地址是0x1,所以需要修改才能用,在这里修改:

在这里插入图片描述

找到函数LAN8742_Init(lan8742_Object_t *pObj)
在这个位置,强行修改phy的地址为0x1,恶心的官方库,很不好的是如果重新配置了ioc生成代码,又要重新在这里添加修改

在这里插入图片描述

(三)修改ld文件(巨坑)
很多人都不知道要改这里,少了这里不管怎么样配置都无法正常使用以太网,巨恶心,就是这个文件:

在这里插入图片描述

拉到最下面的这个位置,添加以下代码(目的是将lwip的内存放进RAM_D2里面):

在这里插入图片描述

到这里,所有的配置就完成了,可以编译烧录,尝试ping网络:

在这里插入图片描述

搞定。
### STM32F407与LwIP及YT8512H以太网驱动移植 对于STM32F407和LwIP以及YT8512H以太网驱动的移植工作,通常涉及几个关键方面: #### 1. 获取必要的软件包和支持文件 为了完成移植过程,需要获取适合STM32F407平台的FreeRTOS和LwIP库版本。这些资源可以从官方渠道下载获得。此外,针对特定硬件如YT8512H芯片的支持也需要相应的驱动程序。 #### 2. 配置环境并集成第三方组件 安装好IDE(比如Keil MDK或STM32CubeIDE),并将项目设置为支持Cortex-M4架构下的STM32F4系列微控制器。接着导入FreeRTOS源码及其配套工具链;同样地,加入LwIP协议栈至工程结构内[^1]。 #### 3. 初始化外设接口 根据所选MCU型号调整GPIO引脚分配给RMII模式下工作的以太网PHY设备。例如,在GD32平台上是以PA1作为ETH_RMII_REF_CLK输入信号线等连接方式来实现物理层通信功能[^2]。然而具体到STM32F407上,则需参照其数据手册确认正确的管脚映射关系,并据此修改初始化代码中的配置参数。 #### 4. 实现底层驱动函数 编写专门用于控制YT8512H的操作方法,包括但不限于读取/写入寄存器状态、发送接收帧等功能模块。这部分可能依赖于厂商提供的API文档来进行适配开发。 #### 5. 测试验证整个系统的稳定性 最后一步是在目标板卡上部署应用程序并对其实行全面的功能测试,确保各个部分协同运作良好无误。 由于具体的移植细节会因不同应用场景和个人偏好有所差异,建议查阅相关技术论坛或者联系制造商寻求更详细的指导资料。同时也可以参考开源社区分享的成功案例学习借鉴经验教训。 ```c // 示例:简单的LED闪烁任务创建 (仅作示意用途) void StartDefaultTask(void const * argument){ while(1){ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); osDelay(500); // 使用FreeRTOS延时 API } } ```
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青云客_Hugh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值