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

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

在这里插入图片描述

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

在这里插入图片描述

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


总结

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

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

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

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

相关文章:

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…...

YOLOv8改进 | 融合篇,YOLOv8主干网络替换为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点)

原始 YOLOv8 训练结果: YOLOv8 + MobileNetV3改进后训练结果: YOLOv8 + MobileNetV3 + CA 注意机制 + 添加小目标检测层改进后训练结果(极限涨点): 摘要 小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目…...

深入探索机器学习中的目标分类算法

在当今数据驱动的世界中,机器学习(Machine Learning, ML)正逐渐成为解决问题的重要工具。在众多机器学习任务中,目标分类(Classification)算法尤其受到关注。本文将深入探讨目标分类算法的基本概念、常见类…...

一文上手SpringSecurity【七】

之前我们在测试的时候,都是使用的字符串充当用户名称和密码,本篇将其换成MySQL数据库. 一、替换为真实的MySQL 1.1 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</v…...

深圳龙链科技:全球区块链开发先锋,领航Web3生态未来

【深圳龙链科技】是全球领先的Web3区块链技术开发公司&#xff0c;专注于为全球客户提供创新高效的区块链解决方案。 深圳龙链科技由币安资深股东携手香港领先的Web3创新枢纽Cyberport联袂打造&#xff0c;立足于香港这一国际金融中心&#xff0c;放眼全球&#xff0c;汇聚了华…...

手写代码,利用 mnist 数据集测试对比 kan 和 cnn/mlp 的效果

你好呀&#xff0c;我是董董灿。 kan 模型火了一段时间&#xff0c;很多人从理论的角度给出了非常专业的解读&#xff0c;基本结论是&#xff1a;从目前来看&#xff0c;kan 很难替代 mlp 成为一个更加经典的模型结构。 我这里就不从理论方面进行回答了&#xff0c;直接给出一…...

基于Java+SQL Server2008开发的(CS界面)个人财物管理系统

一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展&#xff0c;计算机在管理方面应用的旁及&#xff0c;利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的&#xff0c;其次对个人财务管理…...

15年408计算机网络

第一题&#xff1a; 解析&#xff1a; 接收方使用POP3向邮件服务器读取邮件&#xff0c;使用的TCP连接&#xff0c;TCP向上层提供的是面向连接的&#xff0c;可靠的数据传输服务。 第二题&#xff1a; 解析&#xff1a;物理层-不归零编码和曼彻斯特编码 编码1&#xff1a;电平在…...

C++ const关键字

const 1. 修饰变量&#xff08;包括函数参数 函数返回值&#xff09; const int v0 10; v0 0; // error 不能修改const修饰的变量 2. 修饰指针 int v1 10; int v2 20; int v3 30; 2.1 常量指针 const 在指针左边&#xff0c;左定值&#xff0c;即不能通过指针修改该…...

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)

文章目录 前言1、任务目标2、抓取流程2.1 分析网页2.2 编写代码2.3 思路分析前言 本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。 1、任务目标 目标网…...

LeetCode416:分割等和子集

题目链接&#xff1a;416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 代码如下&#xff1a; class Solution { public:bool canPartition(vector<int>& nums) {int m nums.size();vector<int> dp(10010, 0);int sum 0;for(int i 0; i < m;…...

自定义异常注解处理框架

首先我们定义两个用于检验string和List的注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** author caiyi.yu* 自定义非空判断*/ Target(Elemen…...

【小程序】微信小程序课程 -3 快速上手之常用方法

目录 1、 对话框 1.1 模态对话框 1.2 消息对话框 2、 存储 2.1 同步 2.1.1 同步保存数据 2.1.2 同步获取数据 2.1.3 同步删除数据 2.1.4 同步清空数据 2.2 异步 2.2.1 异步保存数据 2.2.2 异步获取数据 2.2.3 异步删除数据 2.2.4 异步清空数据 3、 上拉加载更多…...

iOS 小组件

基本知识 时间轴 小组件通过AppIntentTimelineProvider进行 UI 刷新 struct Provider: AppIntentTimelineProvider {func placeholder(in context: Context) -> SimpleEntry {// 添加占位的&#xff08;选择添加的时候使用&#xff09;// todo}func snapshot(for configu…...

【2.使用VBA自动填充Excel工作表】

目录 前言什么是VBA如何使用Excel中的VBA简单基础入门控制台输出信息定义过程&#xff08;功能&#xff09;定义变量常用的数据类型Set循环For To 我的需求开发过程效果演示文件情况测试填充源文件测试填充目标文件 全部完整的代码sheet1中的代码&#xff0c;对应A公司工作表Us…...

算法记录——链表

2.链表 2.1判断是否是回文链表 1.方法一&#xff1a;利用栈反转链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode…...

EasyExcel实现百万数据批量导出

当数据量比较大时&#xff0c;例如数据量达到百万级&#xff0c;传统的一次读取到内存中在写入excel文件的方法便不再适用了&#xff0c;可能会导致内存溢出&#xff1b;而且一次性将数据写入一张sheet工作表也不太好。 但我们可以选择数据分片的方式批量写入多个工作表。 测试…...

兆易GD32E508的SHRTIM配置 主从定时器 产生2对相位可调互补PWM 带死区

如有技术问题及技术需求请加作者微信! GD32E5系列MCU是基于Arm Cortex-M33处理器的32位通用微控制器。Cortex-M33处理器基于Armv8架构,处理器主频最高可达180MHz,支持强大的可扩展指令集,包括通用数据处理I/O控制任务、增强的数据处理位域操作、DSP和浮点运算器(FPU)。 GD…...

数据归组工具

利用C#将数据 [ {"name":"A","fzh":1}, {"name":"A","fzh":2}, {"name":"A","fzh":3}, {"name":"B","fzh":4}, {"name":"B",&…...

JavaScript 中的闭包的形成及使用场景

JavaScript 中的闭包 闭包&#xff08;Closure&#xff09; 是 JavaScript 中一个非常重要且独特的概念&#xff0c;它指的是 函数能够记住并访问其词法作用域内的变量&#xff0c;即使这个函数在其词法作用域之外执行。 通俗地说&#xff0c;闭包是 一个函数可以“记住”它在…...

后端返回内容有换行标识,前端如何识别换行

<br/>的话 用 v-html \n 可以用css样式 white-space: pre-wrap 后端返回结果 前端...

服务器被挂马,导致网站首页被更改怎么解决

当服务器被挂马并导致网站首页被篡改时&#xff0c;说明服务器或网站的安全性遭到破坏。为了修复并防止未来的攻击&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 立即下线网站 目的&#xff1a;防止恶意软件进一步传播&#xff0c;保护用户数据和防止攻击者继续对网…...

Android 利用OSMdroid开发GIS

1、地址 Github地址&#xff1a;https://gitee.com/mirrors/osmdroid Git地址&#xff1a; GitCode - 全球开发者的开源社区,开源代码托管平台 Git下载包地址&#xff1a;Releases osmdroid/osmdroid GitHub 新建项目 osmdroid在线&#xff1a; &#xff08;1&#xff09…...

一文上手skywalking【上】

一、skywalking预览 1.1 skywalking 概述 ​ Apache SkyWalking, 适用于分布式系统的应用程序性能监控工具&#xff0c;专为微服务、云原生和基于容器的 &#xff08;Kubernetes&#xff09; 架构而设计。官方地址: https://skywalking.apache.org/ 适用于分布式系统的应用程…...

【JavaScript】JQuery基础知识及应用

一、JQuery的导入方法 https://editor.csdn.net/md/?articleId132214798 二、JQuery介绍 JQuery(JQ)&#xff1a;JS的一个类库&#xff08;方法库&#xff1a;包含了大量的、有助于项目开发的属性和方法&#xff09; 第一代版本1.xx.xx: 1.11.3 兼容所有浏览器的&#xff0…...

初始爬虫9

1.元素定位后的操作 “find_element“仅仅能够获取元素&#xff0c;不能够直接获取其中的数据&#xff0c;如果需要获取数据需要使用以下方法”。下面列出了两个方法&#xff1a; 获取文本 element.text 通过定位获取的标签对象的 text 属性&#xff0c;获取文本内容 获取属性…...

从细胞到临床:表观组学分析技术在精准医疗中的角色

中国科学院等科研院所的顶尖人才发起&#xff0c;专注于多组学、互作组、生物医学等领域的研究与服务。在Nature等国际知名期刊发表多篇论文&#xff0c;提供实验整体打包、免费SCI论文润色等四大优势服务。在表观组学分析技术方面&#xff0c;提供DAP-seq、ATAC-seq、H3K4me3 …...

带你0到1之QT编程:二十、QT与MySQL喜结连理,构建数据库应用开发

此为QT编程的第二十谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; …...

梯度下降法及其性能评估

梯度下降法 梯度下降法是一种一阶迭代优化算法&#xff0c;用于寻找函数的局部最小值。在机器学习中&#xff0c;它通常用来最小化损失函数&#xff08;也称为成本函数或误差函数&#xff09;&#xff0c;以提高模型对数据的拟合程度。梯度下降法的基本思想是沿着目标函数当前…...

906. 超级回文数

1. 题目 906. 超级回文数 2. 解题思路 题目意思很简单&#xff0c;在给定范围中找到所有满足&#xff0c;它本身是回文&#xff0c;且它的平方也是回文的数字个数。 这题需要注意题目给定的范围&#xff0c;后面很有用&#xff1a; 因为回文范围是有限的&#xff0c;那么我…...