GD32F4开发 -- FATFS文件系统

news2024/9/20 23:46:36

一、FATFS源码下载

FatFs - Generic FAT Filesystem Module (elm-chan.org)

在这里插入图片描述

二、移植

打开ffconf.h文件,找到对应宏并按照需求修改

FF_CODE_PAGE:

#define FF_CODE_PAGE	936 //改为936以支持简体中文
/* This option specifies the OEM code page to be used on the target system.
/  Incorrect code page setting can cause a file open failure.
/
/   437 - U.S.
/   720 - Arabic
/   737 - Greek
/   771 - KBL
/   775 - Baltic
/   850 - Latin 1
/   852 - Latin 2
/   855 - Cyrillic
/   857 - Turkish
/   860 - Portuguese
/   861 - Icelandic
/   862 - Hebrew
/   863 - Canadian French
/   864 - Arabic
/   865 - Nordic
/   866 - Russian
/   869 - Greek 2
/   932 - Japanese (DBCS)
/   936 - Simplified Chinese (DBCS)
/   949 - Korean (DBCS)
/   950 - Traditional Chinese (DBCS)
/     0 - Include all code pages above and configured by f_setcp()
*/

FF_USE_LFN:

#define FF_USE_LFN		3 //在HEAP上启用具有动态工作缓冲区的LFN。
/* The FF_USE_LFN switches the support for LFN (long file name).
/
/   0: Disable LFN. FF_MAX_LFN has no effect.
/   1: Enable LFN with static  working buffer on the BSS. Always NOT thread-safe.
/   2: Enable LFN with dynamic working buffer on the STACK.
/   3: Enable LFN with dynamic working buffer on the HEAP.
/

FF_VOLUMES:

#define FF_VOLUMES		2   /* 支持2个磁盘 */
/* Number of volumes (logical drives) to be used. (1-10) */

FF_USE_MKFS:

#define FF_USE_MKFS		1 //允许使用 f_mkfs()函数
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */

FF_USE_FASTSEEK:

#define FF_USE_FASTSEEK	1 //允许使用 fast seek函数
/* This option switches fast seek function. (0:Disable or 1:Enable) */

FF_USE_LABEL:

#define FF_USE_LABEL	1 //允许使用  f_getlabel() 和 f_setlabel()函数
/* This option switches volume label functions, f_getlabel() and f_setlabel().
/  (0:Disable or 1:Enable) */

FF_USE_STRFUNC:

#define FF_USE_STRFUNC	1 //允许使用 f_gets(), f_putc(), f_puts() ,f_printf()函数,不进行LF-CRLF转换。
/* FF_USE_STRFUNC switches string functions, f_gets(), f_putc(), f_puts() and
/  f_printf().
/
/   0: Disable. FF_PRINT_LLI, FF_PRINT_FLOAT and FF_STRF_ENCODE have no effect.
/   1: Enable without LF-CRLF conversion.
/   2: Enable with LF-CRLF conversion.
*/

FF_FS_EXFAT:

#define FF_FS_EXFAT		1 //启用exFAT文件系统
/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable)
/  To enable exFAT, also LFN needs to be enabled. (FF_USE_LFN >= 1)
/  Note that enabling exFAT discards ANSI C (C89) compatibility. */

三、函数

可参看:DSP学习 – Visual Studio 操作

文件访问:

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 - 设置活动代码页

四、测试示例

链接:实验39 FATFS实验
提取码:4fnh
使用FATFS版本为: FatFs R0.14b

自测:

FATFS *fs[FF_VOLUMES];
BYTE My_WorkSpace[ sizeof(BYTE)* (FF_MAX_SS *2 )];
FIL fil;

void test(void)
{
	MKFS_PARM	FormatPar;	
	FormatPar.fmt = FM_FAT32;
				
	exfuns_init(); /* 为fatfs相关变量申请内存 */
	res = f_mount(fs[0], "0:", 1);  /* 挂载SD卡 */

	if(res == FR_NO_FILESYSTEM)
	{
		res = f_mkfs("0:", &FormatPar, My_WorkSpace, sizeof(My_WorkSpace)); /* 格式化FLASH,0: */
		if(res == FR_OK)
		{
			f_mount(NULL,"0:",1); //取消挂载
			res = f_mount(fs[0], "0:", 1);
			if(res == FR_OK)
			{
				f_setlabel((const TCHAR *)"0:TEST");   /* 设置Flash磁盘的名字为:TEST */
			}
			
		}
	}
	else
	{
		res = f_open(&fil,"DJ.txt", FA_CREATE_ALWAYS | FA_WRITE ); //打开文件
		if(res == FR_OK)
		{
			const char Wbuffer[] = " Hello ,My World!";
			UINT bw;
			f_write(&fil, Wbuffer, strlen(Wbuffer) , &bw);
			if (bw != strlen(Wbuffer))
			{
				f_mount(NULL, "0:", 1);//取消挂载
			}
			f_close(&fil);

			res = f_open(&fil,"DJ.txt", FA_OPEN_EXISTING | FA_READ );

			res = f_lseek(&fil,6);

			FRESULT retUSER = f_read(&fil, rtext, sizeof(rtext),&bw);
			if( retUSER != FR_OK)
			{		
				f_close(&fil);
				f_mount(NULL, "0:", 0); //取消挂载
			}

			f_close(&fil);	
			f_mount(NULL,"0:",1); //取消挂载
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Find My资讯|国外外设品牌发布新型素皮护照套,支持苹果Find My功能

外设品牌 Satechi 发布一款采用苹果Find My技术的新型素皮护照套,售价为 59.99 美元。这款新型护照套除了可以存放护照外,还可存放银行卡、信用卡、身份证、登机牌等物品,其最大特性是采用了与苹果 AirTags 相同的技术,内置了可充…

YOLOv9改进策略【Neck】| 有效且轻量的动态上采样算子:DySample

一、本文介绍 本文记录的是利用DySample上采样对YOLOv9的颈部网络进行改进的方法研究。YOLOv9采用传统的最近邻插值的方法进行上采样可能无法有效地捕捉特征的细节和语义信息,从而影响模型在密集预测任务中的性能。DySample通过动态采样的方式进行上采样&#xff0…

Brave编译指南2024 Windows篇:安装depot_tools(三)

1.引言 在编译Brave浏览器的过程中,depot_tools是不可或缺的一部分。这是一组由Chromium项目提供的脚本和工具,用于获取、管理和更新Chromium及其衍生项目的源码。通过depot_tools,开发者可以方便地同步最新的源码版本,并进行项目…

NVD系列语音芯片在报警器中通常应用在哪些场景中

语音芯片在各类场景中应用的最大作用就是进行语音提示和警报提示。本文将对NVD系列语音芯片应用在报警器中的场景。 1.提升电动车的安全性 当电动车遭受震动或异常移动时,报警器会感应到并触发报警装置,通常是通过发出高分贝的声音警报来吸引人们的注意…

基于HTML+JS+CSS+Echarts实现的设备环境监测可视化平台前端整套模板

效果图 基于HTMLJSCSSEcharts实现的设备环境监测可视化平台前端整套模板。可用过修改源码快速完成需求。 源码结构 下载地址

Shell实用功能及文件权限

1、使用命令“cat /etc/named.conf”设置为别名named,然后再取消别名。 设置别名:alias namedcat /etc/named.conf 取消别名:unalias named 2、使用echo命令和输出重定向创建文本文件/root/nn,内容是hello,然后再使用…

C++笔记---list

1. list的介绍 list其实就是就是我们所熟知的链表(双向循环带头结点),但其是作为STL中的一个类模板而存在。 也就是说,list是可以用来存储任意类型数据的顺序表,既可以是内置类型,也可以是自定义类型&…

【目标检测数据集】工具钳子、剪刀、螺丝刀检测数据集3668张3类VOC+YOLO格式

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3668 标注数量(xml文件个数):3668 标注数量(txt文件个数):3668 标注…

安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 系统导航方式默认一般是按键的,如果要改成手势的话,我们来看看用户怎么修改的: 设置=>系统=>手势=>系统导航,在这里进行修改。我们来分析下这个流程,并且将其修改为…

Stage模型UIAbility组件【单任务列表/多任务列表】

什么是多线程 比如你在微信中聊天 突然打开一个小程序 然后查看手机进程 如果一个软件有多个那就是多进程 (目前小编看下来 只有安卓有 苹果看不出来) 进程之间是可以相互跳转的 UIAbility组件可以是单个任务列表或多个任务列表 启动页想用哪个就设置哪个…

《python语言程序设计》2018版第8章第14题金融:信用卡号合法性 利用6.29题

一、之前6.29题我做的代码 这是用数字来进行分辨的 is_txt 4383576018402626 #合法def split_the_data_even(vis_n):current_a1 vis_n // 10000a_t1 vis_n % 10000# print("1th", a_t1)a_t2 current_a1 % 10000# print("2th", a_t2)current_a3 curre…

【自用23.】C++-const数据成员及const成员函数

const数据成员 const数据成员的初始化方式: 使用类内值(C11支持)使用构造函数的初始化列表 (如果同时使用这两种方式,以初始化列表中的值为最终初始化结果) 注意: 不能在构造函数或其他成员…

全新的训练算法:Reflection 70B进入大众的视野

在2024年9月6日,大模型的圈子迎来了一位新成员——Reflection 70B,它横扫了MMLU、MATH、IFEval、GSM8K等知名的模型基准测试,完美超越了GPT-4o,同时也超越了Claude3.5 Sonnet成为了新的大模型之王,Reflection 70B到底是…

Linux: network: esp:收到了重复的包

最近遇到一个问题,是说收到了dup的ESP包。 这个目前还是未解的谜题,不知道到底是谁发的重复包。 但是从wireshark里确实可以看到在相同SPI下,收到了两个序号相同的ESP包。 这个时候,就会触发防火墙的防御机制。下面是一个大模型给出的一个解答(主要介绍的是anti-replay的…

10款企业图纸加密软件大盘点|2024企业图纸加密软件推荐

在数字化时代,企业图纸数据的安全性显得尤为重要。图纸数据往往包含企业的核心技术、设计方案和知识产权,一旦泄露,将对企业造成不可估量的损失。因此,选择一款合适的图纸加密软件,成为企业保护核心资产的重要手段。以…

ComsolMatlab 互阻抗法计算多孔材料吸声(背腔无反射)

互阻抗法是一种用于计算多孔材料吸声性能的方法。它基于材料的声学参数来预测其吸声特性。互阻抗法的基本原理是考虑多孔材料中孔隙和固体相之间的相互作用,通过定义互阻抗来描述声波在材料中传播时的复杂情况。 在互阻抗法中,孔隙和固体相的声波反射和透…

第十五节:学习Springboot 的响应结果封装(自学Spring boot 3.x的第四天)

这节记录下如何使用枚举类和响应封装类实现响应结果封装。 第一步:新建立一个枚举类。枚举类的要求有两个变量,响应码code,响应信息desc。响应码需要跟前端约定好。 public enum ResponseCode {SUCCESS("success",101),ERROR(&qu…

2024年好用的10款图纸加密软件排行榜|图纸加密的最佳选择

随着企业对知识产权和数据安全需求的日益增加,图纸加密软件已经成为各行业保护敏感设计文档的关键工具。2024年,市场上涌现了多款优质的图纸加密软件,帮助企业有效防范数据泄露、维护信息安全。本文将为您介绍2024年好用的10款图纸加密软件&a…

入驻国际数字影像产业园有哪些优势?

在数字文创产业蓬勃发展的今天,选择入驻国际数字影像产业园,意味着您已踏上了一条通往行业前沿的快车道。这里,不仅是数字影像产业的聚集地,更是创新与梦想的孵化器。那么,入驻国际数字影像产业园究竟有哪些优势呢&…

vmware虚拟机 windows下查看进程id(pid)

在日常运维过程中, 发现宿主机cpu占用高, 经常要看是那一个虚拟机占用内存或cpu高. 但是在windows资源管理器中,所有的虚拟机都显示的是vmware-vmx.exe. 目前手动情况下就需要一个挨着一个去看. 有没有直接查看虚拟机进程id虚拟机运行目录的方法?? 实现步骤 1. 通过 vm…