可王2233 2023-03-22 19:14 采纳率: 0%
浏览 65
已结题

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
  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-03-22 19:57
    关注

    参考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) 来写入整个缓冲区的内容。

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月23日
  • 修改了问题 3月22日
  • 赞助了问题酬金15元 3月22日
  • 修改了问题 3月22日
  • 展开全部

悬赏问题

  • ¥30 靶向捕获探针设计软件包
  • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集