用的是STM32F405+R0.09的FATFS。加入给你一张刚格式化的干净的卡,就做简单的读写测试,是没问题的。连续的短时间写入也没问题的。
但是,我程序是用定时器连续的将惯性数据以每隔5分钟的频率就新建一个文件存储数据,当存储的文件数大于几十个的时候(每个文件821KB),比如90个,后面的写入不会提示错误,文件也创建了,文件大小也有了。但是数据全部都是0.也就是说文件名称是有的,PC上也显示文件的大小,但是读取的数据全部都是0
PS:大家可以把焦点更多放在TF卡的文件系统各种限制上,因为一般写入几十个文件都不会出问题的。有没有遇到过同样的问题,万分感激啊
初始化:
fs = &fatfs;
res=f_mount(0, fs);
递增创建文件的代码:
do
{
sprintf(file_name,"imu/IMU_%d.1bsn",file_num);
if(flag_format==1)
break;
res = f_open( &fsrc,(char*)file_name, FA_CREATE_NEW | FA_WRITE);
printf("扫描中....%s,创造返回代码:%d
",file_name,res);
if(res==FR_EXIST)
file_num++;
}while(res!=FR_OK);
printf("创造完毕,刚才创造的文件名为:%s..
",file_name);
写入的代码:
res = f_write(&fsrc,TF_Packet,sizeof(TF_Packet), &br);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
谢谢回复,这个是没毛病的,因为用FA_CREATE_NEW创建文件,其实不单是创建文件,还判断当前编号的即将创建的文件是否存在,如果存在了说明这编号命名的文件就不能创建了,再往后递增一个数,创建新的编号的文件。至于写入,是不会出现你说的这种问题的,当前写入的是当前编号的文件,下次新的编号对应的文件创建了,就会写入下次的创建的文件。参考给原子哥的截图。
每个fatfs函数的调用,都要判断返回值!!
否则代码就不好找问题。
一周热门 更多>