STM3之FATFS文件系统SPI方式笔记Word文档下载推荐.docx
- 文档编号:16285729
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:13
- 大小:451.87KB
STM3之FATFS文件系统SPI方式笔记Word文档下载推荐.docx
《STM3之FATFS文件系统SPI方式笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《STM3之FATFS文件系统SPI方式笔记Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
一、FATFS文件系统
1.使用开源的FAT文件系统模块,其源代码的获取从官网:
目前最新版本是:
ff13a
2.解压后得到两个文件:
其中,documents相当于STM32的固件库使用手册,介绍FATFS系统的函数使用方法,source中则是需要用到的源代码。
因为FATFS使用SD卡,所以FATFS的基础是SD卡的正常读写,这里采用SPI模式。
二、STM32之SD卡_SPI模式
1.硬件连接:
2.SPI模式下STM32读写SD卡的工程结构
在确定STM32使用SPI模式读写SD卡没有问题后,进入FATSF文件系统的实验,另源代码在文档最后。
三、FATSF文件系统移植
1.配置工程环境
1)STM32读写SD卡-SPI模式成功
2)将解压后的ff13a整个文件夹赋值到工程目录下,如图:
3)返回到MDK界面下,添加ff13a项目组,并把ff13a\source\目录下ff.c,diskio.c,ffunicode.c,ffsystem.c添加到项目组中,如下图:
4)在TargetOptions的C++编译器选项中添加文件包含路径,如下图
四、为FATSF文件系统添加底层驱动
(一)在diskio.c中添加函数代码
1.DSTATUSdisk_status(BYTEpdrv);
添加完成后如下图
2.DSTATUSdisk_initialize(BYTEpdrv);
3.DRESULTdisk_read(BYTEpdrv,BYTE*buff,DWORDsector,UINTcount);
4.DRESULTdisk_write(BYTEpdrv,constBYTE*buff,DWORDsector,UINTcount);
5.DRESULTdisk_ioctl(BYTEpdrv,BYTEcmd,void*buff);
6.DWORDget_fattime(void);
注意:
在diskio.c中DEV_MMC的宏定义要为0,如下图
(二)打开Ffconf.h函数
1.改变FF_CODE_PAGE的值如下
2.改变FF_USE_LFN的值如下
五、Main主函数
Main.c函数如下代码:
#include"
main.h"
#defineONE_BLOCK512
#defineTWO_BLOCK1024
uint8_tsd_RxBuf[TWO_BLOCK];
//SD卡数据j接收缓存区
uint8_tsd_TxBuf[TWO_BLOCK]={0};
FRESULTres;
//读写文件的返回值
FILFileSyatemSrc,FileSystemDst;
//文件系统结构体,包含文件指针等成员
UINTbr,bw;
//FilR/Wcount
BYTEFileRxBuffer[ONE_BLOCK];
//FILECOPYBUFFER
//BYTETxFileBuffer[]="
ThisistheFATFSSystem!
\r\n"
;
BYTETxFileBuffer[]="
中文文件系统实验!
staticconstchar*FR_Table[]=
{
"
FR_OK:
成功"
/*(0)Succeeded*/
FR_DISK_ERR:
底层硬件错误"
/*
(1)AharderroroccurredinthelowleveldiskI/Olayer*/
FR_INT_ERR:
断言失败"
/*
(2)Assertionfailed*/
FR_NOT_READY:
物理驱动没有工作"
/*(3)Thephysicaldrivecannotwork*/
FR_NO_FILE:
文件不存在"
/*(4)Couldnotfindthefile*/
FR_NO_PATH:
路径不存在"
/*(5)Couldnotfindthepath*/
FR_INVALID_NAME:
无效文件名"
/*(6)Thepathnameformatisinvalid*/
FR_DENIED:
由于禁止访问或者目录已满访问被拒绝"
/*(7)Accessdeniedduetoprohibitedaccessordirectoryfull*/
FR_EXIST:
由于访问被禁止访问被拒绝"
/*(8)Accessdeniedduetoprohibitedaccess*/
FR_INVALID_OBJECT:
文件或者目录对象无效"
/*(9)Thefile/directoryobjectisinvalid*/
FR_WRITE_PROTECTED:
物理驱动被写保护"
/*(10)Thephysicaldriveiswriteprotected*/
FR_INVALID_DRIVE:
逻辑驱动号无效"
/*(11)Thelogicaldrivenumberisinvalid*/
FR_NOT_ENABLED:
卷中无工作区"
/*(12)Thevolumehasnoworkarea*/
FR_NO_FILESYSTEM:
没有有效的FAT卷"
/*(13)ThereisnovalidFATvolume*/
FR_MKFS_ABORTED:
由于参数错误f_mkfs()被终止"
/*(14)Thef_mkfs()abortedduetoanyparametererror*/
FR_TIMEOUT:
在规定的时间内无法获得访问卷的许可"
/*(15)Couldnotgetagranttoaccessthevolumewithindefinedperiod*/
FR_LOCKED:
由于文件共享策略操作被拒绝"
/*(16)Theoperationisrejectedaccordingtothefilesharingpolicy*/
FR_NOT_ENOUGH_CORE:
无法分配长文件名工作区"
/*(17)LFNworkingbuffercouldnotbeallocated*/
FR_TOO_MANY_OPEN_FILES:
当前打开的文件数大于_FS_SHARE"
/*(18)Numberofopenfiles>
_FS_SHARE*/
FR_INVALID_PARAMETER:
参数无效"
/*(19)Givenparameterisinvalid*/
};
intmain(void)
inti=0;
FATFSfs;
//记录文件系统盘符信息的结构体
LED_Init();
USARTx_Init();
/*调用f_mount()创建一个工作区,另一个功能是调用了底层的disk_initialize()函数,进行SDIO借口的初始化*/
res=f_mount(&
fs,"
0:
"
1);
if(res!
=FR_OK)
{
printf("
挂载文件系统失败(%s)\r\n"
FR_Table[res]);
}
else
挂载文件系统成功(%s)\r\n"
/*调用f_open()函数在刚刚开辟的工作区的盘符0下打开一个名为Demo.TXT的文件
,以创建新文件或写入的方式打开(参数"
FA_CREATE_NEW|FA_WRITE"
),如果不存在的话则创建
这个文件。
同意见Demo.TXT这个文件关联到FileSyatemSrc这个结构指针,以后操作文件就是听过
这个结构指针来完成,可以理解为文件指针。
*/
res=f_open(&
FileSystemDst,"
/Demo1.TXT"
FA_CREATE_NEW|FA_WRITE);
/*对f_open()函数的返回值进行检查*/
if(res==FR_OK)
FileOpenSUCCESS!
\n\t"
);
/*
将缓冲区的数据写到文件中,创建文件成功,调用f_write()将缓冲区的数组变量
TxFileBuffer的内容写到刚刚打开的Demo.TXT文件中,写完之后必须调用f_close()函数关闭
已经打开的文件,否则前面写入的数据无效,甚至可能导致其他错误
res=f_write(&
FileSystemDst,TxFileBuffer,sizeof(TxFileBuffer),&
bw);
if(res)
FileWriteERROR!
FileWriteSUCCESS!
/*关闭文件*/
f_close(&
FileSystemDst);
elseif(res==FR_EXIST)
Fileisalreadyexist\n"
Don'
tknowtheerror!
\r\n"
/*-----------将刚刚新建的文件里面的内容打印到串口----------------*/
/*以只读的方式打开刚刚创建的文件*/
FileSystemDst,"
FA_OPEN_EXISTING|FA_READ);
FileOpenERROR!
/*打开文件*/
br=1;
for(;
)
/*清缓冲区*/
for(i=0;
i<
ONE_BLOCK;
i++)
FileRxBuffer[i]=0;
将文件里面的内容读到缓冲区,调用函数f_read()将文件的内容读到
缓冲区FileRxBuffer数组变量中,然后打印到串口
res=f_read(&
FileSystemDst,FileRxBuffer,sizeof(FileRxBuffer),&
br);
FileReadERROR!
FileReadSUCCESS!
\r\n%s"
FileRxBuffer);
if(res||br==0)
break;
//错误或者到了文件尾
/*
关闭打开的文件
当被打开的文件操作完成之后都要调用f_close()将它关闭,
如同一块动态分配的内存在用完之后都要调用free()来将它释放
while
(1)
{}
}
/**
*@}
/*********
**********(C)COPYRIGHT2017TIMEANDSPACE7*****ENDOFFILE****/
六、下载与实验现象
编译无误后下载,下载会很慢。
1.串口现象“首行的乱码是字符编码的问题,在这里不做解决”
2.SD卡
使用读卡器,读取SD卡:
XX云:
:
密码:
4hkc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM3 FATFS 文件系统 SPI 方式 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)