当前位置: 首页 > news >正文

STM32H7xx 运行 LWIP 时的 MPU 配置介绍 LAT1510

关键字: LWIP,STM32CubeMX,MPU 配置

1. 前言

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

笔者以点代面,以运行 LWIP 为例说明怎样使用 STM32CubeMX 对 STM32H7 特定存储 区间进行配置,并对 STM32CubeMX MPU 相关参数进行了解释说明。

2. 问题调研

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

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

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 上。

对于 STM32H7xx 运行 FreeRTOS+LWIP 时的内存分配,ST 官方 Demo 提供的参考配置如下。

以 STM32H723ZG 为例,说明使用 STM32CubeMX 实现配置 LWIP 缓存的配置:

(1) 在 STM32CubeMX 里面关于 TEX、C、B,三者组合值的关系(参见 AN4838)。 其中,TEX&C&B 的组合决定了对应 MPU 区域对应存储器的属性,其与 STM32CubeMX 里面的配置项对应关系如下:

  • TEX -- MPU TEX field level
  • C -- MPU Cacheable Permission
  • B -- MPU Bufferable Permission

(2) 实现 MPU 对 LWIP 堆栈区的设置(TEX=1,C=0,B=0),其属性为 Normal。 

(3) 实现 MPU 对 ETH TX/RX 数据缓存区的设置(TEX=0,C=0,B=1),其属性设置为 Device. LWIP 协议栈并为实现 Cache 一致性操作,cacheable 需要处于 disable 状态。

(4) 指定 ETH 发送、接收缓冲区地址 配置 LWIP 堆栈缓冲区地址和大小 至此,对于 STM32H7 运行 LWIP 与 MPU 相关的部分就介绍到这里,其它配置可参考 HAL 库里面的例程即可。

配置 LWIP 堆栈缓冲区地址和大小

至此,对于 STM32H7 运行 LWIP 与 MPU 相关的部分就介绍到这里,其它配置可参考 HAL 库里面的例程即可。

意法半导体公司及其子公司 (“ST”)保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财 产。 本文档是 ST 中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与 ST 官网资料不一致,请以实际应用验证结果和 ST 官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

http://www.dtcms.com/a/483009.html

相关文章:

  • 能动框架战场:如何摆脱供应商锁定并在下次AI战争中生存
  • 免费试用网站空间人人开发接单官网
  • 视联网技术产业观察与分析:视频隐私与安全防护
  • 南通网站建设祥云深圳罗湖网站设计公司
  • 基于蚁群算法优化BP神经网络的实现方法
  • 《Effective Java》第10条:覆盖 equals 时请遵守通用规定
  • 广东广州快速网站制作平台鄂州网站建设哪家好
  • 安卓android自动化测试-uiautomator/uiautomator2
  • 天津 网站设计公司门户网站制作定做
  • React组件复用导致的闪烁问题及通用解决方案
  • Java EE开发技术(Servlet整合JDBC银行管理系统-上)
  • 深入理解string底层:手写高效字符串类
  • 做国际网站有用吗基础建设图片
  • 启动hbase后,hbmaster总是挂
  • 自助网站建设开发流程步骤西安活动策划执行公司
  • 计算机系统---CPU的进程与线程处理
  • cv_bridge和openCV不兼容问题
  • json转excel python pd
  • 上海网站建设排名公司哪家好天蝎网站建设公司
  • 进入网络管理的网站不想用原来的网站模板了就用小偷工具采集了一个可是怎么替换
  • 西安注册公司在哪个网站系统哈尔滨模板网站
  • android 开机启动 无线调试
  • Polaris Officev9.9.12全功能解锁版
  • 云信im在Android的使用
  • 王道数据结构应用题强化表3.1.1-3.1.6
  • JDK 1.8 自动化脚本安装方案
  • 网站备案不通过怎么解决小米网站建设案例
  • 网路原理:UDP协议
  • 什么是区块链主机托管?为何要使用主机托管?
  • R语言空间数据分析实战:机器学习预测、尺度转换与地统计建模