STM32之FATFS文件系统(SPI方式)笔记
BY:T7
Date:20171202
At:YSU_B307
开发环境:
uVision    : V5.12.0.0            STM32F103V8T6
库版本  : STM32F10x_StdPeriph_Lib_V3.5.0
FATSF    :  ff13a 
工程版本:FATFS_V1        日期:20171130
stm32怎么使用printf硬件连接:SPI1_CS -> PA4  SPI1_CLK -> PA5  SPI1_MISO -> PA6  SPI1_MOSI -> PA7
工程功能:建立在SPI_SD的基础上,完成文件系统的初步接触。
1、FATFS文件系统
1.使用开源的FAT文件系统模块,其源代码的获取从:
目前最新版本是:ff13a
2. 解压后得到两个文件:
其中,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 -> PA7
2. 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) 在Target Options的C++编译器选项中添加文件包含路径,如下图
4、为FATSF文件系统添加底层驱动
(一)在diskio.c中添加函数代码
1. DSTATUS disk_status (BYTE pdrv); 添加完成后如下图
2. DSTATUS disk_initialize (BYTE pdrv);  添加完成后如下图
3. DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
4. DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
5. DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
6. DWORD get_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"
#define ONE_BLOCK      512
#define TWO_BLOCK      1024
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";