FATFS保存CSV文件到SD卡无法追加数据解决

在STM32F429上使用FATFS文件系统时,遇到CSV文件追加数据被覆盖的问题。源代码示例显示在创建文件时使用了FA_CREATE_ALWAYS标志,导致每次写入都会覆盖原有内容。通过将FA_CREATE_ALWAYS改为FA_OPEN_ALWAYS,确保文件打开模式为追加,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在STM32F429的平台上移植FATFS文件系统时发现,在创建CSV文件后,每次追加数据都会将原先的覆盖掉。源代码如下:

u32 result;

uint8_t wtext1[] = "This is STM32 working with 1,ok\r\n";

uint8_t wtext2[] = "This is STM32 working with 2,ok\r\n";

uint8_t wtext3[] = "This is STM32 working with 3,ok\r\n";

if (f_mount(&FatFs,"", 1) == FR_OK

### STM32 使用 FatFS 文件系统读 SD #### 创建工程并配置CubeMX 为了使STM32能够通过FatFS文件系统与SD交互,首先需要利用STM32CubeMX工具来初始化项目设置。选择合适的微控制器型号,并启用SPI接口用于连接SD模块。同时激活外部中断线以便检测片插入/移除事件[^1]。 #### 添加必要的软件组件 在生成的工程项目中加入FatFS库的支持。这通常意味着要将`ff.c`, `ff.h`, `diskio.c`, 和其他关联头文件复制到指定目录下。对于具体的硬件平台而言,还需要提供底层驱动程序以支持特定存储介质的操作——这里即是指向SD的SPI通信层实现[^2]。 #### 修改主函数(main.c) 编辑入口文件`main.c`,定义全局变量指向工作区缓冲区以及根路径字符串;编初始化序列确保设备准备就绪之后再调用任何fatfs API 函数前完成挂载操作: ```c #include "ff.h" // ... other includes... FATFS fs; /* File system object */ char path[4]; /* Mount point */ int main(void){ HAL_Init(); SystemClock_Config(); // 配置系统时钟 MX_GPIO_Init(); // 初始化GPIO端口 MX_SPIx_Init(); // 初始化SPI外设 (替换为实际使用的SPI编号) f_mount(&fs, "", 0); // 尝试挂载卷 } ``` #### 实现基本功能测试 下面给出一段简单的例子展示怎样打开现有文本文件或将新内容保存至磁盘内: ```c FIL file; UINT bytes_written; if(f_open(&file,"test.txt",FA_READ | FA_WRITE| FA_OPEN_APPEND)==FR_OK){ const char *data="This is a test string."; if(f_write(&file,data,strlen(data),&bytes_written)!= FR_OK || strlen(data) != bytes_written){ Error_Handler(__FILE__,__LINE__); } f_close(&file); }else{ Error_Handler(__FILE__,__LINE__); } void Error_Handler(char* file,int line){ while(1){} // 错误处理逻辑可自定义扩展 } ``` 上述代码片段展示了如何追加模式打开名为`test.txt`的文件并向其中添加一些字符数据。如果遇到错误,则进入死循环等待调试介入[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值