查看: 3857|回复: 0

【STM32746G-Discovery】基于FreeRTOS的Fatfs文件系统

[复制链接]
  • TA的每日心情
    奋斗
    2023-7-6 08:48
  • 签到天数: 169 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-7-6 08:51:53 | 显示全部楼层 |阅读模式
    分享到:
    这里使用了开发板上的TF卡接口,用于在TF卡上建立Fatfs文件系统,并新建一个文件,在文件写内容相应内容。
    开发板插上TF卡,这个座不是常见的,触点没有在板子侧,而是上侧。
    再来看程序,与所有的程序一样,首先就是对板子芯片的初始化。
    CPU_CACHE_Enable();HAL_Init();SystemClock_Config();初始化LED1,对Fatfs文件系统出错进行指示。
    BSP_LED_Init(LED1);由于使用了FreeRTOS,首先是新建一个StartThread任务。
    这个程序很简单,只有这一个任务,任务中,先是连接到SD卡设备。
    FATFS_LinkDriver(&SD_Driver, SDPath)挂载文件系统
    f_mount(&SDFatFs, (TCHAR const*)SDPath, 0)这里的SDFatFs是一个FATFS类型的结构体。
    成员有:
    typedef struct {  union{        UINT        d32[_MAX_SS/4]; /* Force 32bits alignement */             BYTE        d8[_MAX_SS];        /* Disk access window for Directory, FAT (and file data at tiny cfg) */    }win;        BYTE        fs_type;                /* FAT sub-type (0:Not mounted) */        BYTE        drv;                        /* Physical drive number */        BYTE        csize;                        /* Sectors per cluster (1,2,4...128) */        BYTE        n_fats;                        /* Number of FAT copies (1 or 2) */        BYTE        wflag;                        /* win[] flag (b0:dirty) */        BYTE        fsi_flag;                /* FSINFO flags (b7:disabled, b0:dirty) */        WORD        id;                                /* File system mount ID */        WORD        n_rootdir;                /* Number of root directory entries (FAT12/16) */#if _MAX_SS != _MIN_SS        WORD        ssize;                        /* Bytes per sector (512, 1024, 2048 or 4096) */#endif#if _FS_REENTRANT        _SYNC_t        sobj;                        /* Identifier of sync object */#endif#if !_FS_READONLY        DWORD        last_clust;                /* Last allocated cluster */        DWORD        free_clust;                /* Number of free clusters */#endif#if _FS_RPATH        DWORD        cdir;                        /* Current directory start cluster (0:root) */#endif        DWORD        n_fatent;                /* Number of FAT entries, = number of clusters + 2 */        DWORD        fsize;                        /* Sectors per FAT */        DWORD        volbase;                /* Volume start sector */        DWORD        fatbase;                /* FAT start sector */        DWORD        dirbase;                /* Root directory start sector (FAT32:Cluster#) */        DWORD        database;                /* Data start sector */        DWORD        winsect;                /* Current sector appearing in the win[] */        } FATFS;格式化TF卡。
    f_mkfs((TCHAR const*)SDPath, 0, 0)新建一个文件,文件名为STM32.TXT,这里使用了FA_CREATE_ALWAYS参数,实际上是打开一个文件,在文件不存在时新建。
    f_open(&MyFile, "STM32.TXT", FA_CREATE_ALWAYS | FA_WRITE)文件中写入相应内容,写入的内容是wtext指针所指向的内容,而wtest是一个数组。
    uint8_t wtext[] = "This is STM32 working with FatFs";写入完成后一定要关闭文件,写入的内容才会真的写入,若不关闭,是不能写入的。
    f_write(&MyFile, wtext, sizeof(wtext), (void *)&byteswritten);f_close(&MyFile);最后又打开了文件并读取内容,进行对比,看文件是不是写入成功了。
    f_read(&MyFile, rtext, sizeof(rtext), (UINT*)&bytesread);那么将TF卡拔下来,看一下TF卡上的内容。
    打开TF卡,可以看到有了一个名为STM32.TXT的文件。

    打开文件,文件内容与程序中写入的内容是一样的。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 23:14 , Processed in 0.126806 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.