TA的每日心情 | 奋斗 2023-7-6 08:48 |
---|
签到天数: 169 天 连续签到: 1 天 [LV.7]常住居民III
|
这里使用了开发板上的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的文件。
打开文件,文件内容与程序中写入的内容是一样的。
|
|