你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于CUBEIDE中使用SDRAM定义变量的问题?

[复制链接]
13574295111 提问时间:2024-6-30 09:24 / 未解决

MCU为STM32H743。

因为正在做的项目的数据量比较大,所以要将某些大的数组放到SDRAM中。我在ld文件中的段定义如下图:

MEMORY {   FLASH (rx)     : ORIGIN = 0x08020000, LENGTH = 1920K

  DTCMRAM (xrw)  : ORIGIN = 0x20000000, LENGTH = 128K

  RAM_D1 (xrw)   : ORIGIN = 0x24000000, LENGTH = 512K

  RAM_D2 (xrw)   : ORIGIN = 0x30000000, LENGTH = 288K

  RAM_D3 (xrw)   : ORIGIN = 0x38000000, LENGTH = 64K

  ITCMRAM (xrw)  : ORIGIN = 0x00000000, LENGTH = 64K

  SDRAM (xrw) : ORIGIN = 0xc0000000, LENGTH = 32768K

}

  .SDRAM_Area :   {     . = ALIGN(4);     KEEP(*(.SDRAM_Area))     . = ALIGN(4);   } >SDRAM

所使用的数组定义如下: attribute((section(".SDRAM_Area"))) __IO uint8_t Rx6Buf[1460]; 编译后,进行debug时出现如下的错误:

STLink.png

请问下各路大神,这是什么原因。

收藏 评论4 发布时间:2024-6-30 09:24

举报

4个回答
xmshao 回答时间:5 天前
你如果不做这个SDRAM的定义就不会有这个提示了吗?


从出错提示来看,感觉跟你的变量定义没啥关系。


问题可能跟你的STLINK硬件连接、系统电源、调试配置方面有关。


外接SDRAM的话,注意先初始化后再使用。
13574295111 回答时间:5 天前

xmshao 发表于 2024-7-1 11:32
你如果不做这个SDRAM的定义就不会有这个提示了吗?</p>
<p>

那请问下应该如何定义呢。对cubeide实在是不熟悉。如果是MDK的话就简单了。

我的应用就是想将大的数组定义到SDRAM中去。

xmshao 回答时间:4 天前
关于这个定义,可以阅读下CubeIDE的用户手册。


另外,你可以参考下面写法。


uint8_t  Rx6Buf1460]  __attribute__((section(".SDRAMSection"))); //是双下划线


.SDRAM_Area (NOLOAD) : {
   . = ABSOLUTE(0xc0000000);
   *(.SDRAMSection)


} >SDRAM



再次强调下,使用SDRAM之前一定要初始化OK了。
13574295111 回答时间:3 天前

xmshao 发表于 2024-7-2 15:57
关于这个定义,可以阅读下CubeIDE的用户手册。</p>
<p>

谢谢您,我在main()中做了初始化了

int main(void)

{

/ USER CODE BEGIN 1 /

/ USER CODE END 1 /

/ MPU Configuration--------------------------------------------------------/

MPU_Config();

/ Enable the CPU Cache /

/ Enable I-Cache---------------------------------------------------------/

SCB_EnableICache();

/ Enable D-Cache---------------------------------------------------------/

SCB_EnableDCache();

/ MCU Configuration--------------------------------------------------------/

/ Reset of all peripherals, Initializes the Flash interface and the Systick. /

HAL_Init();

/ USER CODE BEGIN Init /

/ USER CODE END Init /

/ Configure the system clock /

SystemClock_Config();

/ USER CODE BEGIN SysInit /

/ USER CODE END SysInit /

/ Initialize all configured peripherals /

MX_GPIO_Init();

MX_TIM6_Init();

MX_USART1_UART_Init();

MX_USART6_UART_Init(2000000);

MX_FDCAN1_Init();

MX_FDCAN2_Init();

sdram_init();

MX_SDMMC1_SD_Init();

MX_FATFS_Init();

PrintfLogo();

/ USER CODE BEGIN 2 /

//PCF8574_Init();

//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

/ USER CODE END 2 /

/ Call init function for freertos objects (in freertos.c) /

MX_FREERTOS_Init();

/ Start scheduler /

osKernelStart();

/ We should never get here as control is now taken by the scheduler /

/ Infinite loop /

/ USER CODE BEGIN WHILE /

while (1)

{

/ USER CODE END WHILE /

/ USER CODE BEGIN 3 / }

/ USER CODE END 3 /

}

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版