硬汉嵌入式论坛

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

[SRAM] STM32H7的D2域SRAM使用注意事项

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2019-8-22 15:08:52 | 显示全部楼层 |阅读模式
问题现象:
有时候大家想这样使用SRAM(详情看V7用户手册的第26章)

__attribute__((section (".RAM_D2"))) uint32_t D2SRAMBuf[10] = {1,2,3,4,5,6,7,8,9,0};

实际测试发现初始化的这几个数值没有正确赋值。

问题解决办法:
经过查找,发现是D2域时钟初始化的问题,需要用户在启动文件里面的__main函数之前就执行初始化
QQ截图20190822150628.jpg

也是将三个时钟初始化放在函数SystemInit里面即可:
QQ截图20190822150850.jpg

评分

参与人数 1金币 +20 收起 理由
木兰花 + 20

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
 楼主| 发表于 2019-8-22 15:11:25 | 显示全部楼层
知识点补充,V7用户手册的第25章:

2019-08-22_151123.jpg
回复

使用道具 举报

10

主题

247

回帖

282

积分

高级会员

积分
282
发表于 2019-8-22 21:02:49 | 显示全部楼层
不开时钟是如何访问到的呢?难道对应的时钟默认是打开的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
 楼主| 发表于 2019-8-22 21:07:10 | 显示全部楼层
fengxin32 发表于 2019-8-22 21:02
不开时钟是如何访问到的呢?难道对应的时钟默认是打开的?

H7的特色
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2019-12-31 16:08:41 | 显示全部楼层
本帖最后由 小积分 于 2019-12-31 17:57 编辑

我使用的开发环境是STM32cubeIDE1.1.0,刚才没有图片,重发一遍

H7的启动文件startup_stm32h743xxxx.s中,在调用main函数前会先调用进行堆栈初始化,再调用SystemInit函数进行D2区域RAM(即SRAM1~3)的使能(如果定义宏DATA_IN_D2_SRAM的话),初始化和使能顺序颠倒了,

因此,如果直接在D2区域声明变量,会导致D2区域变量未被初始化。
如果想要正常使用D2区域SRAM,需要进行以下操作:
1、定义宏DATA_IN_D2_SRAM
2、找到启动汇编文件中的“bl SystemInit”将其剪切至“b LoopCopyDataInit”前即可,如下图所示


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
 楼主| 发表于 2019-12-31 18:04:25 | 显示全部楼层
小积分 发表于 2019-12-31 16:08
我使用的开发环境是STM32cubeIDE1.1.0,刚才没有图片,重发一遍

H7的启动文件startup_stm32h743xxxx.s中 ...

ST的1.6.0 HAL库已经安装我楼主位的方式修改了。
回复

使用道具 举报

6

主题

216

回帖

234

积分

高级会员

积分
234
发表于 2021-6-6 20:55:43 | 显示全部楼层
eric2013 发表于 2019-12-31 18:04
ST的1.6.0 HAL库已经安装我楼主位的方式修改了。

话说必须改HAL库文件system_stm32h7xx.c?使用D2玉SRAM太坑了,没有其他的简便方法了么
回复

使用道具 举报

6

主题

216

回帖

234

积分

高级会员

积分
234
发表于 2021-6-6 21:30:38 | 显示全部楼层
在不更改文件system_stm32h7xx.c情况下,最简便的方法是解除该文件下的宏定义,即可使能D2区域SRAM初始化数据
1.jpg
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-11-10 10:47:18 | 显示全部楼层
小积分 发表于 2019-12-31 16:08
我使用的开发环境是STM32cubeIDE1.1.0,刚才没有图片,重发一遍

H7的启动文件startup_stm32h743xxxx.s中 ...

STM32 cubeide 如何修改启动文件,使能D2域呢
回复

使用道具 举报

5

主题

11

回帖

31

积分

新手上路

积分
31
发表于 2023-11-10 15:07:49 | 显示全部楼层
在编译选项里面,直接定义 DATA_IN_D2_SRAM,这样可以不用动源文件
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 04:59 , Processed in 0.442949 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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