FATFS文件系统打开一个文件并读出内容

使用FATFS读取U盘文件的示例
由于官方移植的FATFS是短文件名英文,因此调试时在U盘里创建了一个名为demo.txt的文件

   在USBH_USR_MSC_Application函数下添加了一段代码。


/**
* @brief  USBH_USR_MSC_Application
*         Demo application for mass storage
* @param  None
* @retval Staus
*/
int USBH_USR_MSC_Application(void)

uint8_t readTextBuff[]  = "                                                 ";
uint16_t bytesRead ;

f_open(&file,"0:demo.txt",FA_OPEN_EXISTING | FA_READ);
f_read(&file,readTextBuff,sizeof(readTextBuff ),(void *)&bytesRead );
if(bytesRead >0)
{
    LCD_UsrLog("%s ",readTextBuff);
    LCD_UsrLog("%d ",bytesRead);
}
else
{
    LCD_ErrLog("> demo.text can not be open ....");
}
f_close(&file);


 实验结果是打印出

        >host demo application using FAT_FS

        >34 

        这是事先存在demo.txt文件里的一段文字,共34个字符(包括空格)。


STM32使用FATFS文件系统操作U盘需要几个步骤: 1. **库初始化**: 首先,你需要下载包含FATFS库,通常它是开源的,可以在STM32CubeMX或者Keil MDK这样的IDE中找到。在项目配置中启用该库,分配合适的内存空间给FATFS。 2. **挂载文件系统**: 使用`f_mount()`函数将U盘驱动器挂载到指定的文件系统路径,例如`/sd`或`/flash`。这需要设备的具体描述符,比如`FATFS_Diskio`结构体。 3. **打开文件**: 使用`f_open()`打开你想要写的文件,提供文件名和访问模式(如只、写入等)。 4. **文件内容**: 对于取,可以使用`f_read()`函数从文件指针处开始取数据,直到达到设定的字节数或者文件结束。 5. **写入Flash**: 如果你想把取的数据保存到Flash中,首先需要确保Flash有相应的I/O接口支持,然后通过Flash API将内存中的数据写入Flash存储区域。 6. **更新到文件**: 如果文件是在Flash上修改后要写回U盘,使用`f_write()`将Flash的内容写回到之前打开文件中。 7. **关闭文件和卸载文件系统**: 最后别忘了使用`f_close()`关闭文件,`f_unmount()`卸载文件系统。 8. **错误处理**: FATFS可能抛出异常,记得加入适当的错误检查和处理代码。 ```c #include "fatfs.h" ... struct _FIL f; FILINFO fno; if (f_open(&f, "/sd/myfile.txt", FA_OPEN)) { // 打开文件 if (f_size(&f, &fno) == FR_OK) { // 检查文件大小 uint8_t *data = malloc(fsize); // 分配内存用于取 f_read(&f, data, fsize, &readbytes); // 文件内容 // 现在你可以把"data"内容写入Flash // 更新U盘文件 if (f_write(&f, data, readbytes, NULL) == FR_OK) { free(data); // 释放已取的数据 } else { // 处理写入失败 } } f_close(&f); // 关闭文件 } f_unmount(); // 卸载文件系统 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值