硬汉嵌入式论坛

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

[STM32H7] STM32H7 SDRAM启动的坑

[复制链接]

19

主题

62

回帖

119

积分

初级会员

积分
119
发表于 2022-6-11 12:57:31 | 显示全部楼层 |阅读模式
       最近在尝试将程序转移到SDRAM来运行,发现有一些坑,分享给大家:

1.bootloader将程序搬运到SDRAM并跳转后发现SDRAM所有数据都变成AA.调试后发现问题是在新版本驱动中SystemInit()存在禁用FMC的代码

[C] 纯文本查看 复制代码
void SystemInit (void)
{
#if defined (DATA_IN_D2_SRAM)
 __IO uint32_t tmpreg;
#endif /* DATA_IN_D2_SRAM */

  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2)));  /* set CP10 and CP11 Full Access */
  #endif
  /* Reset the RCC clock configuration to the default reset state ------------*/
....

#if defined(DUAL_CORE) && defined(CORE_CM4)
  /* Configure the Vector Table location add offset address for cortex-M4 ------------------*/
#if defined(USER_VECT_TAB_ADDRESS)
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D2 AXI-RAM or in Internal FLASH */
#endif /* USER_VECT_TAB_ADDRESS */

#else

  /*
   * Disable the FMC bank1 (enabled after reset).
   * This, prevents CPU speculation access on this bank which blocks the use of FMC during
   * 24us. During this time the others FMC master (such as LTDC) cannot use it!
   */
  FMC_Bank1_R->BTCR[0] = 0x000030D2;  //此处会禁用FMC,到时SDRAM,必须注释掉才能SDRAM启动

  /* Configure the Vector Table location -------------------------------------*/
#if defined(USER_VECT_TAB_ADDRESS)
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
#endif /* USER_VECT_TAB_ADDRESS */

#endif /*DUAL_CORE && CORE_CM4*/

}


2.如果希望SystemInit()来帮自己设置中断向量的位置,需要设定宏定义USER_VECT_TAB_ADDRESS=0xD0000000U,这个是和以前不同的

3.官方的ExtMem_CodeExecution范例程序里面,其实在SystemInit()是有一个SystemInit_ExtMemCtl(),提前初始化SDRAM,这样是可以解决__main()无法将RW和RO数据释放到SDRAM的问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
发表于 2022-6-11 16:06:22 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2022-6-11 23:17:16 | 显示全部楼层
如楼主所说,确实,C启动代码Execution region的加载是核心。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-1-25 16:36:47 | 显示全部楼层
感谢老哥,卡了三天的问题,终于解决了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 01:14 , Processed in 0.160471 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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