偶买噶008 2023-12-23 17:45 采纳率: 0%
浏览 10

stm32429使用fatfs文件系统写sd卡单次需要70ms,如何提高写效率?

读写sd卡使用dma写入,使用sdio通讯,sd卡分频40,系统时钟84M

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-25 20:36
    关注

    【相关推荐】



    • 这篇博客: STM32L4新版HAL库SDIO(DMA)、FatFs使用教程(四)中的 添加FreeRtos支持。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      FreeRtos中使用FATFS是强制要求使用DMA模式的SDIO驱动。步骤如下:

      1、打开工程配置文件,添加FreeRtos支持

      2、配置参数

      发现configuration选项卡SDMMC1报错,信息如下,意思是中断优先级问题。

      打开NVIC配置界面,修改中断优先级,注意,DMA优先级要比SD中断优先级低。

      打开FREERTOS选项,如图所示适当配置任务堆栈大小,这里为了测试方便,放到Start Task中测试,正式使用时,不要放在这里,要新建任务。文件操作所在的任务需要适当加大堆栈。

      3、生成代码,打开工程,将main函数中的Fatfs_RW_test();语句剪切,粘贴到StartDefaultTask函数(635行附近),/* USER CODE BEGIN 5 */标记后面,如图所示。

      4、由于重新生成了代码,bsp_driver_sd.c文件中的BSP_SD_ReadBlocks_DMA和BSP_SD_WriteBlocks_DMA被覆盖掉,需要按照上一节的步骤,加入DMA通道配置函数。

       

      以下段落复制于上一节内容:

       

      然后,打开bsp_driver_sd.c文件,到BSP_SD_ReadBlocks_DMA函数中(186行附近),在

       if (HAL_SD_ReadBlocks_DMA(&hsd1, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK)

        {

          sd_state = MSD_ERROR;

        }

      上方添加以下代码:

      if(SD_DMAConfigRx(&hsd1) != HAL_OK)
      {
      		return MSD_ERROR;
      }
      

      在BSP_SD_WriteBlocks_DMA(214行附近),在

      if (HAL_SD_WriteBlocks_DMA(&hsd1, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK)

        {

          sd_state = MSD_ERROR;

        }

      上方添加以下代码:

      if(SD_DMAConfigTx(&hsd1) != HAL_OK)
      {
      		return MSD_ERROR;
      }
      

      5、编译测试源码,到此全部教程结束。
       


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月23日