OpenEdv-开源电子网

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

FATFS在STM32F103下写功能的求助

[复制链接]

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-6-10
在线时间
18 小时
发表于 2016-2-3 15:41:16 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 king_of_wind 于 2016-2-4 12:38 编辑

朋友们好, 我使用STM32F103R8T6通过SPI2驱动SD卡, 移植了FATFS后, 读功能正常, 写功能不正常, 奇怪的现象是, 如果我要写的文件是个空文件, 就写不进去东西, 如果要写的文件内部本来有数据, 再往里写数据, 可以成功覆盖掉前面的数据. 真是很奇怪. 请问朋友们是否知道哪里出了问题?


捕获.JPG






最佳答案

查看完整内容[请看2#楼]

我看错了,你看下这个,f_open你这么填参数是不是错了 http://flying-in-rain.blog.163.com/blog/static/131868594201191351637334/
积极主动, 事在人为.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-2-3 15:41:17 | 显示全部楼层
本帖最后由 ricefat 于 2016-2-4 15:01 编辑
king_of_wind 发表于 2016-2-4 14:10
返回10不对吗? 请问返回值哪里不对?

我看错了,你看下这个,f_open你这么填参数是不是错了
QQ截图20160204145930.jpg
http://flying-in-rain.blog.163.com/blog/static/131868594201191351637334/


回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-2-3 19:14:01 | 显示全部楼层
正常的方法应该是打开文件后,找到文件末尾后在写入
回复

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-6-10
在线时间
18 小时
 楼主| 发表于 2016-2-4 10:28:43 | 显示全部楼层
ricefat 发表于 2016-2-3 19:14
正常的方法应该是打开文件后,找到文件末尾后在写入

    CData = f_open(&fsrc, "0:GOOD.TXT", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
    CData = f_write(&fsrc, "HelloWorld", 10, &ReadLen);
    f_close(&fsrc);

    Serial.print("RESULT:");
    Serial.println(ReadLen);

请问在以上这种情况下, 返回ReadLen的结果也是10, 文件也被创建了, 但是记事本打开文件, 就是文件里面没有数据.
积极主动, 事在人为.
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-2-4 12:45:06 | 显示全部楼层
f_write
The f_write writes data to a file.


FRESULT f_write (
  FIL* fp,          /* [IN] Pointer to the file object structure */
  const void* buff, /* [IN] Pointer to the data to be written */
  UINT btw,         /* [IN] Number of bytes to write */
  UINT* bw/* [OUT] Pointer to the variable to return number of bytes written */
);   
你参数好像返回错了?
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-2-4 12:45:10 | 显示全部楼层
f_write
The f_write writes data to a file.


FRESULT f_write (
  FIL* fp,          /* [IN] Pointer to the file object structure */
  const void* buff, /* [IN] Pointer to the data to be written */
  UINT btw,         /* [IN] Number of bytes to write */
  UINT* bw/* [OUT] Pointer to the variable to return number of bytes written */
);   
你参数好像返回错了?
回复

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-6-10
在线时间
18 小时
 楼主| 发表于 2016-2-4 14:10:48 | 显示全部楼层
ricefat 发表于 2016-2-4 12:45
f_write
The f_write writes data to a file.

返回10不对吗? 请问返回值哪里不对?
积极主动, 事在人为.
回复

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-6-10
在线时间
18 小时
 楼主| 发表于 2016-2-4 17:01:03 | 显示全部楼层
我终于找到问题了. 问题就在于写SD卡以后, 等待SD卡回复完毕信号. 要多等待一些时间, 否则就会返回超时(ErrCode=2).  @正点原子


捕获.jpg


积极主动, 事在人为.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 08:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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