OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4804|回复: 0

STM32 FATFS f_write没报错但是没写进去的问题

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2022-1-16
在线时间
10 小时
发表于 2022-8-31 11:16:40 | 显示全部楼层 |阅读模式
5金钱
请问一下各位前辈,在下参考 STM32 Mini的教程,用SPI驱动SD卡,并照着教程移植了FATFS 文件系统,但是发现了一个很奇怪的问题:
        不挂载文件系统,SPI读写 扇区 正常
        挂载FATFS系统,f_open - f_read -f_close,可以把SD卡中txt文件中的内容读出来

        但是,挂载FATFS系统,f_open - f_write -f_close,这个过程返回值全部为(FR_OK:成功),整个过程没有报错,但用Windows读的时候,是没有写入内容的,
        文件如果事先不存在,只会创建一个文件,但是只有 0KB ,请各位大哥指教一下什么原因啊


软硬件平台:
       SPI驱动: 正点原子MiNi板,SPI 驱动SD卡SPI配置
       硬件平台:正点原子 开源飞控STM32F405

已经换过2张SD卡,现象均一致
SD卡格式化为FAT32,块区大小也修改过,还是无法写入
尝试加入 f_sync(&FileSystemDst);,没有解决
ffconf.h中的 READONLY配置是 0

现将main函数 贴上来,请各位大哥帮忙看下什么原因,感激不尽


int main(void)
{

        //FAT功能测试:格式化测试,文件写入测试,文件读取测试(基本功能)
        FATFS fs; //FatFs文件系统对象

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);                //延时初始化
        uart_init(115200);        //串口初始化波特率为115200
        LED_Init();                                  //初始化与LED连接的硬件接口  

        while(SD_Initialize())//检测不到SD卡
        {
                printf("没有 SD 卡\n");
                GPIO_SetBits(GPIOB,GPIO_Pin_9 );//GPIOF9,F10设置高,灯灭
                delay_ms(500);  
                GPIO_ResetBits(GPIOB,GPIO_Pin_9 );//GPIOF9,F10设置高,灯灭
                delay_ms(500);
        }
       
        res = f_mount(&fs, "0:", 1 );
        if (res != FR_OK)
   {
        printf("挂载文件系统失败 (%s)\r\n", FR_Table[res]);
   }
   else
   {
        printf("挂载文件系统成功 (%s)\r\n", FR_Table[res]);
   }

        res = f_open( &FileSystemDst , "0:/Demo1.TXT", FA_OPEN_ALWAYS | FA_WRITE );
        if( res == FR_OK )/* 对f_open()函数的返回值进行检查 */
        {
                printf("File  Open SUCCESS! \n\t");
                                
                res = f_lseek(&FileSystemDst, f_size(&FileSystemDst));
                if(res != FR_OK)
                        printf("f_lseek失败 (%s)\r\n", FR_Table[res]);
                else
                        printf("f_lseek成功 (%s)\r\n", FR_Table[res]);

                res = f_write( &FileSystemDst ,  TxFileBuffer  , sizeof(TxFileBuffer) , &bw);
                f_sync(&FileSystemDst);
                if(res != FR_OK)
                        printf("f_write失败 (%s)\r\n", FR_Table[res]);
                else
                        printf("f_write成功 (%s)\r\n", FR_Table[res]);
                /* 关闭文件 */
                f_close(&FileSystemDst);
        }
        else
                printf("f_open error! \r\n");


        f_mount(0, "0:", 0 );
        while(1)
        { }

}
谢谢各位!
@正点原子



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-8 18:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表