IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 学习 stm32 FATFS 系统文件函数使用和学习查看说明以及常用函数例程 -> 正文阅读

[嵌入式]学习 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 方便与自己的工作。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:12:15  更:2022-09-24 21:14:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 12:11:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码