STM32CubeMX教程28 SDIO - 使用FatFs文件系统读写SD卡

这篇具有很好参考价值的文章主要介绍了STM32CubeMX教程28 SDIO - 使用FatFs文件系统读写SD卡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、准备材料

正点原子stm32f407探索者开发板V2.4

STM32CubeMX软件(Version 6.10.0)

keil µVision5 IDE(MDK-Arm)

ST-LINK/V2驱动

野火DAP仿真器

XCOM V2.6串口助手

2、实验目标

使用STM32CubeMX软件配置STM32F407开发板SDIO使用FatFs中间件读写4线SD卡,并实现以轮询方式读写SD卡或以DMA方式读取SD卡

3、FatFs轮询读取SD卡流程

3.0、前提知识

FatFs文件系统相关知识请读者阅读STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验”3.0、前提知识“、"3.2.1、外设初始化调用流程"和"3.2.3、添加其他必要代码"三个小节内容

SD卡及SDIO接口相关知识请读者阅读STM32CubeMX教程27 SDIO - 读写SD卡实验”3.0、前提知识“小节内容

3.1、CubeMX相关配置

3.1.0、工程基本配置

打开STM32CubeMX软件,单击ACCESS TO MCU SELECTOR选择开发板MCU(选择你使用开发板的主控MCU型号),选中MCU型号后单击页面右上角Start Project开始工程,具体如下图所示

开始工程之后在配置主页面System Core/RCC中配置HSE/LSE晶振,在System Core/SYS中配置Debug模式,具体如下图所示

详细工程建立内容读者可以阅读“STM32CubeMX教程1 工程建立”

3.1.1、时钟树配置

按照STM32CubeMX教程27 SDIO - 读写SD卡实验配置,主锁相环参数Q配置为7,48MHz时钟频率配置为48MHz,其余时钟频率均设置为其能达到的最高频率,具体如下图所示

3.1.2、外设参数配置

本实验需要初始化开发板上WK_UP、KEY2、KEY1和KEY0用户按键,具体配置步骤请阅读“STM32CubeMX教程3 GPIO输入 - 按键响应”

本实验需要初始化USART1作为输出信息渠道,具体配置步骤请阅读“STM32CubeMX教程9 USART/UART 异步通信”

本实验对SDIO的初始化配置与上一实验STM32CubeMX教程27 SDIO - 读写SD卡3.1小节一致,无需做任何修改,只需要增加本实验需要的中间件FatFs即可

单击Pinout & Configuration页面左边功能分类栏目最下面的Middleware and SoftwarePacks,单击其中FatFs,在右侧模式设置中选择SD卡,下方的Configuration中参数大多保持默认即可,需要使用到的时候可以再修改

对Set Defines页面的参数不理解的读者,请阅读STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验"3.1.2、外设参数配置"小节,这里只需将 CODE_PAGE 参数配置为简体中文即可,具体配置如下图所示

在Advanced Settings配置页面中,参数 SDIO instance 只可选SDIO,无SPI选项,因为STM32F407的SDIO接口不支持SPI;当SDIO配置了DMA时,如果希望FatFs使用SDIO的DMA,那么可以将参数 Use dma template 配置为Enable;参数 BSP code for SD 不可选,只能为通用模式

在Platform Settings配置页面中,需要配置SD卡的插入检测引脚 Detect SDIO ,如果不配置该参数,则默认认为SD卡插在SD卡槽中,并且在生成工程代码时也会出现警告,这里由于硬件上并不支持插入检测因此并未配置该选项,警告内容如下图所示

3.1.3、外设中断配置

FatFs轮询读取SD卡无需配置任何中断

3.2、生成代码

3.2.0、配置Project Manager页面

单击进入Project Manager页面,在左边Project分栏中修改工程名称、工程目录和工具链,然后在Code Generator中勾选“Gnerate peripheral initialization as a pair of 'c/h' files per peripheral”,最后单击页面右上角GENERATE CODE生成工程,具体如下图所示

详细Project Manager配置内容读者可以阅读“STM32CubeMX教程1 工程建立”实验3.4.3小节

3.2.1、外设初始化调用流程

SDIO外设初始化调用流程请读者阅读STM32CubeMX教程27 SDIO - 读写SD卡实验对应小节

FatFs文件系统初始化调用流程请阅读STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验对应小节

在之前STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验中笔者提到过,对于Extemal SRAM、SD Card和USB Disk这三种固定类型的存储,则无需用户在App文件夹和Target文件夹中重新实现FatFs的底层IO读写等操作函数,CubeMX生成的工程代码中会自动实现

将本实验生成的工程代码与STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验做对比,可以发现,FatFs在Target目录下多生成了一个名为bsp_driver_xxx.c的文件,如下图所示

该bsp_driver_xxx.c文件就是将对应内存设备底层读写等操作函数进行了封装,同时在sd_diskio.c文件中,本该在移植FatFs时由用户自己手动实现的初始化、状态、读/写和IO控制等函数也被直接调用了bsp_driver_xxx.c里的函数进行了自动实现,无需用户的任何操作,极为方便

这部分实现的原始代码读者可以自行生成工程查看,也可以和STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验中笔者手动实现的几个函数做对比,更加容易发现其中共性

3.2.2、外设中断调用流程

FatFs轮询读取SD卡无配置任何中断

3.2.3、添加其他必要代码

STM32CubeMX工程生成工程代码后,读者应注意手动修改MX_SDIO_SD_Init()函数中SD卡数据总线宽度从默认的4位手动修改为1位,否则SD卡将初始化失败

在生成的工程代码中增加使用FatFs库中API进行文件操作的函数,包括挂载文件系统、显示SD卡信息、读/写TXT文件、获取文件信息、扫描文件列表和删除文件等函数,笔者将其封装在了file_operate.c / file_operate.h文件中,具体的源代码如下所示

file_operate.c文件

与STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验中实现的file_operate.c文件一致,除了测试写的函数FatFs_WriteTXTFile()中写入SD卡的内容修改为了“Line1: Hello, FatFs***\n”

file_operate.h文件

与STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验中实现的file_operate.h文件一致,除了下面三个宏定义需要修改为本实验的SD卡相关内容,修改内容如下所示

/*定义自己的存储设备*/
/*用户存储设备扇区字节数*/
#define User_Sector 512
/*用户存储设备FatFs对象*/
#define User_FatFs 	SDFatFS
/*用户存储设备卷路径*/
#define User_SDPath SDPath

向工程中添加.c/.h文件的步骤请阅读“STM32CubeMX教程19 I2C - MPU6050驱动”实验3.2.3小节

在main.c文件中添加 ”file_operate.h“ 头文件,然后在主函数 main() 中添加文件系统挂载函数及按键控制逻辑函数,具体源代码与STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验中实现的一模一样,无需任何修改

4、烧录验证

烧录程序,开发板上电后会尝试在SD卡上挂载文件系统,挂载成功后会输出读取到的SD卡的信息,接下来按照下面几个步骤使用FatFs文件系统对SD卡进行读写等测试

  1. 按下开发板上的WK_UP按键,扫描SD卡根目录下所有文件,并通过串口将文件列表输出
  2. 按下开发板上的KEY2按键,在SD卡根目录创建一个”test.txt“文件,将一个字符串”Line1: Hello, FatFs***“写入该文件中,该字符串大小为24个字节(该字符串中有2个空格,末尾包括一个’\n‘和一个‘\0')
  3. 按下开发板上的KEY1按键,读取SD卡根目录下名为”test.txt“的文件,将其中的内容通过串口输出,然后读取该文件的信息(大小,属性,名称),并通过串口输出
  4. 按下开发板上的KEY0按键,删除SD卡根目录下名为”test.txt“的文件

整个实验过程串口具体的输出情况如下图所示

5、FatFs DMA读写SD卡流程简述

5.1、CubeMX相关配置

参考上一实验STM32CubeMX教程27 SDIO - 读写SD卡的”6.1、CubeMX相关配置“小节对SDIO的DMA进行配置,具体如下图所示

在System Core/NVIC中勾选SDIO全局中断、DMA2 stream3 全局中断和 DMA2 stream6 全局中断,然后选择合适的中断优先级即可,如下图所示

最后只需在FatFs的Configuration页面Advanced Settings选项卡中将参数 Use dma template 修改为Enable即可,具体如下图所示

5.2、生成代码

修改STM32CubeMX工程重新生成工程代码后,读者应注意再次手动修改MX_SDIO_SD_Init()函数中SD卡数据总线宽度从默认的4位手动修改为1位

除了上述修改外,在轮询读取SD卡基础上生成的代码无需做任何改动,可以直接编译后烧录到开发板上,程序应该直接可以运行,不需要额外添加任何代码

启用SDIO的DMA之后,对应生成的bsp_driver_xxx.c文件中所有的以轮询方式读写等操作SD卡的底层驱动函数都将被相应的替换为以DMA的方式对SD卡进行读写等操作的底层驱动函数,如下图所示以sd_diskio.c文件中的读函数为例简单展示区别

5.3、烧录验证

FatFs DMA读写SD卡的实验现象与FatFs 轮询读取SD卡的实验现象一致,只不过底层SDIO读写SD卡的方式由轮询读写修改为了以DMA方式的读写,对上层FatFs应用无任何影响

6、常用函数

请读者阅读STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写实验 ”常用函数“ 小节

参考资料

STM32Cube高效开发教程(高级篇)文章来源地址https://www.toymoban.com/news/detail-825376.html

到了这里,关于STM32CubeMX教程28 SDIO - 使用FatFs文件系统读写SD卡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX教程27 SDIO - 读写SD卡

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 逻辑分析仪nanoDLA 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 SDIO读写4线SD卡,实现轮询方式读写SD卡、以中断方式读取SD卡和以DMA方式读取SD卡 安全数码

    2024年02月19日
    浏览(58)
  • 【STM32】文件系统FATFS与Flash的初步使用

    简介可以不看,直接看移植步骤 文件系统是介于应用层和底层间的模糊层。底层提供API,比如说使用SDIO或者SPI等读写一个字节。文件系统把这些API组合包装起来,并且提供一些列函数,我们可以使用这些函数进行更进一步的对存储设备的操作。 底层:操作单片机外设,读写

    2024年02月10日
    浏览(23)
  • [STM32] - STM32F407VET6使用STM32CubeMX配置FatFs,以及挂载时返回03错误码问题的解决

    为测试新买的开发板TF卡读写是否正常,使用STM32CubeMX(后简称CubeMX)进行代码构建。生成代码后烧录测试,发现在挂载TF卡时无法成功,返回值为错误3( FR_NOT_READY )。经排查后问题已解决,遂记录配置过程供大家参考,并讲解挂载时返回错误3的解决方式。 ①为了输出TF卡(

    2024年02月22日
    浏览(51)
  • 019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识

    019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识 最近工作比较忙,没时间摸鱼学习,抽空学点就整理一点笔记。 1、文件系统 在之前学习Flash的时候,可以调用 SPI_FLASH_BufferWrite 函数,将数据内容写入到Flash芯片中,需要使用的时候,可以再从Flash中读取出来,但是

    2024年02月15日
    浏览(25)
  • STM32FATFS文件系统移植

    FATFS文件系统是一个用于在微控制器上运行的开源文件系统,支持FAT/FATFS、NTFS、exFAT等主流文件系统,且一直保持更新。在此以FatFs官网最新版本v0.15进行移植。 FATFS源码在其官网就有下载链接,下载后解压即可,官网页面如图1所示: 图1.FATFS官网页面 将其翻至最下面,就可以

    2024年03月09日
    浏览(36)
  • STM32的FATFS文件系统

    一、FATFS简介   文件系统是为了存储和管理数据,而在存储介质建立的一种组织结构,这些结构包括操作系统引导区、目录和文件。常见的 windows 下的文件系统格式包括 FAT32、NTFS、exFAT。在使用文件系统前,要先对存储介质进行格式化。格式化先擦除原来内容,在存储介质

    2024年02月11日
    浏览(24)
  • STM32CubeMX+FATFS+FREERTOS读写U盘

    软件:STM32CubeMX V6.6.1 、 KEIL5 V5.29 硬件:STM32F429ZET6 USB_OTG_FS:PA11/PA12引脚 USART1:PA9/PA10,方便输出调试信息 1)SYS下载方式选择SW方式,因为要使用FREERTOS,提前将时钟源修改为TIM7(其他定时器也可以) 2) RCC设置,选择高速外部晶振HSE(根据具体硬件选择) 3)USART1设置,方便输出调

    2024年01月18日
    浏览(36)
  • STM32使用HAL库SPI驱动W25Q16 使用FATFS文件系统+USB虚拟U盘

    使用stm32F407驱动W25Q16,使用FATFS文件系统,USB虚拟优盘功能,W25Q16一共512个扇区,其中128作为flash存取相关数据,其他的384个扇区用作虚拟U盘使用 W25Q16.c W25Q16.h user_diskio.c usbd_storage_if.c main.c STORAGE_BLK_NBR 表示扇区数量 STORAGE_BLK_SIZ 表示扇区大小 电脑上的U盘容量跟这两个参数密

    2024年04月28日
    浏览(28)
  • STM32挂载SD卡基于Fatfs文件系统读取文件信息

    🔖本例程基于正点原子标准库修改而来。 📍FatFs 相关API函数网站: http://elm-chan.org/fsw/ff/00index_e.html 🌴分别测试了SD卡模块以及Mini SD卡模块。 🌿STM32f1单片机和TF卡、SD卡连接采用SPI通讯方式。 SD模块: Mini SD卡模块: 👉🏻如果需要采用SDIO驱动方式,那么需要采用下面这种

    2024年02月10日
    浏览(28)
  • STM32-基本知识梳理8-FATFS文件系统移植

    一、基本概念 1,为什么需要文件系统? 在没有文件系统的存储器中,一般通过手工记录,那些变量存放在那些位置,很难有系统的管理 难以记录有效数据的位置 、难以确定存储介质的剩余空间、 不明确应以何种格式来解读数据 加入文件系统后,就可以引导区、目录等对内

    2024年02月03日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包