打印
[其他ST产品]

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

[复制链接]
446|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的软件包。


使用特权

评论回复
沙发
丢丢手绢666|  楼主 | 2023-6-29 16:39 | 只看该作者
准备工作
移植前准备工作需要两个文件:包含完整驱动的基础工程和ST官网下载的STM32CubeH7。

(1)cube [STM32H7]的文件路径为:\STM32CubeH7-master\STM32CubeH7-master\Middlewares\Third_Party\FatFs

使用特权

评论回复
板凳
丢丢手绢666|  楼主 | 2023-6-29 16:39 | 只看该作者
(2)cube [STM32H7]的文件路径为:\STM32CubeH7-master\STM32CubeH7-master\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone

使用特权

评论回复
地板
丢丢手绢666|  楼主 | 2023-6-29 16:40 | 只看该作者
根据上图,需要使用的文件Inc文件夹中的 “ffconf.h”. 以上就完成所有的文件准备工作。

使用特权

评论回复
5
丢丢手绢666|  楼主 | 2023-6-29 16:41 | 只看该作者
基础工程准备
(1)将cube包 [STM32H7]的文件路径为:\STM32CubeH7-master\STM32CubeH7-master\Middlewares\Third_Party\FatFs,的整个FatFs拷贝到基础工程的根目录下(这里用FATFS来替代FatFs)。

使用特权

评论回复
6
丢丢手绢666|  楼主 | 2023-6-29 16:41 | 只看该作者

使用特权

评论回复
7
丢丢手绢666|  楼主 | 2023-6-29 16:41 | 只看该作者
将文件路径:\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文件夹中。如下图:

使用特权

评论回复
8
丢丢手绢666|  楼主 | 2023-6-29 16:42 | 只看该作者
将文件路径 \STM32CubeH7-master\STM32CubeH7-master\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone\Inc中的文件"ffconf.h"拷贝到基础工程中的 FATFS文件夹下的src文件夹中。如下图:

使用特权

评论回复
9
丢丢手绢666|  楼主 | 2023-6-29 16:43 | 只看该作者
建立基础工程文件

我用的正点原子提供的例程作为基础工程。



添加编译路径,如下图:

至此,基础工程建立完毕。

使用特权

评论回复
10
丢丢手绢666|  楼主 | 2023-6-29 16:43 | 只看该作者
修改FATFS文件中的diskio.c文件
因为正点原子的FATFS例程中,加入了内存管理模块,非常的占内存,基本在无法运行其他自己的算法代码,所以这也是我自己移植FATFS的原因。但正点原子FATFS例程中的diskio.c文件也是可以使用的,但需要简化。如下图,我用第一个函数disk_read()来举例。


使用特权

评论回复
11
丢丢手绢666|  楼主 | 2023-6-29 16:44 | 只看该作者
上图为正点原子提供的例程中的disk_read() 函数,可以看出该函数中包含了SD_CARD, EX_FLASH 和 EX_NAND. 但是实际在我的项目中,FATFS系统只需要挂在SD卡就行,不需要其他二者。所以为了移植方便,我找了一个cube包中自带的diskio.c文件作为基础文件。如下图:



使用特权

评论回复
12
丢丢手绢666|  楼主 | 2023-6-29 16:44 | 只看该作者
根据cube包中自带的diskio.c文件,我将正点原子例程中所要用到的SD_CARD部分进行移植。如下图所示(这里还是以disk_read为例,其他函数参考该函数移植模式,都是一样的移植方法)。


移植完diskio.c中所有的函数后,进行编译。

使用特权

评论回复
13
丢丢手绢666|  楼主 | 2023-6-29 16:44 | 只看该作者
结果验证
在这一部分,需要进行上面所讲的移植后的验证工作。
(1)验证主函数编写,如下图所示:

使用特权

评论回复
14
丢丢手绢666|  楼主 | 2023-6-29 16:44 | 只看该作者
运行该函数后,没有产生printf输出,说明FATFS系统移植成功,并成功挂载。

使用特权

评论回复
15
Undshing| | 2023-7-1 23:22 | 只看该作者
ac6配置有什么不同吗?

使用特权

评论回复
16
童雨竹| | 2023-12-30 07:10 | 只看该作者

代码量小的时候用来做条件判断

使用特权

评论回复
17
Wordsworth| | 2023-12-30 08:13 | 只看该作者

在直流电流上叠加了一些小的交流电流分量

使用特权

评论回复
18
Clyde011| | 2023-12-30 09:16 | 只看该作者

连接点是产生控制IC所要检测的小电压的所有器件的公共连接点

使用特权

评论回复
19
公羊子丹| | 2023-12-30 10:09 | 只看该作者

这是个再正常不过的coding习惯

使用特权

评论回复
20
万图| | 2023-12-30 11:12 | 只看该作者

宽度则与电感量和电阻量成反比

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

394

帖子

0

粉丝