硬汉嵌入式论坛

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

[STM32H7] 无法像使用内部SRAM一样定义使用STM32H7的外部SDRAM

[复制链接]

3

主题

3

回帖

12

积分

新手上路

积分
12
发表于 2023-11-3 13:38:03 | 显示全部楼层 |阅读模式

最近产品升级使用了STM32H743II芯片作为主控,挂的SDRAM,
之前使用的是GD32F470ZKT6,外挂SDRAM,他可以在分散加载文件中定义外部SDRAM,然后可以在程序中随便定义变量并指定到SDRAM内存中
分散文件如下:


LR_IROM1 0x08000000 0x00100000  {    ; load region size_region   
  ER_IROM1 0x08000000 0x00100000  {  ; load address = execution address

   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20000000 0x00030000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x10000000 0x00010000  {
   .ANY (+RW +ZI)
   ;heap_5.o (+RW +ZI)             ;FreeRTOS
   ;port.o (+RW +ZI)               ;FreeRTOS
  }
  RW_SD_RAM 0xC0000000  0x01000000  {  ; RW data         
   ;.ANY (+RW +ZI)
   .ANY (SDRAM)
   }
}


程序中使用__SDRAM  宏定义指向外部SDRAM存储区域,如下
#define __SDRAM  __attribute__ ((section ("SDRAM")))     //设置变量到EXRAM截取的宏


然后在程序中就可以随便定义变量,只要前缀__SDRAM  ,他都会分配到外部SDRAM中,
如下面例子:
Parameter_Para    __SDRAM Parameter    = {0};   //配置信息


然而到了STM32H743,我使用了相同的方法,但是他 HardFaultHandler 了,检查发现他在卡在__scatterload处,还没有运行到main()主函数,怀疑是因为我定义了存储在外部SDRAM中的变量,且变量是初始化为0的,此时出错了
下载 (7).png
搜索论坛 硬汉哥有相关的论贴,
【原创】像使用内部SRAM一样定义使用STM32H7的外部SDRAM,含MDK和IAR两版 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
试了一下,他是可以随意定义变量,但是在定义变量的时候同样不能初始化这个变量,有谁知道原因的,应该如何解决。

我需要一个方便定义变量在外部存储区域,不能指定地址(不方便管理位置),调试可以初始化变量的方法,就像我用的GD32F470的示例一样的方法







【原创】像使用内部SRAM一样定义使用STM32H7的外部SDRAM,含MDK和IAR两版 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-11-3 14:24:55 | 显示全部楼层
H7系列没有初始化SDRAM前,不能强行访问了,会硬件异常,之前F4系列没有这个问题。

所以你要处理下,最好初始化SDRAM后,再初始化SDRAM里面的变量。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 18:12 , Processed in 0.267897 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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