STM32H723配置以太网+Freertos注意事项

STM32H723最小系统硬件电路 按下SW1,Q1和Q2同时导通,触发单片机复位。在松开SW1后,由于C56通过R25回路放电被限流,Q2会延时截止,因此复位时BOOT0处于高电平,单片机就会从系统存储区启动,可以进行USB DFU下载或者串口ISP下载。当电路工作在谐振频率附近时,LC谐振电路可以用作振荡器,产生稳定的频率振荡信号,也即信号可以通过。而在其他频率下,电路将阻抗状态,排除这部分频率。首先第一次上电,R21、C55和SW2组成的复位电路进行一次复位,由于Q1和Q2截至,BOOT0被R25拉低,单片机从片内Flash启动程序。 阅读详情

由于STM32H743涨价到300元以上,项目换用了Pin2Pin替换的STM32H723,看上去cpu运行速度快了20%达到550Mhz。 但是内存布局存在很大不一样,而且ST官方代码库升级迭代快,要手动修改地方每个版本不一样,在有H743的经验下,花了2天时间搞好了记录一下。很多信息来源于英文ST支持论坛才搞定。

1.预备知识

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

  1. 熟悉H7系列都知道,以太网,DMA等设备,无法访问0x20000000,也就是TCM区的地址。为了让我们代码使用DMA搬运数据,整个代码的变量可以放在RAM D1区域,或者叫AXI区域,就要在.ld脚本中定义.data段,.bss段到 0x24000000. 这一块我们有320KB可以用。

  2. 而DTCM(0x20000000)的128K由于不能DMA访问,但是速度又很快,我们可以用于存放图像数据,高速ADC缓存数据,或者把定义RAMCode函数。

  3. 而涉及到ETH,以及Lwip 的收发缓存相关的地址,把他们定义到D2区域的固定地址。这样就可以使用MPU设置Cache规则,让CPU拿到正确的数据。

2.准备工作

有了以上2点准备,还要注意,如果使用的是CubeMXIDE 1.9.0 , FW库 1.9.0 以下的版本。 由于芯片比较新,ST官方仍然在进行迭代,最好进行升级,否则生成代码后仍然是不工作,不好查问题。现在是2022-12月, 下面基于1.11.0版本。
在这里插入图片描述
软件自动下载的固件库也是同样:STM32Cube_FW_H7_V1.11.0

调试过程中看了2个参考文章:

https://community.st.com/s/article/How-to-create-project-for-STM32H7-with-Ethernet-and-LwIP-stack-working
(其中提到到多处H723系列的特殊内存地址的问题,这个很关键)

https://blog.csdn.net/Motseturtle/article/details/126165780
(基本步骤有参考意义,但这个CSDN博文有一处内存地址0x3007ffff没写对是超范围的。另外几个步骤不适用于最新的1.11.0版本)

下面是具体生成步骤:

  1. 选择芯片
    在这里插入图片描述
  2. 如果本机没有H7固件库会下载。1G,大概2分钟左右。在这里插入图片描述
3.配置基本时钟外设

配置RCC,开启外置晶振,以太网不适合使用内置晶振。开启内置LDO,设置0档,这样支持芯片内核跑到500Mhz以上。
在这里插入图片描述
进入Clock Configuration, 自动求解时钟配置。一般硬件上是 16Mhz 或者 25Mhz无源晶振。按自己板子输入。路径选择圆点也要点上, 主频最高可以跑550Mhz。自动求解后,没有出现红色部分即可。
在这里插入图片描述

4.配置FreeRTOS

接下来准备配置 FreeRTOS。
把SYS内选择一个没用到的计时器。 用于HAL时钟,如自带的Delay,HAL API内超时等。
而原本的Systick要被RTOS占用,用于操作系统时钟节拍,上下文切换。
在这里插入图片描述
在中间件选项,打开Freertos,接口选择“CMSIS_V1”,这样代码体积小一些。功能是一样。
在这里插入图片描述

把默认任务的堆栈从128改为512以上,因为默认任务内有比较大的 LWIP 初始化。默认的128太小会导致初始化会Hardfault。 一般1024可以很够用了。
在这里插入图片描述

5.配置 Ethernet + Lwip

我用的LAN8742 / LAN8720(平替), 价格高一点,但是好处是可以代码全兼容不加额外PHY代码。组要要改的是 ETH涉及的GPIO要手动改为VeryHigh模式。默认是Low,是会导致PHY通信失败。
在这里插入图片描述
打开ETH全局中断
在这里插入图片描述
当使用CubeMXIDE时,是使用Gcc编译器, TX/RX Descriptor的内存地址由 *.LD链接脚本决定。这里可以不设置,但也可以设置一下。

TX/RX Descriptor 是给dma用的, 里面包括了 内存搬运的起始地址 结束地址 什么的,dma 分析这个结构体完成数据传输。所以这部分要单独存储,并且用MPU保护防止Cache引起的数据不一致。
在这里插入图片描述
接下来配置 LWIP
由于我要固定IP地址,把DHCP设为Disbale,下面输入固定IP的信息。
在这里插入图片描述
由于 STM32H723 / STM32H733 的 D2 RAM 是0x3000000开始,它的头16K用于ETH的DMA,后16K可以用于LWIP堆栈。默认的值0x30044000是适用于H743系列等,这里一定要改对,否则LWIP开机内存初始化函数会访问0x30044000(不存在于H723)会导致HardFault。
在这里插入图片描述
PHY就选一下,而且只有一种选项。 如果要改为DP83848或者RTL8201 低成本PHY可以参考其他文章,就是代码内PHY相关寄存器和地址改一下。
![
LWIP其余选项默认就行。

6.配置MPU

关于H7的MPU和Cache 可以看这个文章有了解
番外篇:STM32H7的Cache和MPU以及内存分配问题

H7主频工作在400MHz-550Mhz,除了ITCM DTCM 和Cache以满速度工作,其它AXI SRAM,SRAM1-4等都是以200MHz工作。数据缓存D-Cache就是解决CPU加速访问SRAM。

而以太网数据由于数据流量大,会被快速更新。被D-Cache缓存后已经是面目全非,所以我们使用MPU关闭以太网用的相关内存区域的Cache访问权,一旦Cache失效,CPU就老实去真实地址拿数据。这部分数据会慢一点,但是由于不是CPU自己生成的,来源于外部所以只能这样。
在这里插入图片描述
在这里插入图片描述
第一部分,把32K整个 D2区的SRAM 1 /2 处理为Level 1,关闭所有Cache行为。
第二部分,把头256B,也就是DMA描述符部分配置为Level 0。具体这里不展开。
可以参考:
STM32H743+CubeMX-梳理MPU的设置

7.配置LD脚本

根据ST支持论坛,1.11.0 版本的以太网驱动经过重构要手动加上一块代码,让我们能够指定RX_buff区域。打开 LWIP\Target\ethernetif.c, #120行附近
实现 memp_memory_RX_POOL_base 数组由.Rx_PoolSection段指定地址

/* USER CODE BEGIN 2 */
#if defined ( __ICCARM__ ) /*!< IAR Compiler */
#pragma location = 0x30000400
extern u8_t memp_memory_RX_POOL_base[];

#elif defined ( __CC_ARM )  /* MDK ARM Compiler */
__attribute__((at(0x30000400)) extern u8_t memp_memory_RX_POOL_base[];

#elif defined ( __GNUC__ ) /* GNU Compiler */
__attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];

#endif
/* USER CODE END 2 */

在LD脚本 STM32H723VETX_FLASH.ld 下部添加:

  .lwip_sec (NOLOAD) : {
    . = ABSOLUTE(0x30000000);
    *(.RxDecripSection) 
    
    . = ABSOLUTE(0x30000200);
    *(.TxDecripSection)
    
    . = ABSOLUTE(0x30000400);
    *(.Rx_PoolSection) 
  } >RAM_D2 AT> FLASH

到此配置结束,测试 Ping
在这里插入图片描述

后记: 测试发现,UDP接受超过1180字节后,LWIP协议栈停止工作,无法ping通收发数据。排查后发现是LWIP的TX堆栈位置(下图是设置为0x30004000)有问题,因为RAM2 的32K已经被ETH DMA用完了。改为0x2404B000,占用320K的RAM D1的末尾20KB就行了。同时在LD脚本把RAM D1 改小一点,改为300K,防止编译器占用我们需要的20K。在这里插入图片描述
LD脚本把RAM D1 改小一点,改为300K,防止编译器占用我们需要的20K。在这里插入图片描述
LD脚本把RAM D1 改小一点,改为300K,防止编译器占用最后20K。

2024-05 后记:

之前一直使用NETCONN API, 在 2-5ms任务 (FREERTOS) 收发UDP,2-3小时,就会卡住任务,或者底层无法收发。调试了任务和内存分配各种尝试无果。更换为socket api,稳定性问题就解决了。建议大家使用socket api进行网络收发。

STM32以太网通信-STM32以太网外设(ETH) 通过 DMA 控制器进行介质访问控制 (MAC) STM32F4xx系列控制器内部集成了一个以太网外设,它实际上是一个通过DMA控制器进行介质访问控制(MAC),它的功能就是实现MAC 层的任务。 借助以太网外设,STM32F4xx 控制器可以通过ETH 外设按照IEEE 802.3-2002 标准发送和接收MAC 数据包。 ETH 内部自带专用的DMA 控制器用于MAC,ETH 支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部PHY 芯片连接。MII 和RMII 接口用于 阅读详情

相关推荐

STM32以太网Ping不通?FreeRTOS+LWIP配置避坑与排查指南

嵌入式网络开发中,MCU通过以太网外设与PHY芯片通信,依赖RMII接口和50MHz参考时钟实现数据链路层收发。LWIP作为轻量级TCP/IP协议栈,在FreeRTOS上运行时需合理分配任务优先级、堆栈及内存池,否则易出现Ping不通或丢包。正确配置MPU和Cache对H7系列尤为关键,可避免DMA与CPU数据不一致。典型应用场景包括工业控制、物联网网关等。本文梳理STM32CubeMX配置FreeRTOS+LWIP的常见陷阱与系统化排查方法,帮助开发者快速打通网络通信。

weixin_29168675的博客 202

STM32H723、STM32H743、STM32H750的区别

例如,STM32H723提供高达2 MB的闪存和564 KB的RAM,STM32H743提供高达2 MB的闪存和1 MB的RAM,而STM32H750提供高达1 MB的闪存和340 KB的RAM。STM32H723的最大频率为550 MHz,STM32H743的最大频率为480 MHz,而STM32H750的最大频率为480 MHz。例如,STM32H723和STM32H743都可提供LQFP、UFBGA、BGA和WLCSP等多种封装选项,而STM32H750主要提供LQFP封装。

小灰灰的博客 2万+

STM32F103+LWIP实战:从零搭建嵌入式Web服务器与编译避坑指南

嵌入式网络通信中,LWIP协议栈移植与以太网驱动开发是核心难点。其原理基于TCP/IP分层模型,通过网卡驱动对接实现数据链路层通信,技术价值在于让资源受限的MCU具备网络服务能力。典型应用场景包括工业控制、物联网网关等。STM32F103结合ENC28J60与CubeMX可快速构建HTTP服务器,但需注意内存配置与复位时序。本文聚焦LWIP移植、网卡驱动及编译错误排查,提供可复现的实操方案。

WGH100817的博客 474

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

STM32H723+Lwip+ETH+CUBE 完整配置

Motseturtle的博客 2万+

STM32H7+LAN8720A之ETH与LWIP配置问题(End)

开篇介绍 由于项目中需要使用到STM32H7系列的芯片,且该系列无法移植ST的标准库,只能使用ST的HAL库,通过STM32Cube生成HAL库的基本代码。在项目开发中需要使用到STM32板载的ETH口,在简化的四层模型中充当着数据链路层的角色,我们只需添加PHY并配置好IP,即可实现基本的TCP主从机通信、UDP通信等等。 一、激光雷达3i-T1 由于使用了一款只具有网口通信的单线激光雷达,其具有TCP和UDP方式的通信方式,为了避免进行TCP中的socket报文解析和繁琐的通信握手过程,我们首先将雷达配

weixin_42024702的博客 1万+

STM32F4_网络通信(网口)

STM32F4 芯片自带以太网模块,该模块包括带有专用 DMA 控制器的 MAC 802.3(介质访问控制)控制器,支持介质独立接口(MII)和简化介质独立接口(RMII),并自带了一个用于外部PHY通信的SMI接口,通过一组配置寄存器,用户可以为 MAC 控制器和 DMA 控制器选择所需的模式和功能。STM32F4必须外接PHY芯片,才可以完成以太网通信,外部PHY芯片可以通过 MII/RMII 接口与STM32F4 内部MAC连接,并且支持 SMI (MDIO&MDC)接口配置外部以太网PHY芯片。

light_2025的博客 1万+

STM32H723 + DP83848 + LWIP + RT-Thread(FreeRTOS) + STM32CubeMX + Keil MDK 超详细

STM32H723ZGT + DP83848 + LWIP + RTOS 工程的搭建

u013737601的博客 1万+

STM32高级物联网通信之以太网通讯

W5500是韩国半导体公司WIZnet提供的一款高性价比的以太网芯片。其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用,安全稳定,是物联网设备的首选解决方案。W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(PHY),使得用户使用单芯片就能够在他们的应用中拓展网络连接。久经市场考验的WIZnet全硬件TCP/IP协议栈支持TCP、UDP、IPv4、ICMP、ARP、IGMP以及PPPoE协议。W5500内嵌32K字节。

嵌入式心学修行者,以代码为器,以良知为核。探索嵌入式开发中的“知行合一”,在编译、调试、部署中事上磨练致心中之光,铸可靠之器。 4113

【LWIP】STM32H743/750+CubeMX+AC5/AC6+裸机/FreeRTOS+(ETH)LWIP+DP83848/LAN8720/42——创建可ping模板

借鉴的基于STM32CubeMX创建的STM32H743+DP83848+LWIP网络通信程序调试_20221127算是胎教级教程了_h743 cubemx lwip-CSDN博客。

m0_74209072的博客 3574

STM32的以太网外设+PHY(LAN8720)使用详解(1):ETH和PHY介绍

本文详细介绍了STM32的以太网外设和PHY(LAN8720)。

kevin1499的博客 8988

基于N32G003的PMBus从机协议栈设计与STM32F103模拟I2C主机通信实战

本文详细介绍了基于N32G003微控制器设计PMBus从机协议栈,并与STM32F103模拟I2C主机进行通信的实战方案。重点阐述了中断驱动架构、命令解析、CRC8优化及超时恢复机制,实现了在70kHz速率下稳定可靠的工业电源管理通信,适用于服务器电源、通信基站等成本敏感应用场景。

numpy6sculptor的博客 915

STM32H7内置MAC+LAN8720A以太网通信实战:从CubeMX配置到LWIP调优与ping通排查

以太网通信是嵌入式系统实现网络连接的基础技术,其核心在于MAC控制器与PHY芯片的协同工作。通过RMII接口,MCU内置MAC可高效处理数据链路层帧的收发,而PHY负责物理层信号转换。这种架构能显著提升吞吐量,适用于工业网关、数据采集等场景。然而,实际部署中常因时钟配置、DMA对齐或协议栈内存不足导致通信失败。以STM32H7与LAN8720A为例,结合LWIP协议栈,需精细调整RMII时钟、PHY自协商及PBUF内存池,才能实现稳定ping通与高速传输。

weixin_33895475的博客 1128

帕德伯恩大学轴承数据集(PU)介绍

PU数据集介绍一、帕德伯恩大学轴承数据集故障类别说明二、关于损伤描述2.1 损伤组合:2.2 重复和多重损伤的安排:2.3 几何尺寸2.4 损伤程度2.5损伤特征数据集损伤类别三、人为损坏轴承3.1 最常用的人为损伤制造方法是:3.2 本数据集使用的人工损坏是由三种不同方法引起的四、通过加速寿命试验产生真正的轴承损坏样本 一、帕德伯恩大学轴承数据集 数据集下载地址 从帕德伯恩大学获得的PU数据集是一个6203轴承数据集,包括人为诱发的和真实的损害。采用压电加速度计采集轴承座的振动信号,采样频率为64 kHz

m0_47180208的博客 3万+

STM32学习之以太网介绍

以太网简介 以太网(Ethernet)是互联网技术的一种,由于它是在组网技术中占的比例最高,很多人直接把以太网理解为互联网。 以太网是指遵守IEEE802.3标准组成的局域网,由IEEE 802.3标准规定的主要是位于参考模型的物理层(PHY)和数据链路层中的介质访问控制子层(MAC)。 PHY层 在物理层,由IEEE 802.3标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,物理层一般是通过一个PHY芯片实现其功能的。 1 传输介质 传输介质包括同轴电缆、双绞线(水晶头网线是一种双绞

XMJYever的博客 5801

Linux平台CCS安装配置完整示例

手把手讲解在Linux系统中完成CCS安装与环境配置的全过程,涵盖关键步骤与常见问题解决,是查找ccs安装教程时不可多得的实战指南。

weixin_42601134的博客 508

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1526

STM32H723ZGT6 LWIP LAN8720A FreeRTOS

1.cubemx配置MPU2.手动配置RAM_D2。

qq_36507694的博客 3837

硬件电路设计采集电路

摘要:采集电路是硬件设计中连接物理世界与数字系统的关键环节,主要用于将温度、压力等物理量转换为电信号。常见的采集电路包括模拟量采集(如温度、电压)、数字量采集(如开关状态)和特殊信号采集(如光、声音)。设计时需重点关注传感器选型、信号调理、电源接地、抗干扰和ADC配置等核心要素,确保信号链路的完整性和稳定性。合理的电路设计需结合具体应用场景,通过仿真和测试验证性能,最终实现精确可靠的数据采集。

qq_37999850的博客 1789

STM32H723ZGT6 LAN8720A LWIP

链接:https://pan.baidu.com/s/1CGMPRxnMNRE2bVL5F0r97Q。硬件库版本:STM32Cube FW_H7 V1.11.0。Stm32CubeMX 版本:6.8.1。

zq4132的专栏 2436

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践

智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe

weixin_27210125的博客 615

手把手教你学PCIE(9.3)--pcie常见故障及原因:配置错误介绍

PCIe 设备的配置错误可能涉及操作系统设置、BIOS 设置、驱动程序设置和配置文件设置等多个方面。通过以上方法,可以有效地诊断和解决 PCIe 设备的配置错误。

MHD0815的博客 2425

STM32 以太网W5500

W5500 是一款全硬件 TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。支持硬件 TCP/IP 协议: TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE支持8个独立端口(Socket)同时通讯支持高速串行外设接口SPI( 80MHz 速率)内部32K字节收发缓存LED状态显示支持掉电模式、网络唤醒。

木牛的博客 8632

链接文件及功能安全:英飞凌官方文档摘录 - 基于Tasking与AURIX TC3xx MCAL中Link文件解析以及代码变量定位方法详解

Data区域是用来存放带初始化值的全局变量,在link文件中,这个区域有两种类型,预先定义的区域和默认区域。预先定义的Data区域,例如.data.Ifx_Ssw_Tc1和.data.Cpu1_Main.*,在cpu1_main.c中如果定义了一个带初始化值的变量,则它会放在DSRAM1中的.data.Cpu1_Main.*段中。

梦想技术家 529

ST STM32H723ZGTx - NUCLEO-H723ZG DMAMUX_RequestGen例程重现/消化/改进

和同学讨论问题.他要用CubeMX + STM32H723ZGTx 实现一个外中断0引发的DMA, 来根据外中断0触发MA自动拷贝 AD7606 FMC采样 的RAM地址的8通道的值到内存备用.这个实现的知识点在官方例程中比较像的是DMAMUX_RequestGen, 以前正好用H743的官方板子做过实验(), 同学正好找资料的时候看到了.他就和我讨论如何在H723上实现这个功能(需要将DMA拷贝改成由EXTI0自动触发).

博客标题不能为空 2714

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

STM32F4-ETH通信(lwip)——学习笔记

3、 以太网 (Ethernet) 是互联网技术的一种,以太网是指遵守 IEEE 802.3 标准组成的局域网,由 IEEE 802.3 标准规定的主要是位于参考模型 的物理层 (PHY) 和数据链路层中的介质访问控制子层 (MAC)。数据包中的 DA 是目 标地址,SA 是源地址。1、国际标准组织将整个以太网通信结构制定了 OSI 模型,总共分层七个层,分别 为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层,每个层功能不同,通信 中各司其职,整个模型包括硬件和软件定义。

sdg159357的博客 4385

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

STM32H723ZGT6 CAN1 CAN2 发送和接受

1.接上文档,本文档只关注CAN。2.Stm32CubeMX配置。

zq4132的专栏 3224

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: STM32 LWIP 接收大数据包导致Hardfault问题解决记录
下一篇: 通过Python连接 modbus tcp 和台达PLC通信测试记录
秋阳 Cody
博客等级 码龄15年 85粉丝 7原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值