1、定义一些变量
在我们代码开始的部分,先定义一些变量供我们使用。这里选择几个来解析一下。
第一个FIL file;这个变量是文件的结构体变量,记录了我们打开的文件的信息。使用f_open等函数的时候都要用到。
第二个Words变量是一个字符串指针,我用这个指针来存储读取的字符信息。这里我们就使用了malloc函数来分配内存,我们通过修改启动代码提供了更多的堆内存所以这里就可以分配一些给我们使用。
第三个是Path这个字符串,这里保存的是文件所在的路径。关于文件路径的写法,请参考FatFs的官方文档 网站。
  FIL file;  uint8_t Status = 0;  char* Words = malloc(256);  char* String = "\nWrite some words to this file by STM32F407 MCU.\n";  UINT Number = 0;  char Path[16] = "/File/test.txt";
2、使用f_open
关于f_open函数的具体用法和详细说明,参见FatFs官方文档 网站。这里可以看看我在下方贴出的代码作为参考来使用。
3、使用f_read
关于f_read没有特别的说明,详细的用法去看看FatFs官方文档 网站。这里只想说一下第三个和第四个参数。这里的第三个参数是给定的要读取的字节数,而第四个参数是最后读取了的字节数的存储指针。这里要说明的是,不一定你要读取128个字节就一定会读取这么多,如果遇到了文件尾符号就会停止读取。停止读取的时候就会把读取的字节数写入到第四个参数指定的存储空间里。所以我们可以通过返回的读取字节数来发送到串口,不需要自己数读取了多少个字节。
if(!f_open(&file, Path, FA_READ | FA_OPEN_EXISTING | FA_WRITE))  {  f_read(&file, Words, 256, &Number);  HAL_UART_Transmit(&huart1, (uint8_t *)Words, Number, 500);  }
4、使用f_lseek
我在调用f_write函数之前,调用了一下f_lseek函数来移动文件指针。不过在这里并不需要,你们参考我的完整工程文件就知道。在这之前我已经进行了文件读取的操作,文件指针已经定位在了文件的最后一个字节这里。不过我还是调用了一下,因为有时候需要用到这个函数。这个函数的详细用法请参考FatFs的官方文档 网站。
5、使用f_write
f_write的用法和f_read非常相似,这里就不在赘述。第三个参数和第四个参数的含义也是大同小异。想了解这个函数的详细说明,请参考FatFs的官方文档 网站。
  f_lseek(&file, Number);  Status = f_write(&file, String, 49, &Number);
6、使用f_close
f_close这个函数的用法就非常的简单了,这里在写入操作之后要调用一次这个函数。调用了这个函数之后,写入的信息才可以保存在SD卡的上面,下一次才可以读取出来。如果没有使用这个函数的话,文件就会存储在缓冲区中,只有这一次读取可以成功。到了下一次复位的时候,读取的还是原先的文件内容。
f_close(&file);
7、再次读取文件内容
现在我们有写入了一些信息到了我们的文件里面,再次读取一下看看写入成功了吗。下面的代码实现了这一功能,大家参考一下。
f_open(&file, Path, FA_READ | FA_OPEN_EXISTING);  if(!Status)  {  f_read(&file, Words, 256, &Number);  HAL_UART_Transmit(&huart1, (uint8_t *)Words, Number, 500);  }  f_close(&file);
五、上电测试
代码我们都准备好了,只要编译通过下载到我们的开发板上就行了。如果你的硬件连接都非常的正确,而且按照前面的步骤来的话就可以开始测试读取SD卡了。
我在SD卡的根目录下建立了/File/test.txt
初始的文件内容如下:
This is a test file to confirm the library of FatFs.
Don't support Chinese in this file.
Wish you a good luck!
测试结果

观察两次的输出结果可以看得出来,第二次复位的时候文件的末尾又多了一行文字。这一现象符合我们的程序逻辑。大家可以对比一下这里的结果,自己做一个参考。

转载于:https://www.cnblogs.com/wang--jie/p/9442148.html

STM32使用FatFs相关推荐

  1. Stm32文件系统FATFS(开始于2021-09-09)

    Stm32文件系统FATFS 参考资料主要是原子和野火两家的讲解. 1.FATFS简介: 适合嵌入式小型单片机,是一个 独立 的软件层文件系统,我们只需要将底层硬件的读取函数移植到FATFS提供的向下 ...

  2. STM32利用FATFS文件系统给SD卡读写数据

    STM32利用FATFS文件系统给SD卡读写数据 注:FATFS文件系统官方网址(内含各种函数具体功能及参数配置): FATFS文件系统官方网址 1. 所需.c和.h文件 FATFS中的文件的作用如下 ...

  3. STM32移植FatFS文件系统最新版R0.14b

    STM32移植FatFS文件系统 目录 一.前言 二.硬件及软件准备 三.移植FatFS文件到工程文件夹下 四.将移植文件添加到工程中 五.修改"diskio.c"文件 六.配置& ...

  4. 9、STM32 SDIO FATFS(SD卡)

    本篇文章使用STM32对SD卡通过SDIO配置,读写文件 在使用FATFS时值得注意得是若通信SDIO不启动DMA方式读写,容易导致其他任务中断打断读写时序,导致FATFS的执行出现异常,常见返回为F ...

  5. STM32基于 FatFs R0.14bSD Card 的MP3音乐播放器(也算是FatFs的简单应用了吧)

    本篇文章不完善!!! 目前为止仅仅为学习笔记,看到这篇文章请慎重!! 写在前面: FatFs 的I/O接口操作前面文章已经写过,现在直接拿来用! 项目主要参考野火和正点原子的代码. 说在前面:其实不喜 ...

  6. STM32通过Fatfs创建PDF文件

    上面是我创建的群聊,欢迎新朋友的加入. 最近想用MCU去创建一个PDF文件,曾尝试移植HPDF和PDFGEN,因为这两个本就不是为单片机做的库,移植过程有点复杂了. 后面发现ST论坛有个网友发布了一个 ...

  7. STM32 SD FatFs读写文件FR_DISK_ERR错误可能原因

      使用STM32F7+STM32CubeMX5.21生成SD-FATFS代码,读写文件失败报FR_DISK_ERR错误可能原因:   SDMMC传输频率过高.修改SDDMMC传输时钟分频系数.    ...

  8. STM32 基础系列教程 30 - 文件系统

    前言 学习stm32中FATFS 文件系统的基础使用,学会文件的打开及读写删除等基本操作,理解文件系统基本概念. 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 ST ...

  9. CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC

    CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC 引言 FTP代码库的移植 Cubemx配置SNTP以及RTC RTC配置方法 SNTP配置方法 FATFS载入RT ...

最新文章

  1. iOS开发中与库相关的术语
  2. php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解
  3. 使用键值flyweight的Boost.Flyweight示例
  4. c语言程序能够在不同的操作系统下运行,这说明c语言具有很好的,上海交通大学继续教育学院2012春——程序设计(C)作业1(有答案)...
  5. 卸载chrome_Chrome 浏览器必备“扩展管理工具”,一键管理 Chrome 扩展
  6. 如何测试web服务器性能,如何执行Web服务器性能基准测试?
  7. leetcode - 461. 汉明距离
  8. (转)Hibernate中的多表操作
  9. centos 程序 mysql_Centos 源码安装 MySQL
  10. android歌词控件
  11. 【PS】抠图教程(0基础快速入门)
  12. 开源KVM管理工具和平台
  13. docker基础操作
  14. python无法读取excel文字_Python帮你做Excel——读取Excel文档
  15. IT企业正重夺云计算市场主导权:你大爷还是你大爷
  16. 华为荣耀android进入,EMUI 9.1公测招募开启 华为荣耀14款机型获支持
  17. Java job interview:项目开发小组成员网站数据访问层设计
  18. 卸载网易邮箱大师邮件从服务器删除,网易邮箱大师-高效强大的全平台邮箱客户端...
  19. 使用 adb 对 Android 声音控制全面适配
  20. STM32基本定时器做万能遥控器

热门文章

  1. ElasticSearch高可用集群环境搭建和分片原理
  2. 一些新奇的玩意【php篇--持续更新】
  3. c++------------提取文件中的信息
  4. hive中的一些参数
  5. ios html5 网页取消默认样式
  6. Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
  7. 函数模板的载体-HPP
  8. 【鬼网络】之DHCP原理与配置
  9. linux asm 磁盘管理,asm磁盘管理篇
  10. 分数阶simulink工具箱_CCDC 2021特别专题:分数阶微积分与分数阶系统