首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与SD卡与STM32处理器的通信- SDIO协议

与SD卡与STM32处理器的通信- SDIO协议
EN

Stack Overflow用户
提问于 2016-12-20 15:17:21
回答 1查看 2.3K关注 0票数 4

我使用的是基于微控制器STM32F401RET6的板核STM32F401RET6.我连接到板上一个微SD插槽,对将数据写入SD卡并从中读取数据感兴趣。我使用软件STM32CubeX生成代码,特别是内置函数的SD库。我试图编写一个简单的代码,它将数组写入特定的数组,并尝试读取相同的数据后记。守则如下:

代码语言:javascript
复制
  int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  MX_SDIO_SD_Init();

  char buffer[14] = "Hello, world\n";
  uint32_t to_send[512] ; // Te
  uint32_t to_receive[512];
  uint64_t address = 150; 
  HAL_SD_WriteBlocks(&hsd, to_send, address, 512, 1);
  HAL_SD_ReadBlocks(&hsd, to_receive, address, 512, 1);


  while (1)
  {
      HAL_UART_Transmit(&huart2, (uint8_t *)buffer, 14, 1000);
      HAL_UART_Transmit(&huart2, (uint8_t *)to_receive, 512, 1000);

}

代码停在函数HAL_Init()的中间,我得到以下消息:

代码语言:javascript
复制
The stack pointer for stack 'CSTACK' (currently 0x1FFFFD30) is outside the stack range (0x20000008 to 0x20000408) 

当我不使用函数HAL_SD_WriteBlocks()或HAL_SD_ReadBlocks()时,不会出现此消息。如果有人已经有了这个问题,并知道如何解决它,一些帮助将拯救我。如果需要,我可以添加其余的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-20 15:24:07

你占用了太多的堆栈空间。您可以调整链接器脚本中分配的堆栈空间,并在需要时增加它。

但是,您可能可以通过不同的代码编写来避免这种情况。在上面的示例中,您将在堆栈上分配大型缓冲区(4kB)。除非绝对必要,否则不要这样做。我指的是:

代码语言:javascript
复制
int main(void) {
  // ...
  uint32_t to_send[512];
  uint32_t to_receive[512];
  // ...
}

相反,像这样分配缓冲区:

代码语言:javascript
复制
uint32_t to_send[512];
uint32_t to_receive[512];

int main(void) {
  // ...
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41245625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档