STM32之FATFS文件系统(SPI方式)笔记
标签:
stm32spisdfatfs |
分类: 技术类 |
STM32之FATFS文件系统(SPI方式)笔记
BY:T7
Date:20171202
At:YSU_B307
开发环境:
uVision
库版本
FATSF
工程版本:FATFS_V1 日期:20171130
硬件连接:SPI1_CS -> PA4
工程功能:建立在SPI_SD的基础上,完成文件系统的初步接触。
一、FATFS文件系统
1.使用开源的FAT文件系统模块,其源代码的获取从官网:
http://elm-chan.org/fsw/ff/00index_e.html
目前最新版本是:ff13a
2.
http://s7/mw690/005xyXUizy7ggOkhNj0d6&690
其中,documents相当于STM32的固件库使用手册,介绍FATFS系统的函数使用方法,source中则是需要用到的源代码。
因为FATFS使用SD卡,所以FATFS的基础是SD卡的正常读写,这里采用SPI模式。
二、STM32之SD卡_SPI模式
1.
SPI1_CS -> PA4
http://s13/bmiddle/005xyXUizy7ggOCBP2s5c&690
2.
在确定STM32使用SPI模式读写SD卡没有问题后,进入FATSF文件系统的实验,另源代码在文档最后。
三、FATSF文件系统移植
1.
1)
2)
http://s14/mw690/005xyXUizy7ggOJFitDbd&690
3)
http://s5/mw690/005xyXUizy7ggOQeV3634&690
4)
http://s14/mw690/005xyXUizy7ggOVLyGNbd&690
四、为FATSF文件系统添加底层驱动
(一)在diskio.c中添加函数代码
1.
http://s14/mw690/005xyXUizy7ggOYBypL1d&690
2.
http://s10/mw690/005xyXUizy7ggPbwgT7e9&690
3.
http://s10/mw690/005xyXUizy7ggPu44Z339&690
4.
(新浪博客图片太麻烦,下拉到百度云链接,下载看全文有图片的。)
5.
6.
注意:在diskio.c中 DEV_MMC的宏定义要为0,如下图
(二)打开Ffconf.h函数
1.
2.
五、Main主函数
Main.c函数如下代码:
#include "main.h"
#define ONE_BLOCK
#define TWO_BLOCK
uint8_t sd_RxBuf[TWO_BLOCK];//SD卡数据j接收缓存区
uint8_t sd_TxBuf[TWO_BLOCK] = {0};//SD卡数据j接收缓存区
FRESULT res; //读写文件的返回值
FIL FileSyatemSrc,FileSystemDst; //文件系统结构体,包含文件指针等成员
UINT br,bw; //Fil R/W count
BYTE FileRxBuffer[ONE_BLOCK]; //FILE COPY BUFFER
//BYTE TxFileBuffer[] = "This is the FATFS System!\r\n";
BYTE TxFileBuffer[] = "中文文件系统实验!\r\n";
static const char * FR_Table[]=
{
};
int main(void)
{
int i = 0;
FATFS fs; //记录文件系统盘符信息的结构体
LED_Init();
USARTx_Init();
res = f_mount(&fs, "0:", 1 );
if (res != FR_OK)
res = f_open( &FileSystemDst , "0:/Demo1.TXT", FA_CREATE_NEW | FA_WRITE);
if( res == FR_OK )
{
printf("File
res = f_write( &FileSystemDst ,
if(res)
printf("File
else
printf("File Write SUCCESS! \n\t");
f_close(&FileSystemDst);
}
else if(res == FR_EXIST)
{
printf("File is already exist \n");
}
else
printf("Don't know the error! \r\n");
res = f_open( &FileSystemDst, "0:/Demo1.TXT", FA_OPEN_EXISTING | FA_READ);
if(res)
printf("File Open ERROR! \n\t");
else
printf("File Open SUCCESS! \n\t");
br = 1;
for(;;)
{
for(i = 0; i <
FileRxBuffer[i] = 0;
res = f_read( &FileSystemDst, FileRxBuffer, sizeof(FileRxBuffer), &br);
if(res)
printf("File Read ERROR! \n\t");
else
printf("File Read SUCCESS! \n\t");
printf(" \r\n %s ",FileRxBuffer );
if(res || br == 0)
break; //错误或者到了文件尾
}
f_close(&FileSystemDst);
while(1)
}
六、下载及实验现象
编译无误后下载,下载会很慢。
1.
2.
使用读卡器,读取SD卡:
百度云链接:
链接:https://pan.baidu.com/s/1hrSeFkw 密码:4hkc

加载中…