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

【经验分享】STM32F7+STM32CubeMX5.21+SD+FATFS

[复制链接]
STMCU小助手 发布时间:2021-12-17 12:05
STM32F7+STM32CubeMX5.21+SD+FATFS
1、STM32CubeMX配置
时钟配置


20200820170455578.png


SDMMC配置
  Connectivity->SDMMC1
    MODE选择: SD 4 bits Wide bus
    NVIC Setting
20200820170641524.png


  DMA Setting设置DMA读写。

20200820170709472.png


  修改CDMMC传输时钟分频。
  /* SDMMC Data Transfer Frequency (25MHz max) */
  APB2=108MHZ, 108/6=18MHZ。频率过高读写SD卡是会出现FR_DISK_ERR错误。

20200820170836459.png


  其他默认

20200820170900683.png


FATFS配置
  Middleware->FATFS
  在FATFS配置中选择简体中文字GBK编码支持中文,使能长文件名,缓存存储在堆(STACK)中。
  Set->Defines修改两项
  其他默认

20200820171411382.png


  点击菜单栏中Project->Setting修改堆的大小,堆设置为0x1000。

20200820171503585.png


2、main函数增加FASFS相关测试代码段。
  挂载工作区时,调用bsp_driver_sd.c函数BSP_SD_Init()进行SD卡初始化设置。

  1. /**
  2.   ******************************************************************************
  3.   * @file           : main.c
  4.   * @brief          : Main program body
  5.   ******************************************************************************
  6.   * @attention
  7.   *
  8.   * <h2><center>© Copyright (c) 2020 STMicroelectronics.
  9.   * All rights reserved.</center></h2>
  10.   *
  11.   * This software component is licensed by ST under Ultimate Liberty license
  12.   * SLA0044, the "License"; You may not use this file except in compliance with
  13.   * the License. You may obtain a copy of the License at:
  14.   *                             <a href="http://www.st.com/SLA0044" target="_blank">www.st.com/SLA0044</a>
  15.   *
  16.   ******************************************************************************
  17.   */
  18. /* USER CODE END Header */

  19. /* Includes ------------------------------------------------------------------*/
  20. #include "main.h"
  21. #include "dma.h"
  22. #include "fatfs.h"
  23. #include "sdmmc.h"
  24. #include "gpio.h"

  25. /* Private function prototypes -----------------------------------------------*/
  26. void SystemClock_Config(void);

  27. HAL_SD_CardInfoTypeDef  SDCardInfo;

  28. FRESULT ret_sd;

  29. uint8_t rtext[100];                     /* File read buffers */

  30. /**
  31.   * @brief  The application entry point.
  32.   * @retval int
  33.   */
  34. int main(void)
  35. {
  36.   /* USER CODE BEGIN PV */
  37.         /* Private variables ---------------------------------------------------------*/
  38.         BYTE work[_MAX_SS];
  39.         
  40.         FATFS fs;                 // Work area (file system object) for logical drive
  41.         FIL file;                  // file objects

  42.         uint32_t byteswritten;                /* File write counts */
  43.         uint32_t bytesread;                   /* File read counts */

  44.         uint8_t wtext[] = "STM32 working with FatFs Test"; /* File write buffer */
  45.         
  46.         char filename[] = "STM32cube.txt";
  47.         /* USER CODE END PV */

  48.         /* Enable I-Cache---------------------------------------------------------*/
  49.         SCB_EnableICache();

  50.         /* Enable D-Cache---------------------------------------------------------*/
  51.         SCB_EnableDCache();

  52.         /* MCU Configuration--------------------------------------------------------*/

  53.         /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  54.         HAL_Init();

  55.         /* Configure the system clock */
  56.         SystemClock_Config();

  57.         /* Initialize all configured peripherals */
  58.         MX_DMA_Init();                        //开启DMA相关时钟、设置中断优先级
  59.         MX_SDMMC1_SD_Init();        //设置SD初始化变量,并未进行初始化
  60.         MX_FATFS_Init();                //链接兼容的diskio驱动程序并增加活动数量链接驱动程序,创建盘符

  61.         /*----------------------- 文件系统测试:挂载测试 -----------------------------*/
  62.         ret_sd = f_mount(&fs, "0:", 1);        //挂载工作区
  63.         /* 如果没有文件系统就格式化创建创建文件系统 */
  64.         if(ret_sd == FR_NO_FILESYSTEM)
  65.         {
  66.                 /* 格式化 */
  67.                 ret_sd=f_mkfs("0:", FM_FAT, 0, work, sizeof(work));                                                        
  68.                
  69.                 if(ret_sd == FR_OK)
  70.                 {
  71.                         /* 格式化后,先取消挂载 */
  72.                         ret_sd = f_mount(NULL,"0:",1);                        
  73.                         /* 重新挂载        */                        
  74.                         ret_sd = f_mount(&fs,"0:",1);
  75.                 }
  76.                 else
  77.                 {
  78.                         //格式化失败
  79.                         while(1);
  80.                 }
  81.         }
  82.         else if(ret_sd!=FR_OK)
  83.         {
  84.                 //SD卡挂载文件系统失败
  85.                 //可能原因:SD卡初始化不成功
  86.                 while(1);
  87.         }

  88.         /*----------------------- 文件系统测试:写测试 -----------------------------*/
  89.         /* 打开文件,如果文件不存在则创建它 */
  90.         ret_sd = f_open(&file, "STM32.txt", FA_CREATE_ALWAYS | FA_WRITE );
  91.         if ( ret_sd == FR_OK )
  92.         {
  93.                 //打开/创建FatFs读写测试文件.txt文件成功,向文件写入数据。/
  94.                 /* 将指定存储区内容写入到文件内 */
  95.                 ret_sd=f_write(&file, wtext,sizeof(wtext),&byteswritten);

  96.                 /* 不再读写,关闭文件 */
  97.                 f_close(&file);
  98.         }

  99.         
  100.         /*------------------- 文件系统测试:读测试 ------------------------------------*/
  101.         ret_sd = f_open(&file, "STM32.txt", FA_OPEN_EXISTING | FA_READ);         
  102.         if(ret_sd == FR_OK)
  103.         {
  104.                 //打开文件成功
  105.                 ret_sd = f_read(&file, rtext, sizeof(rtext), &bytesread);                 
  106.         }

  107.         /* 不再读写,关闭文件 */
  108.         f_close(&file);        

  109.         /* 不再使用文件系统,取消挂载文件系统 */
  110.         f_mount(NULL,"0:",1);
  111.         
  112.         HAL_SD_GetCardInfo(&hsd1, &SDCardInfo);

  113.         while (1)
  114.         {
  115.                 /* USER CODE END WHILE */

  116.                 /* USER CODE BEGIN 3 */
  117.         }
  118.   /* USER CODE END 3 */
  119. }

复制代码


收藏 评论0 发布时间:2021-12-17 12:05

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版