STM32H7 移植FATFS文件系统(ARM-MDK(AC5))

1. FATFS特性

  FATFS 是一个完全免费开源的FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C 语言编写,所以具有良好的硬件平台独立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM 等系列单片机上而只需做简单的修改。它支持FATl2、FATl6 、FAT32 和exFAT(R0.12 及以后版本),支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8 位单片机和16 位单片机做了优化。
  FATFS 的特点有:
  ⚫ Windows 兼容的FAT 文件系统(支持FAT12/FAT16/FAT32/exFAT)
  ⚫ 与平台无关,移植简单
  ⚫ 代码量少、效率高
  ⚫ 多种配置选项
     支持多卷(物理驱动器或分区,最多10 个卷)
     多个ANSI/OEM 代码页包括DBCS
     支持长文件名、ANSI/OEM 或Unicode
     支持RTOS
     支持多种扇区大小
     只读、最小化的API 和I/O 缓冲区等

  FATFS 的源码可以在:http://elm-chan.org/fsw/ff/00index_e.html 这个网站下载到,目前最新版本为R0.14b. 或者下载ST官方的最新cube包,里面也有FATFS的软件包。

2. 准备工作

移植前准备工作需要两个文件:包含完整驱动的基础工程和ST官网下载的STM32CubeH7。

(1)cube [STM32H7]的文件路径为:\STM32CubeH7-master\STM32CubeH7-master\Middlewares\Third_Party\FatFs
Fig. 1
(2)cube [STM32H7]的文件路径为:\STM32CubeH7-master\STM32CubeH7-master\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone
Fig. 2
根据上图,需要使用的文件Inc文件夹中的 “ffconf.h”.
Fig. 3

以上就完成所有的文件准备工作。

3. 基础工程准备

(1)将cube包 [STM32H7]的文件路径为:\STM32CubeH7-master\STM32CubeH7-master\Middlewares\Third_Party\FatFs,的整个FatFs拷贝到基础工程的根目录下(这里用FATFS来替代FatFs)。
Fig. 4
(2)将文件路径:\FATFS\src\drivers中的原文件拷贝到新建的文件夹中[template],并将文件路径:\STM32CubeH7-master\STM32CubeH7-master\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone\Src中的文件"sd_diskio_dma.c" 和文件路径\STM32CubeH7-master\STM32CubeH7-master\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone\Inc中的文件"sd_diskio_dma.h" 拷贝到基础工程中的drivers文件夹中。如下图:
Fig. 5
Fig. 6
(3)将文件路径 \STM32CubeH7-master\STM32CubeH7-master\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone\Inc中的文件"ffconf.h"拷贝到基础工程中的 FATFS文件夹下的src文件夹中。如下图:
Fig. 7

4. 建立基础工程文件

我用的正点原子提供的例程作为基础工程。Fig. 8
添加编译路径,如下图:
Fig. 9
至此,基础工程建立完毕。

5. 修改FATFS文件中的diskio.c文件

因为正点原子的FATFS例程中,加入了内存管理模块,非常的占内存,基本在无法运行其他自己的算法代码,所以这也是我自己移植FATFS的原因。但正点原子FATFS例程中的diskio.c文件也是可以使用的,但需要简化。如下图,我用第一个函数disk_read()来举例。
Fig. 10
上图为正点原子提供的例程中的disk_read() 函数,可以看出该函数中包含了SD_CARD, EX_FLASH 和 EX_NAND. 但是实际在我的项目中,FATFS系统只需要挂在SD卡就行,不需要其他二者。所以为了移植方便,我找了一个cube包中自带的diskio.c文件作为基础文件。如下图:
Fig. 11
根据cube包中自带的diskio.c文件,我将正点原子例程中所要用到的SD_CARD部分进行移植。如下图所示(这里还是以disk_read为例,其他函数参考该函数移植模式,都是一样的移植方法)。
Fig. 12
移植完diskio.c中所有的函数后,进行编译。

6. 结果验证

在这一部分,需要进行上面所讲的移植后的验证工作。
(1)验证主函数编写,如下图所示:
Fig. 13
Fig. 14
Fig. 15
(2) 运行该函数后,没有产生printf输出,说明FATFS系统移植成功,并成功挂载。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值