×
单片机 > 单片机程序设计 > 详情

32. FATFS实验讲解

发布时间:2020-06-08 发布时间:
|

一。简单回顾













二。FATFS移植步骤


最主要的是配置ffconf.h 和 编写 diskio.c,修改diskio.c里的6个函数。

三。FATFS开发函数

移植完成后就可以调用文件系统提供的API。


所有的操作完成后都要调用f_close  关闭文件。

FATFS把API分成4类:

第一类:文件的操作

如打开文件,读写文件,关闭文件等。

第二类:目录操作


比如打开目录,关闭目录,读目录

第三类:目录的管理

第四类:驱动器磁盘的管理


在doc目录下00index_e.html文件中,有所有API的描述和实例。

四。FATFS例程讲解

1. stdio.c文件按照具体的开发平台改写里面的6个函数。

2. exfuns.c函数:

定义了操作文件的一些全局变量,并且给这些变量申请内存,内存使用内部SRAM,以及根据文件名判断文件类型的函数,小写字母转换成大写字母的函数,获取磁盘信息的函数等,方便程序代码使用。



3. fattester.c文件

把常用的一些API重新封装,有一些提示信息,方便用USMART串口调试时使用。


main函数

前面先初始化

        delay_init();     //延时函数初始化  

NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

uart_init(9600);  //串口初始化为9600

  LED_Init();          //LED端口初始化

LCD_Init();          //初始化液晶

KEY_Init();  //初始化按键

exfuns_init();          //为fatfs相关变量申请内存 

usmart_dev.init(72);

  mem_init(SRAMIN); //初始化内部内存池

然后检测SD卡:

while(SD_Initialize()) //检测SD卡

{

LCD_ShowString(60,150,200,16,16,"SD Card Error!");

delay_ms(200);

LCD_Fill(60,150,240,150+16,WHITE);//清除显示  

delay_ms(200);

LED0=!LED0;//DS0闪烁

}  

为操作文件所用的变量申请内存,这里使用内部的SRAM

exfuns_init(); //为fatfs相关变量申请内存

然后要先挂载存储介质,挂载以后才可以操作:

   f_mount(0,fs[0]); //挂载SD卡 

  f_mount(1,fs[1]);     //挂载FLASH.  

然后获取SD卡的大小和剩余空间:

exf_getfree("0",&total,&free);

然后显示出来:

  POINT_COLOR=BLUE;//设置字体为蓝色   

LCD_ShowString(60,150,200,16,16,"FATFS OK!");

LCD_ShowString(60,170,200,16,16,"SD Total Size:     MB");  

LCD_ShowString(60,190,200,16,16,"SD  Free Size:     MB");    

  LCD_ShowNum(172,170,total>>10,5,16); //显示SD卡总容量 MB

  LCD_ShowNum(172,190,free>>10,5,16); //显示SD卡剩余容量 MB    

五。通过USMART进行测试

首先打开串口调试助手,输入list命令,显示出有哪些函数可以进行调用



1. 浏览SD卡

mf_scan_files(u8 * path);

mf_scan_files(“0:”)   浏览根目录,输入"0:"



2. 打开一个文件

打开messag1.txt 文件

mf_open(u8*path,u8 mode);

mode的参数选项包括:


因为这个文件已经存在,因此这里选择:FA_OPEN_ALWAYS,不能直接输入FA_OPEN_ALWAYS,要查看FA_OPEN_ALWAYS的值是多少:0x10,因此输入0x10



这样就打开这个文件了,但并不能读。

mode应该选择FA_READ,值是0x01.



3. 打开文件后就可以读文件

mf_read(u16 len);


读出文件的内容。

4. 关闭文件

mf_close();



以上为利用USMART测试文件操作的命令。

六。新建一个文件,写入一个字符串,然后读取文件的内容

先定义变量

FIL fil;  //文件句柄

FRESULT res;   //命令返回值

UINT bww;   //指向读出或写入字符长度的指针

char buf[100];   //读出的文件内容存储在这个数组中

res = f_open (&fil, "0:/messag.txt", FA_CREATE_ALWAYS | FA_WRITE);

先创建,然后可以进行写操作。这里应该通过res返回值,判断文件操作是否正确,&fil为文件的句柄。

然后写入"Alientek FATFS test"

f_write (&fil, "Alientek FATFS test", 50, &bww);

最后关闭文件

f_close(&fil);

下面把文件内容读出来,然后显示

res = f_open (&fil, "0:/messag.txt", FA_READ);

f_read (&fil, buf, 100, &bww);

f_close(&fil);

LCD_ShowString(10,210,200,24,24,(u8 *)buf);

注:

f_write (&fil, "Alientek FATFS test", 50, &bww);这个语句有问题,应该字符串有多长就写多长,用sizeof函数。


先定义要写的字符串:

string_buf[] = {"Alientek FATFS test"};

写指令如下:

f_write (&fil, string_buf, sizeof(string_buf)-1, &bww);

修改后调试成功。


关键字:FATFS  stm32

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 USB HID 键盘