OpenEdv-开源电子网

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

请教一下,fatfs系统里的f_write如何写入变量?

[复制链接]

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
发表于 2022-11-1 13:34:54 | 显示全部楼层 |阅读模式
1金钱
请教一下,fatfs系统里的f_write如何写入变量?

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

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 13:36:17 | 显示全部楼层
  1.                 f_res = f_open(&fil, "1.txt", FA_OPEN_APPEND | FA_WRITE);
  2.                                 if(f_res != FR_OK)
  3.                                 {
  4.                                         MX_FATFS_Init();
  5.                                         f_mount(&fs, test, 1);
  6.                                 }
  7.                                  f_res = f_write(&fil, "ADR\r\n" ,sizeof(ADR), &bw);
  8.                                 f_close(&fil);
复制代码

我现在的函数是这样的,实现不了,ADR是采集的ADC值
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 13:43:50 | 显示全部楼层
支持者2400 发表于 2022-11-1 13:36
我现在的函数是这样的,实现不了,ADR是采集的ADC值

f_res = f_open(&fil, "1.txt", FA_OPEN_APPEND | FA_WRITE);
比如我想建立一个txt文本,文本的名称如何使用变量定义?比如当前的RTC时间为文本名字?
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-11-1 13:44:11 | 显示全部楼层
"ADR\r\n"是字符串,
改为 &ADR试试,传递指向变量的指针.

专治疑难杂症
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 13:47:22 | 显示全部楼层
LcwSwust 发表于 2022-11-1 13:44
"ADR\r\n"是字符串,
改为 &ADR试试,传递指向变量的指针.
  1. f_res = f_write(&fil, &ADR ,sizeof(ADR), &bw);
复制代码

输出的是一堆??????????????问号
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-11-1 14:04:29 | 显示全部楼层
支持者2400 发表于 2022-11-1 13:47
输出的是一堆??????????????问号

什么输出问号?不是写入文件吗?用ultra edit打开以16进制显示看看.
数据转字符,百度一下vsprintf.
专治疑难杂症
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 14:05:35 | 显示全部楼层
LcwSwust 发表于 2022-11-1 14:04
什么输出问号?不是写入文件吗?用ultra edit打开以16进制显示看看.
数据转字符,百度一下vsprintf.

就是往a.txt文本里写AD值,打开后,都是??????
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-11-1 14:07:59 | 显示全部楼层
f_printf 更适合你  不过学习学习 一边学一边练习  建议你看看别人的代码
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 14:09:52 | 显示全部楼层
nashui_sx 发表于 2022-11-1 14:07
f_printf 更适合你  不过学习学习 一边学一边练习  建议你看看别人的代码

有没有这方面的资料,您分享一下,就是往SD卡里写变量值与用变量命名文档的
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-11-1 14:26:05 | 显示全部楼层
本帖最后由 nashui_sx 于 2022-11-1 14:27 编辑
支持者2400 发表于 2022-11-1 14:09
有没有这方面的资料,您分享一下,就是往SD卡里写变量值与用变量命名文档的
  1. //文件名自增(避免覆盖)
  2. //组合成:形如"0:PICTURE/00000.txt"的文件名
  3. //u32 index;//给个起始序号,防止每次都从0查询太慢
  4. //new_path_and_name(File_return,(u8 *)"0:haha/","my",&index,(u8 *)".txt"); //想要生成根目录 0:haha/my****.txt 文件夹
  5. u8 new_path_and_name(u8 *pname,u8 *lujing,u8 *wenjiantou,u32 *index,u8* leixing)
  6. {         
  7.         u8 res;        
  8.         u8 lujing_ok[50];

  9.     sprintf((char*)lujing_ok,"%s",lujing);
  10.     if(lujing_ok[strlen((const char*)lujing_ok)-1]=='/')        
  11.         lujing_ok[strlen((const char*)lujing_ok)-1]=0;

  12.         res=f_mkdir((const TCHAR*)lujing_ok);//路径不存在就创建

  13.         if(res!=FR_OK)  
  14.         {
  15.           if(res!=FR_EXIST)
  16.                 return res;
  17.         }
  18.         
  19.         while((*index)<0xffff)
  20.         {
  21.                 sprintf((char*)pname,"%s/%s%05d%s",lujing_ok,wenjiantou,(*index),leixing);
  22.                 res=f_open(&file,(const TCHAR*)pname,FA_READ);//尝试打开这个文件
  23.                 if(res==FR_NO_FILE)//该文件名不存在=正是我们需要的
  24.         {
  25.             res=f_open(&file,(const TCHAR*)pname,FA_OPEN_EXISTING|FA_READ|FA_WRITE|FA_OPEN_ALWAYS);//尝试创建这个文件
  26.             if (res==0)
  27.             {
  28.                 f_close(&file);
  29.             }
  30.             (*index)++;//指向下一个
  31.             return res;//该文件不存在=正是我们需要的.        
  32.         }
  33.                 (*index)++;
  34.         }
  35.     *pname=0;
  36.         return FR_NO_FILE;
  37. }
复制代码



写变量移植R0.14b及以后的fatfs版本  带直接用f_printf print怎么用f_printf怎么用
之前的版本用sprintf+f_write    记得R0.14b之前的版本也有f_printf  好像是不支持float还是啥 记不清了
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 14:34:40 | 显示全部楼层
nashui_sx 发表于 2022-11-1 14:07
f_printf 更适合你  不过学习学习 一边学一边练习  建议你看看别人的代码

                        HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);//????
                        HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);//????
                        sprintf(ttbuf1,"%02d/%02d/%02d%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date,GetTime.Hours, GetTime.Minutes, GetTime.Seconds);

                                f_res = f_open(&fil, (const TCHAR *)&ttbuf1, FA_OPEN_APPEND | FA_WRITE);
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 14:35:02 | 显示全部楼层
支持者2400 发表于 2022-11-1 14:34
HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);//????
                        HAL_RTC_GetDate(&hrtc, &GetData, RT ...

为什么这样不行呢
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-11-1 14:35:18 | 显示全部楼层
支持者2400 发表于 2022-11-1 14:05
就是往a.txt文本里写AD值,打开后,都是??????

因为存的是数据,不是字符,就像串口助手发送16进制数据.
专治疑难杂症
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-11-1 14:39:14 | 显示全部楼层
支持者2400 发表于 2022-11-1 14:34
HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);//????
                        HAL_RTC_GetDate(&hrtc, &GetData, RT ...

你估计ttbuf1弄出来四个啥  你看看你电脑的文件路径是啥c:/123.txt  这样的把
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-11-1 15:06:40 | 显示全部楼层
nashui_sx 发表于 2022-11-1 14:39
你估计ttbuf1弄出来四个啥  你看看你电脑的文件路径是啥c:/123.txt  这样的把
  1.                                         HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);//????
  2.                         HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);//????
  3.                         sprintf(ttbuf1,"%02d%02d%02d%02d%02d%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date,GetTime.Hours, GetTime.Minutes, GetTime.Seconds);
  4. //READ_RTC();
  5.                         //        sprintf(ttbuf1,"%d",123);
  6.                                 f_res = f_open(&fil, (uint8_t *)ttbuf1, FA_OPEN_APPEND | FA_WRITE);
复制代码

我这个命名成功了,但是建立的却不是txt文本
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-11-1 18:42:25 | 显示全部楼层
支持者2400 发表于 2022-11-1 15:06
我这个命名成功了,但是建立的却不是txt文本

我觉得你这不对 ttbuf1不是个路径格式
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 21:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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