STM32FATFS无法写入

依据正点原子的FATFS 例程编写
能挂载但是无法写入
double imu=-32.12;
char tb[20];

sprintf(tb,"%lf",imu);

f_mount(fs[0],"0:",1); //挂载SD卡
while(res = f_mount(fs[0],"0:",1)) //挂载SD卡失败
{
printf("\r\nMount SD Card Error!");
delay_ms(500);

}  

while(exf_getfree("0:",&total,&free))    //得到SD卡的总容量和剩余容量
{
    printf("\r\nSD Card Fatfs Error!\r\n");
    delay_ms(200); 
    LED0_Toggle;//DS0闪烁
}



                    
mf_scan_files("0:");
    FIL fil;         //文件对象
    UINT br;         //f_read函数返回已读出的字节数
    int size;
    //打开一个只读的文件
      f_open(&fil,"0:/imu1.txt",FA_WRITE);
      f_write(&fil,tb,sizeof(tb),&bw);
      f_close(&fil);
    f_open(&fil,"0:/imu1.txt",FA_READ);
    //移动打开的文件对象的文件读/写指针     0:指向文件开头
    f_lseek(&fil,0);

    size = f_size(&fil);
    printf("%d\n",size);
    char buff[size];
    //从SD卡中读出数据
    f_read(&fil,buff,size,&br);
    //关闭文件
    f_close(&fil);

    printf("%s\n",buff);
    printf("test");

////
//
//
结果如下

img

    202    3-03-2218:54:17.829]
   RX:BE中统志口LCDID:ffff
   KAND ID:0xdc909556
   total block num:4096
   goodblocknum:4096
   yalid block num:3809
   NAND ID:0xdc909556
   total blocknum:4096
   good blocknum:4096
   yalid block mum:38090:/imul.txt
   Otest

参考GPT:从你提供的代码和结果来看,问题可能出在写文件的部分。以下是我在代码中发现的问题和一些建议:

1 在打开文件的时候,你使用了 FA_WRITE 属性,这意味着你要以写模式打开文件。但是,你在调用 f_read() 之前并没有往文件中写入任何数据,因此文件的大小为零,读取到的数据也就是空的。建议你将属性改为 FA_READ,以只读模式打开文件。

2 当你在使用 f_read() 读取文件时,你传递了一个名为 tb 的缓冲区作为输入参数。但是,在之前的代码中,你并没有定义或初始化这个缓冲区。建议你将缓冲区的定义和初始化放到文件读取操作的前面,如下所示:

#define TB_SIZE 1024
char tb[TB_SIZE] = {0};

3 在调用 f_read() 时,你传递了一个名为 bw 的变量作为输入参数。但是,你没有定义或初始化这个变量。建议你将 bw 的定义和初始化放到文件读取操作的前面,如下所示:

UINT bw = 0;

4 最后,如果你要在文件中写入数据,你应该使用 f_write() 函数而不是 f_read()。例如,如果你要写入一个名为 buff 的缓冲区,可以使用以下代码:

f_open(&fil, "0:/imu1.txt", FA_WRITE | FA_OPEN_ALWAYS);
f_write(&fil, buff, strlen(buff), &bw);
f_close(&fil);

你可以将 strlen(buff) 替换为你要写入的字节数,或者使用 sizeof(buff) 来写入整个缓冲区的内容。

希望这些建议可以帮助你解决问题。