[信息] LAT1510 STM32H7xx运行LWIP时的MPU配置介绍

[复制链接]
80|0
STM新闻官 发表于 2025-10-29 22:45 | 显示全部楼层 |阅读模式
本帖最后由 STM新闻官 于 2025-10-29 22:49 编辑

1. 前言           
在使用 STM32H7 系列进行开发产品时,客户经常忽略对 MPU 进行配置,一般出现问题来找原因时往往感到无从下手。对于 STM32H7 原因最多的是没有对 MPU 进行合理配置,这个问题很容易被忽略,因为当我们应用比较简单时,往往不容易出现错误。但是,当我们的应用较为复杂时,如有外扩存储器、GUI、ETH、USB 等出错概率就高了。笔者,最近就遇到一个案例,客户反馈不运行 LWIP 时程序正常,但是运行 LWIP 系统经常死机,不知道什么原因。         
笔者以点代面,以运行 LWIP 为例说明怎样使用 STM32CubeMX 对 STM32H7 特定存储区间进行配置,并对 STM32CubeMX MPU 相关参数进行了解释说明。

2. 问题调研         
首先我们使用 STM32CubeMX 创建一个基于 STM32H723ZG 的工程,MPU 默认配置如下:

96674690228e97ce6a.png

因此,在使用 STM32CubeMX创建工程时,默认就对 MPU 进行了初步配置,关于H7为什么要对 MPU 进行配置,其配置原理及 MPU 的更详细理解,有兴趣的读者可参考 LAT1240和 LAT1448,笔者不再做详细解释,其配置含义如下图所示:

824276902294c1f93d.png

3.  问题分析与解决办法         
通过上一章节里可以看到在使用 STM32CubeMX 创建工程时,已经对 MPU 进行了一个默认的基础配置,这就是为什么对于一般应用,我们即使不对 MPU 进行配置也能跑起来的原因。但是,为什么我们运行 LWIP 如果不对 MPU 进行正确配置就跑不起来了呢,或者会出现各种各样的问题呢? 主要有以下几个方面:
(1) 以太网数据是通过 ETH 专用 DMA 进行的,以太网发送/接收缓存不能存储在 DTCM RAM 中,而 STM32CubeMX 创建工程时默认可能把数据存储在 DTCM RAM 中去。
(2) Cortex-M7 内核访问 normal 属性的存储区域时,是按乱序访问操作的,按这种方式将数据写入到 ETH 寄存器显然是要出错的。应当将 LWIP 发送/接收缓冲区配置成Device memory 或 Strongly-ordered 类型。
(3) 根据 STM32H7 内部总线框图,可知 ETH_MAC 只能访问位于 D2 域内的 SRAM。因此,我们需要将 LWIP 所需的缓存分配到 D2 域的 SRAM 上。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1401

主题

1719

帖子

25

粉丝
快速回复 在线客服 返回列表 返回顶部