学习 stm32 FATFS 系统文件函数使用和学习查看说明以及常用函数例程

学习 stm32 FATFS 文件的日常操作,本次通过SDIO模式进行存储卡的设备连接,进行数据的读取操作。之前介绍过一起SD卡的读取操作,
stm32 SD(SDSC)卡的学习与SPI 模式应用(卡槽介绍),无论SPI模式或者SDIO模式都是设备的连接识别。

第一步骤
模式1
SPI初始化SDK ,连接SD卡
stm32 SD(SDSC)卡的学习与SPI 模式应用(卡槽介绍)
模式2
SDIO初始化SDK ,连接SD卡
stm32 SD(SDSC)卡的学习SDIO 模式连接SD卡

第二步骤,部署移植FATFS文件系统
学习 stm32 FATFS文件系统基础知识与示例应用

部署的项目结构图如下
在这里插入图片描述
 00history.txt 介绍了 FatFs 的版本更新情况。
  00readme.txt 说明了当前目录下 diskio.c 、 diskio.h、 ff.c、 ff.h、 integer.h 的功能。
  diskio.c 文件是 FatFs 移植最关键的文件,它为文件系统提供了最底层的访问 SPI Flash芯片的方法, FatFs 有且仅有它需要用到与 SPI Flash 芯片相关的函数。
  diskio.h 定义了FatFs 用到的宏,以及 diskio.c 文件内与底层硬件接口相关的函数声明。

源码文件功能简介如下:
  integer.h:文件中包含了一些数值类型定义。
  diskio.c:包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加底层驱动函数。
  ff.c:FatFs 核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的函数,利用这些函数实现文件的读写。
  cc936.c:本文件在 option 目录下,是简体中文支持所需要添加的文件,包含了简体中文的 GBK 和 Unicode 相互转换功能函数。
  ffconf.h:这个头文件包含了对 FatFs 功能配置的宏定义,通过修改这些宏定义就可以裁剪 FatFs 的功能。如需要支持简体中文,需要把 ffconf.h 中的_CODE_PAGE的宏改成 936 并把上面的 cc936.c 文件加入到工程之中。

下面是FATFS文件系统 0.11 版本的
链接:https://pan.baidu.com/s/1O6mXOkEvxQYMUuchSx4oWA
提取码:464c
–来自百度网盘超级会员V2的分享

关于FATFS 文件系统的配置后面会单独整理一下。

第三步骤,是本次的SD卡的操作
我们自己照一张sd,提前存储几个文件夹以及文件,方便自己去读卡操作。会列举一个函数的使用和查看参数手册,方便我们的理解和使用、

下面是常用的函数,回去单独使用,自己整理 方便理解

在这里插入图片描述
单一函数的使用例如下图所示例如f_open [英文手册打开谷歌浏览器,右键直接翻译中文方便阅读]

在这里插入图片描述
也可以在ff.c文件中查看该函数的参数以及说明如下图
在这里插入图片描述
选择模式
在这里插入图片描述

返回值

在这里插入图片描述
在这里插入图片描述

mode 的选择方式有多种根据需求去使用
FA_READ 指定对文件的读取权限。可以从文件中读取数据。
FA_WRITE 指定对文件的写访问权。数据可以写入文件。结合FA_READ进行读写访问。
FA_OPEN_EXISTING 打开一个文件。如果文件不存在,该函数将失败。(默认)
FA_CREATE_NEW 创建一个新文件。如果文件存在,该函数将失败并显示 FR_EXIST 。
FA_CREATE_ALWAYS 创建一个新文件。如果文件存在,它将被截断并覆盖。
FA_OPEN_ALWAYS 如果文件存在,则打开该文件。如果没有,将创建一个新文件。
FA_OPEN_APPEND 与FA_OPEN_ALWAYS相同,但读/写指针设置在文件末尾。

结合上面几张图,已经了解了用法操作。使用函数,设置参数,确定返回值

下面是我们在使用过程中如何去使用,上代码

	FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode);			/* Open or create a file */打开或创建一个文件
	使用中我们可以分解参数
	该函数有返回值吗,需接受,
	FIL* fp  需要一个指针类型
	path     文件地址路径
	mode     选择操作的模式

	示例如下
	FIL fii; 定义指针fii
	FRESULT res; //定义返回值
	int main(){
		//打开文件或者创建文件
		res = f_open (&fii, "0:/kugou/log", FA_CREATE_ALWAYS);				/* Open or create a file */
		上下两种写法意义是一样的
		res = f_open (&fii, "0:/kugou/log", 0x08);				/* Open or create a file */	
		//支持或 "|" 操作如下说是,
		//加入写操作,文件既可以读和写入内容
		res = f_open (&fii, "0:/kugou/log", FA_CREATE_ALWAYS|FA_WRITE);				/* Open or create a file */
		res = f_open (&fii, "0:/kugou/log", 0x08|0x0);				/* Open or create a file */	
		if(res==FR_OK)
		{
		//下面是返回值
			FR_OK = 0,				/* (0) Succeeded */
			FR_DISK_ERR,			/* (1) A hard error occurred in the low level disk I/O layer */
			FR_INT_ERR,				/* (2) Assertion failed */
			FR_NOT_READY,			/* (3) The physical drive cannot work */
			FR_NO_FILE,				/* (4) Could not find the file */
			FR_NO_PATH,				/* (5) Could not find the path */
			FR_INVALID_NAME,		/* (6) The path name format is invalid */
			FR_DENIED,				/* (7) Access denied due to prohibited access or directory full */
			FR_EXIST,				/* (8) Access denied due to prohibited access */
			FR_INVALID_OBJECT,		/* (9) The file/directory object is invalid */
			FR_WRITE_PROTECTED,		/* (10) The physical drive is write protected */
			FR_INVALID_DRIVE,		/* (11) The logical drive number is invalid */
			FR_NOT_ENABLED,			/* (12) The volume has no work area */
			FR_NO_FILESYSTEM,		/* (13) There is no valid FAT volume */
			FR_MKFS_ABORTED,		/* (14) The f_mkfs() aborted due to any parameter error */
			FR_TIMEOUT,				/* (15) Could not get a grant to access the volume within defined period */
			FR_LOCKED,				/* (16) The operation is rejected according to the file sharing policy */
			FR_NOT_ENOUGH_CORE,		/* (17) LFN working buffer could not be allocated */
			FR_TOO_MANY_OPEN_FILES,	/* (18) Number of open files > _FS_SHARE */
			FR_INVALID_PARAMETER	/* (19) Given parameter is invalid */	
		}
	}

官方例句如下

/* 读取一个文本文件并显示它 */

FATFS FATF;   /* 逻辑驱动器的工作区(文件系统对象) */

int 主要(无效)
{
    FIL 文件;        /* 文件对象 */ 
    char line[100]; /* 行缓冲区 */ 
    FRESULT fr;     /* FatFs 返回码 */


    /* 给默认驱动器一个工作区 */
    f_mount(&FatFs, "", 0);

    /* 打开一个文本文件 */ 
    fr = f_open (&fil, "message.txt", FA_READ);
    如果(fr)返回(int)fr;

    /* 读取每一行并显示它 */
    while (f_gets(line, sizeof line, &fil)) {
        printf();
    }

    /* 关闭文件 */
    f_close(&fil);

    返回0}

示例函数分享
f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* 将数据写入文件*/

	FRESULT f_write (
	  FIL* fp ,           /* [IN] 指向文件对象结构的指针 */ 
	  const void* buff , /* [IN] 指向要写入的数据的指针 */ 
	  UINT btw ,          /* [IN] 要写入的字节数 * / 
	  UINT* bw           /* [OUT] 指向变量的指针,返回写入的字节数 */
	);
	示例如下
	FIL fii;
	FRESULT resback;
	UINT back_con;
	res = f_write (&fii, "test stm32f103x hello", 100, &back_con);	/* Write data to a file */

f_close (FIL* fp); /* 关闭一个打开的文件*/

	FRESULT f_close (
	  FIL* fp      /* [IN] 指向文件对象的指针 */
	);		
	示例如下
	res = f_close (&fii);  

f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* 从文件中读取数据 */

	FRESULT f_read (
	  FIL* fp ,      /* [IN] 文件对象 */ 
	  void* buff ,   /* [OUT] 存储读取数据的缓冲区 */ 
	  UINT btr ,     /* [IN] 要读取的字节数 */ 
	  UINT* br      /* [ OUT] 读取的字节数 */
	);

	FIL fii;
	FRESULT resback;
	UINT back_con;
	char buff[100];	
	
	示例如下
	f_read (&fii, buff, 100,&back_con);			/* Read data from a file */

简单说明一下 读,写 打开,关闭等操作,
下面即使所有函数
FatFs 为应用程序提供了各种文件系统功能,如下所示。

文件访问
f_open - 打开/创建一个文件
f_close - 关闭一个打开的文件
f_read - 从文件中读取数据
f_write - 将数据写入文件
f_lseek - 移动读/写指针,扩展大小
f_truncate - 截断文件大小
f_sync - 刷新缓存数据
f_forward - 将数据转发到流
f_expand - 为文件分配一个连续的块
f_gets - 读取一个字符串
f_putc - 写一个字符
f_puts - 写一个字符串
f_printf - 写一个格式化的字符串
f_tell - 获取当前读/写指针
f_eof - 测试文件结束
f_size - 获取大小
f_error - 测试错误
目录访问
f_opendir - 打开一个目录
f_closedir - 关闭一个打开的目录
f_readdir - 读取目录项
f_findfirst - 打开一个目录并读取第一个匹配的项目
f_findnext - 读取下一个匹配的项目
文件和目录管理
f_stat - 检查文件或子目录是否存在
f_unlink - 删除文件或子目录
f_rename - 重命名/移动文件或子目录
f_chmod - 更改文件或子目录的属性
f_utime - 更改文件或子目录的时间戳
f_mkdir - 创建一个子目录
f_chdir - 更改当前目录
f_chdrive - 更改当前驱动器
f_getcwd - 检索当前目录和驱动器
卷管理和系统配置
f_mount - 注册/取消注册卷的工作区
f_mkfs - 在逻辑驱动器上创建一个 FAT 卷
f_fdisk - 在物理驱动器上创建分区
f_getfree - 获取卷上的可用空间
f_getlabel - 获取卷标
f_setlabel - 设置卷标
f_setcp - 设置活动代码页

期待大家的使用与问题讨论。
总结,学会部署fatfs 文件系统,以及使用该系统的函数api 方便与自己的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闰土小蒋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值