当前位置: 首页 > news >正文

GD32F4开发 -- FATFS文件系统

一、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.mrgr.cn/news/24461.html

相关文章:

  • 各环境缩写含义介绍【pro、sit、uat、test、pre、dev、fat、Staging】
  • 导入neo4j数据CSV文件及csv整理demo示例
  • 探究文本完全对齐技术:从理论到代码
  • 灵魂绑定Tokens介绍和在Sui上的案例
  • 数控纵切自动车床
  • UEFI学习笔记(五):EDK II PCD的概念、类型、使用
  • JAVA实现压缩包解压兼容Windows系统和MacOs
  • 年薪30W的项目经理,都在用这个方法做项目!
  • 声音之旅:2024四大必备音乐剪辑软件盘点!
  • 怎么调整图片亮度?关于调整图片亮度的几种方法推荐
  • 机器学习 第12章 计算学习理论
  • ‌移动管家手机智能控制汽车系统
  • 说说精益生产管理咨询公司排名的那些事
  • 【C++】——string
  • 实验十一 Java的网络应用
  • 【HarmonyOS】多媒体技术
  • 【Go】Go语言中的基本数据类型与类型转换
  • ES6标准---【四】【学习ES6标准看这一篇就够了!!!】
  • 线性规划优化:单纯形法
  • 四款音频剪辑软件免费使用,你更pick哪一个?