首页 STM32之FATFS文件系统(SPI方式)笔记

STM32之FATFS文件系统(SPI方式)笔记

举报
开通vip

STM32之FATFS文件系统(SPI方式)笔记STM32之FATFS文件系统(SPI方式)笔记BY:T7Date:20171202At:YSU_B307开发环境:uVision  :V5.12.0.0      STM32F103V8T6库版本 :STM32F10x_StdPeriph_Lib_V3.5.0FATSF  : ff13a 工程版本:FATFS_V1    日期:20171130硬件连接:SPI1_CS->PA4 SPI1_CLK->PA5 SPI1_MISO->PA6 SPI1_MOSI->PA7工程功能:建立在SPI_SD的基础上,完成文件系统...

STM32之FATFS文件系统(SPI方式)笔记
STM32之FATFS文件系统(SPI方式)笔记BY:T7Date:20171202At:YSU_B307开发环境:uVision  :V5.12.0.0      STM32F103V8T6库版本 :STM32F10x_StdPeriph_Lib_V3.5.0FATSF  : ff13a 工程版本:FATFS_V1    日期:20171130硬件连接:SPI1_CS->PA4 SPI1_CLK->PA5 SPI1_MISO->PA6 SPI1_MOSI->PA7工程功能:建立在SPI_SD的基础上,完成文件系统的初步接触。1、FATFS文件系统1.使用开源的FAT文件系统模块,其源代码的获取从官网:目前最新版本是:ff13a2.解压后得到两个文件:其中,documents相当于STM32的固件库使用手册,介绍FATFS系统的函数使用方法,source中则是需要用到的源代码。因为FATFS使用SD卡,所以FATFS的基础是SD卡的正常读写,这里采用SPI模式。2、STM32之SD卡_SPI模式1.硬件连接:SPI1_CS->PA4 SPI1_CLK->PA5 SPI1_MISO->PA6 SPI1_MOSI->PA72.SPI模式下STM32读写SD卡的工程结构在确定STM32使用SPI模式读写SD卡没有问题后,进入FATSF文件系统的实验,另源代码在文档最后。3、FATSF文件系统移植1.配置工程环境1)STM32读写SD卡-SPI模式成功2)将解压后的ff13a整个文件夹赋值到工程目录下,如图:3)返回到MDK界面下,添加ff13a项目组,并把ff13a\source\目录下ff.c,diskio.c,ffunicode.c,ffsystem.c添加到项目组中,如下图:4)在TargetOptions的C编译器选项中添加文件包含路径,如下图4、为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,如下图(2)打开Ffconf.h函数1.改变FF_CODE_PAGE的值如下2.改变FF_USE_LFN的值如下5、Main主函数Main.c函数如下代码:#include"main.h"#defineONE_BLOCK   512#defineTWO_BLOCK   1024uint8_tsd_RxBuf[TWO_BLOCK];//SD卡数据j接收缓存区uint8_tsd_TxBuf[TWO_BLOCK]={0};//SD卡数据j接收缓存区FRESULTres;  //读写文件的返回值FILFileSyatemSrc,FileSystemDst;  //文件系统结构体,包含文件指针等成员UINTbr,bw;  //FilR/WcountBYTEFileRxBuffer[ONE_BLOCK];  //FILECOPYBUFFER//BYTETxFileBuffer[]="ThisistheFATFSSystem!\r\n";BYTETxFileBuffer[]="中文文件系统实验!\r\n";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{printf("挂载文件系统成功(%s)\r\n",FR_Table[res]);}/*调用f_open()函数在刚刚开辟的工作区的盘符0下打开一个名为Demo.TXT的文件,以创建新文件或写入的方式打开(参数"FA_CREATE_NEW|FA_WRITE"),如果不存在的话则创建这个文件。同意见Demo.TXT这个文件关联到FileSyatemSrc这个结构指针,以后操作文件就是听过这个结构指针来完成,可以理解为文件指针。*/res=f_open(&FileSystemDst,"0:/Demo1.TXT",FA_CREATE_NEW|FA_WRITE);/*对f_open()函数的返回值进行检查*/if(res==FR_OK){printf("File OpenSUCCESS!\n\t");/*将缓冲区的数据写到文件中,创建文件成功,调用f_write()将缓冲区的数组变量TxFileBuffer的内容写到刚刚打开的Demo.TXT文件中,写完之后必须调用f_close()函数关闭已经打开的文件,否则前面写入的数据无效,甚至可能导致其他错误*/res=f_write(&FileSystemDst, TxFileBuffer ,sizeof(TxFileBuffer),&bw);if(res)printf("File WriteERROR!\n\t");elseprintf("FileWriteSUCCESS!\n\t");/*关闭文件*/f_close(&FileSystemDst);}elseif(res==FR_EXIST){printf("Fileisalreadyexist\n");}elseprintf("Don'tknowtheerror!\r\n");/*-----------将刚刚新建的文件里面的内容打印到串口----------------*/  /*以只读的方式打开刚刚创建的文件*/res=f_open(&FileSystemDst,"0:/Demo1.TXT",FA_OPEN_EXISTING|FA_READ);if(res)printf("FileOpenERROR!\n\t");elseprintf("FileOpenSUCCESS!\n\t");/*打开文件*/br=1;for(;;){/*清缓冲区*/for(i=0;i< ONE_BLOCK;i)FileRxBuffer[i]=0;/*将文件里面的内容读到缓冲区,调用函数f_read()将文件的内容读到缓冲区FileRxBuffer数组变量中,然后打印到串口*/res=f_read(&FileSystemDst,FileRxBuffer,sizeof(FileRxBuffer),&br);if(res)printf("FileReadERROR!\n\t");elseprintf("FileReadSUCCESS!\n\t");printf("\r\n%s",FileRxBuffer);if(res||br==0)break;  //错误或者到了文件尾}/*关闭打开的文件当被打开的文件操作完成之后都要调用f_close()将它关闭,如同一块动态分配的内存在用完之后都要调用free()来将它释放*/f_close(&FileSystemDst);while(1){}}/***@}*//*******************(C)COPYRIGHT2017TIMEANDSPACE7*****ENDOFFILE****/6、下载及实验现象编译无误后下载,下载会很慢。1.串口现象“首行的乱码是字符编码的问题,在这里不做解决”2.SD卡使用读卡器,读取SD卡:百度云链接:链接:密码:4hkc
本文档为【STM32之FATFS文件系统(SPI方式)笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_686908
暂无简介~
格式:doc
大小:31KB
软件:Word
页数:23
分类:
上传时间:2022-08-04
浏览量:6