硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2927|回复: 7
收起左侧

[STM32H7] 程序RAM中运行,系统内存为何必须要用DTCM区?

[复制链接]

4

主题

42

回帖

54

积分

初级会员

积分
54
发表于 2019-2-2 14:15:17 | 显示全部楼层 |阅读模式
stm32H7系列海量的内部RAM,用来调试代码很给力。不过发现一个问题,以512k AXI SRAM(0x24000000)作为IROM区,那么系统的IRAM必须定义在DTCM(0x20000000)区,而把系统的IRAM定义在SRAM1(0x30000000)区则不能运行,直接进入hardfault。
看了一下系统总线架构图,还是没有看出来为什么会这样,哪位了解这个,讲一下原理呢。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2019-2-2 14:17:28 | 显示全部楼层
没有这种限制。
回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
 楼主| 发表于 2019-2-2 14:37:24 | 显示全部楼层
我已经试了好几次了,昨天前天一直调试不通,今天才发现问题在这里。
要不,硬汉你试一下?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2019-2-2 14:40:24 | 显示全部楼层
jinggx 发表于 2019-2-2 14:37
我已经试了好几次了,昨天前天一直调试不通,今天才发现问题在这里。
要不,硬汉你试一下?

我试过,没问题的,后面有时间了发个例子出来。
回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
 楼主| 发表于 2019-2-2 14:43:42 | 显示全部楼层
好吧,等你的示例。
我这个只能先按这种设置用着了。
回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
 楼主| 发表于 2019-2-2 19:51:18 | 显示全部楼层
又试了几下,发现把IRAM设定在SRAM1不是不能运行,而是不能高速运行,使用HSI在64M下可以运行,使用PLL在400M下就出问题了。
问题可能是在Cache上,因为TCM RAM是随CPU时钟一致的且不需要使用Cache,具体原因现在还不清楚。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2019-2-4 00:39:28 | 显示全部楼层
jinggx 发表于 2019-2-2 19:51
又试了几下,发现把IRAM设定在SRAM1不是不能运行,而是不能高速运行,使用HSI在64M下可以运行,使用PLL在40 ...

可以正常使用的,今天我专门又测试下了,发现使用串口的那个初始化函数会卡死在SetConfig时钟配置的地方,导致硬件异常。

外设初始化完毕后使用D2域的SRAM就无此问题了。

D2域的SRAM都有这个问题,而D3域的SRAM没有这个问题。

回复

使用道具 举报

7

主题

56

回帖

77

积分

初级会员

积分
77
发表于 2019-2-9 22:18:35 | 显示全部楼层
h7的某些ram区域需要初始化才能使用 包括你使用的sram1 你作为IRAM时需要在system.c文件中完成初始化才行
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 08:28 , Processed in 0.167628 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表