当前位置: 首页 > article >正文

STM32 F1移植FATFS文件系统 USMART组件测试相关函数功能

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格式了。

在这里插入图片描述

发送错误的系统格式如下:

在这里插入图片描述

注意:这里是为了记录演示操作的,如果卡没有出问题尽量不要去格式化的,正常使用就行。


总结

以上就是常见的相关文件操作函数的大致传参操作过程了。

总体还是比较简单的,主要是能搞懂代码的参数传递过程就基本没什么大问题啦。

一般常用的就是挂载文件、扫描文件、打开文件、写数据、指针位置的设置、读数据、关闭文件等。

其它部分不常用的函数就不一一列举出来了,按照一样的方法来操作即可。


http://www.kler.cn/news/323809.html

相关文章:

  • 二、初步编写drf API
  • 太速科技-389-基于KU5P的双路100G光纤网络加速计算卡
  • linux系统的常用命令
  • 【系统规划与管理师】【案例分析】【考点】【答案篇】第10章 团队建设与管理
  • docker相关命令
  • 基于单片机的精确电压表DA-AD转换
  • 【笔记】神领物流day1.1.13前后端部署【未完】
  • JVM、JRE、JDK关系。HotSpot。JVM规范
  • 【R语言】fs 工具功能速查
  • 【项目经验分享】深度学习点云算法毕业设计项目案例定制
  • 【JavaEE】——内存可见性问题
  • 支付宝远程收款api之小荷包跳转码
  • 画两个数的平方和的曲线
  • ECharts图表图例3
  • 【记录】Excel|不允许的操作:合并或隐藏单元格出现的问题列表及解决方案
  • el-table给列加单位,表头加样式,加斑马纹
  • 【YashanDB知识库】如何dump数据文件,转换rowid, 查询对应内容
  • 9月27日,每日信息差
  • XSS基础
  • 蓝桥杯—STM32G431RBT6(TIM定时器输入捕获频率和占空比)
  • 北斗三号多模对讲机TD70:公专网融合、数模一体、音视频调度,推动应急通信效能升级
  • Xiaojie雷达之路---doa估计(dbf、capon、music算法)
  • 通信工程学习:什么是MIMO多输入多输出技术
  • TDSQL-C电商可视化,重塑电商决策新纪元
  • 我可以通过发包拿到视频网站的视频源文件吗?
  • 软件设计之SSM(1)
  • PWM基础与信号控制
  • C++动态规划问题—第 N 个泰波那契数
  • 物联网助力智慧交通:优势与前景
  • ScrapeGraphAl AI爬虫