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!
测试结果

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

STM32使用FatFs的更多相关文章

  1. STM32下FatFs的移植,实现了坏块管理,硬件ECC,ECC纠错,并进行擦写均衡分析

    最近因项目需要,做一个数据采集的单片机平台.需要移植 FatFs .现在把最后成果贴上来. 1.摘要 在 STM32 单片机上,成功移植 FatFs 0.12b,使用的 Nand Flash 芯片为 ...

  2. 【转】STM32利用FATFS读写数组

    因为存为TXT可以实现,但是读取TXT里边的数据总是不尽如人意,所以,最终存为bin文件了. 先摘几个观点: http://www.openedv.com/posts/list/36712.htm “ ...

  3. SD卡fat文件系统移植

    经过充分的研究,发现fatfs文件系统移植的比较简单!因为代码都已经被别人做好了!我们只需把io层稍稍做个处理就ok了: 至于sd卡的驱动请看我这篇博客:http://blog.csdn.net/ie ...

  4. STM32之独立版USB(Host)驱动+MSC+Fatfs移植

    源:STM32之独立版USB(Host)驱动+MSC+Fatfs移植 STM32之USB驱动库详解(架构+文件+函数+使用说明+示例程序)

  5. STM32平台SD卡的FatFS文件系统开发

    STM32平台SD卡的FatFS文件系统开发 系统平台: STM32系列的STM32F103ZE SPI方式与SD卡通信 SD上移植FatFS系统 1 FatFS文件系统 1.1 FatFS简介 Fa ...

  6. stm32 向W25Q256FLASH中通过 FATFS文件系统写入数据 写多了之后出现错误,之前存储的全都找不到了

    stm32 像W25Q256FLASH中通过  FATFS文件系统写入数据  写多了之后出现错误,之前存储的全都找不到了 http://firebbs.cn/thread-23490-1-1.html ...

  7. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  8. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  9. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(七)-准备移植FatFs

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

随机推荐

  1. 常见网络编程面试题答案征集与面试题(收集) ZZ 【网络编程】

    http://www.cnblogs.com/wickedboy237/archive/2013/05/12/3074362.html 1:tcp和udp的区别2:流量控制和拥塞控制的实现机制3:滑动 ...

  2. Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)

    前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章.本系列文章作为国内最早详细介绍 Nginx + PHP 安装.配置.使用的资料之一,为推动 Nginx ...

  3. zabbix监控服务器时间问题

    zabbix中有自带对linux服务器时间进行监控的模板,用的key是system.localtime返回当前的系统时间,而配置tigger报警时是用的fuzzytime(N)方法,该方法是将返回的系 ...

  4. Lua操作mysql

    require "luasql.mysql" --创建环境对象 env = luasql.mysql() --连接数据库 conn = env:connect("数据库名 ...

  5. FLV视频封装格式详解

    FLV视频封装格式详解 分类: FFMpeg编解码 2012-04-04 21:13 1378人阅读 评论(2) 收藏 举报 flvheaderaudiovideocodecfile 目录(?)[-] ...

  6. c/c++ 中#ifndef和#endif的作用及使用

    有时候我们在编程的时候,希望有些代码在我们需要时编译,不需要时不编译,也就是让它快速注释,这时候即可以考虑#ifdef和#endif,它们会使我们的编译器进行选择性编译.使用方法如下: #includ ...

  7. Python中readline()函数 去除换行符

    从Python中readline()函数读取的一行内容中含有换行符\n,很多时候我们需要处理不含有换行符的字符串,此时就要去掉换行符\n. 方法是使用strip()函数. 例子如下: f = open ...

  8. 函数去抖(debounce)与 函数节流(throttle)

    以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemove事件 3 ...

  9. 多GPU计算

    多GPU计算已经可以说,只要是个成熟的模型,都使用了这一点. 例如: gluoncv:https://github.com/dmlc/gluon-cv/blob/master/scripts/dete ...

  10. TensorFlow学习之 图像预处理

    import tensorflow as tf import matplotlib.pyplot as plt image_raw_data = tf.gfile.GFile("./pict ...