你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

KEIL&Stm32 FATFS配置

[复制链接]
STMCU小助手 发布时间:2022-8-27 18:38
1. 移植前期准备
        上一部分我们已经成功移植搭建完成LVGL的关于visual studio2022的PC模拟器,所有的LVGL的驱动源码啥的都在Simulator文件内,这个文件是我们移植到stm32F103所必须的。

        我们需要准备一个KEIL的工程,里面需要包含屏幕的驱动,SD卡的驱动以及其他的底层驱动,这个根据自己的需要去添加,其他的关于Stm32的教程有很多,这里不在过多啰嗦。

        FATSF文件系统的移植主要是在未来创建项目时将界面所需的图片字库等大文件存放到内存卡中,减小Stm32的内存占用率,所以我们在移植LVGL文件之前把FATFS文件系统移植到项目中。

    注意:以后的keil工程的配置以及像源码移植的头文件包含到keil工程中的操作,如果没有特别需要注意的,后续不再提及,大家自己配置一下就好了。

2. keil配置
        下面是关于KEIL工程的建立的几个文件。

Libraries--Stm32的固件库

Project----KEIL工程项目

Simulator--上一期建立的Visual studio2022的模拟器文件

User--------外设驱动文件

LUYK`{CXT2RB9I10S@GR.png

        USER文件夹内创建几个外设驱动

APP---后期可以添加界面文件

BSP---LCD屏幕驱动、SD卡驱动、RTC配置

LVGL-LVGL的屏幕驱动,输入驱动(触摸屏),SD卡驱动

FATFS--FATFS的文件系统源码用来管理SD卡文件



    3.FAFS移植
FatFs是用于小型嵌入式系统的通用FAT/exFAT文件系统模块。FatFs模块按照ANSIC(C89)编写,并与磁盘输入/输出层完全分离。因此,它独立于平台。它可以整合到资源有限的小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等。此外,这里还提供了用于微型微控制器的Petit FatFs模块。

        FATFS有两个版本,一个大版本,一个小版本。小版本主要用于8位机(内存小)使用。我们这里使用大版本。

点击FatFs R0.14b进行下载。

4Y0H[DW)~U0~0KL_WI}DF$F.png

    下载下来的FATFS源码的只有三个文件,这里我们只需要source文件夹下面的文件。

RUOO3PV~MTI)H@MD7T0YMY4.png

        我们需要将source文件夹内的所有.c和.h文件全部复制到KEIL工程的USER/FATFS文件下面。

9EGT08EPSCT]W~D$(A1QG}I.png

ff.c           FATFS模块,应用层源文件

  ffconf.h       FatFs模块的配置文件,需要修改。

  ff.h           FATF和应用程序模块的通用包含文件。

  diskio.h       常见包括FATF和磁盘输入/输出模块的文件。

  diskio.c       将现有磁盘输入/输出模块连接到FATF的粘合功能示例,底层接口,需要修改。

  ffunicode.c    可选Unicode实用程序函数。

  ffsystem.c     可选O/S相关函数的示例。

  此存档中不包括低级磁盘输入/输出模块,因为FATF模块只是一个通用文件系统层,它不依赖于任何特定的储设备。我们需要提供SD卡的写入的低级别磁盘输入/输出模块控制连接到SD卡设备。

    4.FATFS配置
    将Fatfs文件夹内的文件添加到KEIL工程中。

KQU$TQ1F2N7IVZ[T@CEFS_C.png

我们只需要配置diskio.c, ffconf.h两个文件

4.1 diskio.c文件修改
    1) 添加SD卡驱动头文件

    2)注释掉不需要的RAM,MMC,USB宏定义,添加新的SD卡宏定义

OVW6C3YLBR61M6D_PVPF15S.png

    3)}修改 disk_status函数,这个函数主要是获取SD卡状态,不使用是直接返回RES_OK

VGE8}2LO%]AQYS8K)PN0VD6.png


    4)修改disk_initialize 函数初始化SD卡驱动 返回值: 0:成功。1:失败

WQFA_3Y~TGSR6%5YHZR]C]X.png

        5)修改 disk_read 函数 SD卡读任意扇区的函数

1_~(GJE1BR7(B%[BT60Y{WU.png


        6)修改 disk_write 函数 SD卡写任意扇区的函数

[6N75%PU{(G5RCC_3B54CPD.png

        7)修改  disk_ioctl 函数 填充ioctl命令功能。这些功能是标准的命令,在diskio.h有定义

G${MI]~~DKBU4BOSC]~_9[S.png

    4.2  ffconf.h 文件修改
        1)修改编码格式

            FATFS支持多种文件编码格式,支持中文和英文

    我们只需要修改#define FF_CODEPAGE 936宏就可以,源码里面有编码格式对应的定义

        将这个宏定义为936编译后发现代码占用空间特别大,比较移植之前RO Size 多了一百K

%M3${$}LL)1F7XP2]}OO}7P.png

        而使用437后发现空间占用就比较小了,所以我们只需要将编码格式宏定义为437,SD卡内的文件夹和所有文件都命名为英文就可以了。

A`UM0`][IPFAXO6M%MQD5NQ.png

        2) 修改支持长文件名

            这一步需要实现动态内存分配函数在ffsystem.c文件增加 #include <stdlib.h>头文件

            #define FF_USE_LFN 3  // 3:使用堆上的动态工作缓冲区启用LFN

            #define FF_MAX_LFN 255

        3)ff.h中添加时间获取函数

            DWORD为32位的变量

31-25位:年

24-21位:月

20-16位:日

15-11位:时  

10-5位:分钟   

4-0位:秒


                DWORD get_fattime(void)

                {

                    DWORD time = 0;

                    RTC_Get();

                    time = ( (

                     (calendar.w_year+20) << 25) |

                     (calendar.w_month << 21 ) |

                     (calendar.w_date << 16 ) |

                     (calendar.hour << 11 ) |

                     (calendar.min << 5 ) |

                     (calendar.sec ));

                        return time;

                }

            4)修改堆栈空间

079SW5WNNJOCNDI[7RB9JUX.png

到此FATFS文件系统全部移植完成
作者:鹰头猫咪喵喵鱼


收藏 评论0 发布时间:2022-8-27 18:38

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版