STM32 F1移植FATFS文件系统 使用USMART调试组件测试相关函数功能
文章目录
- STM32 F1移植FATFS文件系统 使用USMART调试组件测试相关函数功能
- 前言
- 部分主要相关代码
- # USMART介绍
- 1. mf_scan_files 扫描磁盘文件
- 2. mf_mount 挂载磁盘
- 3. mf_open 打开文件
- 4. mf_read 读数据内容
- 5. mf_write 写数据内容
- 6. mf_lseek 设置文件读写指针位置
- 7. mf_tell 获取文件读写指针位置
- 8. mf_close 关闭文件
- 9. mf_size 获取文件大小
- 10. mf_showfree 获取磁盘容量
- 11. mf_unlink 删除文件
- 12. mf_rename 修改文件名字
- 13. mf_getlabel 获取磁盘名字
- 14. mf_setlabel 设置磁盘名字
- 15. mf_fmkfs 格式化磁盘
- 总结
前言
学习移植了FATFS的代码,在使用过程中发现一个很方便的操作,就是通过电脑串口调试助手来测试文件的相关操作功能,可以不用频繁的在MDK上编写代码、下载代码,而直接在串口助手操作就可以简单验证相关接口功能实现。
就是正点原子官方提供的“USMART,串口调试组件”代码工具。
部分主要相关代码
在串口助手操作使用之前,要先在代码添加需要用到的函数,然后编译下载到开发板上,打开串口就可以了。位置和格式如下图:
这些函数定义在fattester.c里面,具体函数的参数及解析,到该文件里查看即可。其实这些函数官方是为了测试方便而在文件系统的函数基础上再次进行封装的,这样使用USMART调用起来就相对比较方便了。
FATFS的FRESULT返回值如下,定义了一个枚举体来存放这些返回值。
后面调用函数或者操作时,获取到的返回值对比看这里的具体值就可以知道具体什么情况了。
# USMART介绍
USMART 是由 ALIENTEK 开发的一个灵巧的串口调试互交组件,通过它你可以通过串口助手调用程序里面的任何函数,并执行。因此,可以随意更改函数的输入参数( 支持数字( 10/16进制, 支持负数)、字符串、函数入口地址等作为参数),单个函数最多支持 10 个输入参数,并支持函数返回值显示。
这个调试组件的具体使用,可以学习下官方的教程就行,视频或者开发指南文档都是可以的,熟悉之后就方便功能使用了。
一般在使用USMART之前,通过串口发送help指令后就可以提示以下帮助内容提示:
发送list指令后,会列出注册好可调用的函数,如下图所示:
那么就根据个人需求,调用函数,传入相关参数就行。
注意:发送时需要添加回车换行处理,即在串口助手上勾选下方的”发送新行“按钮即可。
下面就简单记录一下常用函数的使用方法(默认使用的是SD卡,下文所指的磁盘即为SD卡):
1. mf_scan_files 扫描磁盘文件
扫描SD卡的文件,会列出所有文件名:
标号1处代表是SD卡磁盘的意思,标号2是函数返回值,0表示成功(详细参考FRESULT值即可)。
2. mf_mount 挂载磁盘
挂载磁盘,为磁盘注册工作区,默认用的是SD卡
返回0,则说明磁盘挂载成功。
3. mf_open 打开文件
打开SD卡已存在的文件。
标号2处是模式值,详细可以去代码里面看具体数值的。这里模式支持读、写和如果打开的文件名不存在,则新建一个该名字的文件。
4. mf_read 读数据内容
读取打开的文件中的指定字节长度数据
函数参数传入的是要读取数据的长度。
如果文件里面没有数据的话,则是不会显示内容的。
例如打开一个不存在的文件,过程如下图:
mf_open(“0:/ddd.txt”,0x13)
打开一个不存在的文件后,再次扫描文件,就可以看到多了一个文件。调用读取函数指令后发现是不会显示内容的。
那么就可以调用写数据函数,待写入完成然后再读就可以了。
5. mf_write 写数据内容
往文件里面写入指定长度的数据
发送读取数据函数后如下:
问题来了,前面已经写入6个字符成功了,为什么现在读取不出来呢?好像文件里面完全没有内容似的。
哦!原来是操作步骤出了问题导致读取不出来数据的。
经过分析,发现写入数据的指针此时还是在数据尾部,那么要先将指针移动到头部才行。那么该如何实现呢?
那么此时就可以发送mf_lseek函数实现,将读写指针移动到数据开头就可以了。当然,其它位置也可以,根据自己的情况决定即可。
移动后,接着再调用读函数。
此时,奇迹出现了,发现能正常读取到写入的数据了。读取的内容长度需要小于或等于写入的长度。
这个问题是一个很容易被忽略的,就会导致读取失败的,这个是很关键的一环。即写入完数据后,先移动指针再读,确保指针后面是有内容的。
6. mf_lseek 设置文件读写指针位置
文件读写指针偏移,可以简单理解为光标
函数参数是相对首地址的偏移量,简单理解就是指定指针所在的位置。
7. mf_tell 获取文件读写指针位置
读取文件当前读写指针的位置,返回值是指针所在当前的位置。
8. mf_close 关闭文件
关闭已打开的文件,通常搭配打开文件函数使用,有打开就需要有关闭。
这个函数没有参数,直接调用即可关闭该文件。
9. mf_size 获取文件大小
获取当前打开的文件大小
函数返回值是该文件里面的内容字节数(注意16进制转换)
10. mf_showfree 获取磁盘容量
显示磁盘总容量和剩余容量
11. mf_unlink 删除文件
删除磁盘指定名字的文件。
前面磁盘操作是有三个文件的:
删除后就只有两个文件了,如下图:
删除后,只剩2个文件了,说明文件删除成功。
12. mf_rename 修改文件名字
重命名磁盘内的文件名字
设置成功后,扫描一次文件;
可以看到文件abc.txt被重命名为了stm32.txt
文件名字被修改后,里面的内容是不变的,依然可以正常读取。
注意:该函数的参数是带盘符和文件名及扩展名的,不能只写文件名,否则会出错。
13. mf_getlabel 获取磁盘名字
查看磁盘的名字
由于前面是没有设置过磁盘名字,所以读取出来的名字是空的。
14. mf_setlabel 设置磁盘名字
设置磁盘的名字
设置成功后,再次读取就可以看到是设置后的名字了。
可以把卡取下来,用读卡器接电脑,可以看到磁盘也是这个名字。
注意:
1、全角和半角输入法问题。
2、测试最大设置英文是11个字符,(英文+数字组合)。
中文最多是5个汉字。名字可以支持英文、数字和汉字组合,长度限制在11内就可以。
15. mf_fmkfs 格式化磁盘
格式化磁盘,清空内容
注意!!!在格式化磁盘之前,需要做好数据备份处理,避免文件丢失找不回了
我磁盘只支持下面三种系统格式,如果参数不是这些就会提示错误的,结果会以返回值反馈。
和代码对比有2个格式是可以支持使用的,如下:
所以,参数传入后面的数值即可。
注意,发送格式化函数后,需要耐心等待几秒钟进行格式化处理,等看到有返回值后则说明操作完成。不要中途操作其它的了,避免对磁盘产生伤害。
磁盘格式化为FAT32:
磁盘格式化为exFAT:
可以把卡取下来,用读卡器接电脑,可以看到磁盘最后被成功格式化为exFAT格式了。
发送错误的系统格式如下:
注意:这里是为了记录演示操作的,如果卡没有出问题尽量不要去格式化的,正常使用就行。
总结
以上就是常见的相关文件操作函数的大致传参操作过程了。
总体还是比较简单的,主要是能搞懂代码的参数传递过程就基本没什么大问题啦。
一般常用的就是挂载文件、扫描文件、打开文件、写数据、指针位置的设置、读数据、关闭文件等。
其它部分不常用的函数就不一一列举出来了,按照一样的方法来操作即可。