SD卡STM32C8T6-FATFS文件系统的使用

1-关于移植,网上教程非常多了,没多少讲的,移植也比较简单,基本只要提供读写扇区函数就可以了。本次使用的是官网最新的0.4版本

本文记录一下

--读写文件功能

--遍历目录和文件

--使用的内存情况

直接跳过移植,和SD卡驱动部分。

 文件读写-------------

基本和C语言file操作一致,这几个函数基本不会陌生吧,流程也是打开,读写,关闭

res =f_mount(&fs,"0:",1); 					//挂载SD卡 if(res){}else{exf_getfree("0",&total,&free);printf("SD total %d free %d\r\n",total,free);}scan_files("0:");res = f_open(&fil, "0:/test1.txt",FA_OPEN_APPEND|FA_WRITE|FA_READ);printf("open %d size %d\r\n",res,f_size(&fil));res = f_write(&fil, wrbuf, sizeof(wrbuf), &bw);printf("write %d len %d\r\n",res,bw);f_lseek(&fil,0);res = f_read(&fil,mm,12,&read_len);printf("read %s len %d res %d\r\n",(char*)mm,read_len,res);f_close(&fil);/*卸载文件系统*/f_mount(0, "0:", 0);

----遍历目录和文件

scan_files("0:"); 函数就是扫描当前所有的文件和目录,里面会有递归,目录不要太深,否则main函数的栈不够你用的。

代码: 

FRESULT scan_files(char *path)
{FRESULT res; //定义结果对象DIR dir; //定义目录对象char pathBuff[100]={0}; //定义路径数组static FILINFO fno; //定义静态文件信息结构对象res = f_opendir(&dir,path); //打开目录,返回状态 和 目录对象的指针if(res == FR_OK) //打开成功{while(1) //遍历{res = f_readdir(&dir, &fno); //读取目录,返回状态 和 文件信息的指针if(res != FR_OK || fno.fname[0] == 0) break; //若打开失败 或 到结尾,则退出if(fno.fattrib & AM_DIR) //是目录{sprintf(pathBuff,"%s/%s",path,fno.fname); //将新目录添加在原目录后面printf("is path:%s\r\n",pathBuff);res = scan_files(pathBuff); //将新目录进行递归调用if(res != FR_OK) break; //打开失败则退出}else{printf("si file:%s/%s %d\r\n",path,fno.fname,fno.fsize); //是文件}}}else{printf("失败 - %d",&res); //打开失败}f_closedir(&dir); //关闭目录return res; //返回状态
}

运行如下:和我sd卡中文件结构一致

 

 ----最后关于占用的资源部分,

使用的US编码

#define FF_CODE_PAGE    437

使用小型模式

#define FF_FS_TINY        1

不使用格式化功能

#define FF_USE_MKFS        0

在keil的map中看,ROM大概在7.3K,  RAM使用的非常小,目前是大部分功能都有的情况下,后续把一些独立的功能再裁剪一下应该更小巧


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部