OpenEdv-开源电子网

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

求大神,读取SD卡中FAT32系统的文本出错是什么原因

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2015-7-25
在线时间
18 小时
发表于 2018-8-17 09:37:03 | 显示全部楼层 |阅读模式
1金钱
简单描述要实现的功能:分步将几个数组中的字符串存储在SD卡txt文本上,并在需要的时候读取该文本内容,显示在屏幕
            但现在问题是:创建并且存储txt文本正常,卸卡后可通过电脑正确读出全部存储的数据,但通过f_read函数只能读出数组1中的数据,数组2、3...中的数据读不出来,更奇怪的是,如果将该文本在电脑上打开并且重新保存(不修改文本内容直接Ctrl+S)后,再次用通过f_read函数读取文本内容,就可以正常读出所有数据了,下面附上部分读写代码,不知道是不是版本兼容的问题(R0.09),请大神赐教
代码

将要存储的字符串:
BYTE FileBuffer1[] = "TianJinYLA Portable Gas Detector\r\n";
BYTE FileBuffer2[] = "\r\n\r\nDATE\tTIME\tDATA\r\n";

数据存储代码:
f_mount(0,&fs);        //磁盘信息注册
        res = f_open(&fdst,SDFileName,FA_CREATE_NEW | FA_WRITE);//新建一个文件
        if (( res == FR_OK )||(res == FR_EXIST))
        {
                res = f_write(&fdst, FileBuffer1, sizeof(FileBuffer1), &bw);        //便携式气体检测仪数据
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst,"GAS: ", 5, &bw);
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                switch(Gas_num)
                {
                        case 1:res = f_write(&fdst,"O2/%VOL", 7, &bw);break;
                        case 2:res = f_write(&fdst,"H2S/PPM", 7, &bw);break;
                        case 3:res = f_write(&fdst,"NH3/PPM", 7, &bw);break;
                        case 4:res = f_write(&fdst,"CO/PPM", 6, &bw);break;
                        case 5:res = f_write(&fdst,"HCL/PPM", 7, &bw);break;
                        case 6:res = f_write(&fdst,"SO2/PPM", 7, &bw);break;
                        case 7:res = f_write(&fdst,"CL2/PPM", 7, &bw);break;
        //                case 8:res = f_write(&fdst,"可燃气体/LEL", 14, &bw);break;
                        default:break;
                }
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst,"\r\nID: ", 6, &bw);
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst, IDbuf, 2, &bw);        //日期 时间 气体浓度       
                       
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst, FileBuffer2, sizeof(FileBuffer2), &bw);        //日期 时间 气体浓度
                f_close(&fdst);

          }
读取文本内容并打印代码:
res = f_open(&fdst,SDFileName_Open,FA_OPEN_ALWAYS | FA_READ);//打开当前索引下的文本
                if(!res)
                {
                        if(!f_read(&fdst,&buf_data,512,&num_temp))
                        {
                                #ifdef Debug
                                //printf("%s", SDFileName_Open);//长文件名
                                printf("%s", buf_data);//长文件名
                                #endif
                                Clect_Text(buf_data);//将SD文件内容显示到GUI界面
                        }
                }

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-18 01:48:16 | 显示全部楼层
可以参考下我们例程,或者仿真,看每个函数的返回值,是否正常。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 12:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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