STM32挂载SD卡基于Fatfs文件系统读取文件信息

这篇具有很好参考价值的文章主要介绍了STM32挂载SD卡基于Fatfs文件系统读取文件信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32挂载SD卡基于Fatfs文件系统读取文件信息


  • 🔖本例程基于正点原子标准库修改而来。

  • 📍FatFs 相关API函数网站:http://elm-chan.org/fsw/ff/00index_e.html

  • 🌴分别测试了SD卡模块以及Mini SD卡模块。

  • 🌿STM32f1单片机和TF卡、SD卡连接采用SPI通讯方式。

  • SD模块:
    STM32挂载SD卡基于Fatfs文件系统读取文件信息

  • Mini SD卡模块:
    STM32挂载SD卡基于Fatfs文件系统读取文件信息

  • 👉🏻如果需要采用SDIO驱动方式,那么需要采用下面这种引出D0 和D1引脚的模块。
    STM32挂载SD卡基于Fatfs文件系统读取文件信息

  • 🍁2GBSD卡内容读取:
    STM32挂载SD卡基于Fatfs文件系统读取文件信息

  • 120MB的读取TF卡读取:
    STM32挂载SD卡基于Fatfs文件系统读取文件信息文章来源地址https://www.toymoban.com/news/detail-495323.html

🛠接线说明

TF卡/SD卡 ----STM32F1
CS  ------  PA3
SCK ------ PA5
MOSI ------ PA7
MISO ------ PA6

📑fatfs文件系统读取目录文件说明

  • 🌿如果仅仅是读取根目录下的文件,只需包含fatfs文件系统下的fattester.h头文件,调用mf_scan_files(u8 * path)函数。
  • 🌿遍历所有目录文件,调用scan_files(char* path)

📝主程序代码

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
//#include "lcd.h"
#include "key.h"
#include "usmart.h"
#include "malloc.h"
#include "MMC_SD.h"
#include "ff.h"
#include "exfuns.h"
#include "fattester.h"
#include "String.h"

FRESULT scan_files(char* path)
{
    FRESULT res; //定义结果对象
    DIR dir; //定义目录对象

    UINT i; //定义变量
    static FILINFO fno; //定义静态文件信息结构对象
    res = f_opendir(&dir, (const TCHAR*)path);  //打开目录,返回状态 和 目录对象的指针
    if(res == FR_OK) //打开成功
    {
        for(;;) //遍历
        {
            res = f_readdir(&dir, &fno); //读取目录,返回状态 和 文件信息的指针
            if(res != FR_OK || fno.fname[0] == 0)
                break; //若打开失败 或 到结尾,则退出
            if(fno.fattrib & AM_DIR) //判断是文件夹
            {
                i = strlen(path); //获取原目录长度
                sprintf(&path[i], "/%s", fno.fname); //将新目录添加在原目录后面
                printf("目录::%s \r\n", path);
                res = scan_files(path); //将新目录进行递归调用
                if(res != FR_OK) break; //打开失败则退出
                path[i] = 0;
            }
            else
            {
                printf(":%s/%s \r\n", path, fno.fname); //是文件
            }
        }
    }
    else
    {
        printf("失败 - %s", &res); //打开失败
    }
    f_closedir(&dir); //关闭目录
    return res; //返回状态
}

int main(void)
{
    u32 total, free;
    u8 Path1[] = "0:";
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
    delay_init();	    	 //延时函数初始化
    uart_init(9600);	 	//串口初始化为9600
    exfuns_init();		//为fatfs相关变量申请内存
//	LCD_Init();			//初始化液晶
    LED_Init();         //LED初始化
    usmart_dev.init(72);
    mem_init();			//初始化内存池
    while(SD_Initialize())					//检测SD卡
    {
        delay_ms(200);
        LED0 = !LED0; //PA8闪烁
        printf("SD NO Fount! \r\n");
    }
    exfuns_init();							//为fatfs相关变量申请内存
    f_mount(fs[0], " ", 0); 		//挂载SD、TF卡,第一个形参必须是fs[0],第三个形参可以是0或1
//    f_mount(fs[1], "1:", 1); 	//挂载FLASH.
    while(exf_getfree((u8*)"0", &total, &free))	//得到SD卡的总容量和剩余容量
    {
        delay_ms(100);
        LED1 = !LED1; //PD2闪烁
        printf("SD Fatfs Error! \r\n");
    }
    printf("FATFS OK!\r\n");
    printf("SD Total Size:%d MB SD  Free Size:%d\r\n", total >> 10, free >> 10);

    scan_files((char*)Path1);//遍历所有目录中的文件
    mf_scan_files(Path1);//遍历根目录下的所有文件
    while(1)
    {
        delay_ms(500);
        LED1 = !LED1;
//        printf("SD Total Size:%d MB SD  Free Size:%d\r\n", total >> 10, free >> 10);
    }
}

📚程序源码

链接:https://pan.baidu.com/s/1WWyv9S1G5ZWqmhNNMX_ayA 
提取码:a5ro

到了这里,关于STM32挂载SD卡基于Fatfs文件系统读取文件信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32的FATFS文件系统

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

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

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

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

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

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

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

    2024年02月10日
    浏览(21)
  • 【STM32】FATFS文件系统f_mkfs卡死

    最近调试FATFS,通过STM32对SPI Flash进行读写操作。昨天晚上调通了,今天早上再调试,发现f_mount返回FR_NOFILESYSTEM。 依据网上所说,对磁盘格式化f_mkfs,卡死在FATFS库的ff.c-f_mkfs()的某个for循环里。 f_mkfs卡死的for循环代码位置 最后对SPI Flash进行了全片擦除命令,之后就可以正常

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

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

    2024年02月22日
    浏览(48)
  • STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 使用FatFs中间件通过SPI通信协议对W25Q128芯片进行读写等操作 关于STM32F407使用SPI通信协议对W25Q128 FLASH芯片读写

    2024年02月19日
    浏览(37)
  • STM32CubeMX教程29 USB_HOST - 使用FatFs文件系统读写U盘

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 USB_OTG_FS为工作在Mass Storage Host Class(大容量存储主机类)模式下的USB_HOST(USB主机),并使用FatFs文件系统对

    2024年02月19日
    浏览(31)
  • 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)
  • STM32H7使用FileX库BUG,SD卡挂载失败

    使用STM32H7+ThreadX+FileX,之前使用swissbit牌的存储卡可正常使用,最近项目用了金士顿的存储卡,发现无法挂载文件系统。 调试过程发现,关闭D-Cache可以挂载使用exfat文件系统。 FileX对SD卡读写接口全部位于fx_stm32_sdio_driver.c中,查看该文件可以发现在读写函数中已经考虑到使用

    2024年04月28日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包