OpenEdv-开源电子网

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

stm32能写入数据到SD卡“/1.txt”的文件里吗?

[复制链接]

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
发表于 2023-1-19 19:27:34 | 显示全部楼层 |阅读模式
如果只有写入数据到SD卡某扇区的方式,那如何写入才能写入到“/1.txt”文件里呢?(为了方便拔出SD卡后插进电脑里看)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

133

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1355
金钱
1355
注册时间
2018-3-5
在线时间
737 小时
发表于 2023-1-20 09:54:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-20 15:16:10 | 显示全部楼层

怎么用?教教我
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-21 03:34:25 | 显示全部楼层

你有示例吗?网上的太杂了
回复 支持 反对

使用道具 举报

30

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2021-7-26
在线时间
194 小时
发表于 2023-1-21 13:16:15 | 显示全部楼层
write_SD=f_open(&fnew,"0:/date1.txt", FA_OPEN_ALWAYS|FA_WRITE);break;
write_SD = f_lseek(&fnew,f_size(&fnew));
write_SD= f_write(&fnew, WriteBuffer , sizeof(WriteBuffer), &fnum);
f_close(&fnew);
这样
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-23 14:39:50 | 显示全部楼层
精英板 发表于 2023-1-21 13:16
write_SD=f_open(&fnew,"0:/date1.txt", FA_OPEN_ALWAYS|FA_WRITE);break;
write_SD = f_lseek(&fnew,f_si ...

为什么我在官方下载的程序文件有错误?错误在diskio.c里
D:\用户目录\我的图片\官方fatfs文件的报错.png
D:\用户目录\我的图片\官方fatfs文件的报错2.png
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-23 14:41:01 | 显示全部楼层
D:\用户目录\我的图片\官方fatfs文件的报错.png
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-23 15:01:58 | 显示全部楼层
精英板 发表于 2023-1-21 13:16
write_SD=f_open(&fnew,"0:/date1.txt", FA_OPEN_ALWAYS|FA_WRITE);break;
write_SD = f_lseek(&fnew,f_si ...

好像上传不了图片。其中一个警告在diskio.c里的第32行RAM_disk_status();函数,报错内容是warning:implicit declaration of function 'RAM_disk_status' is invalid in c99;网上说是没包含 .h文件的位置,但是哪个文件呢?我已经包含了下载到的压缩包source里所有的 .h文件。
还有keil的输出台也输出错误..\OBJ\Template.axf: Error: L6218E: Undefined symbol RAM_disk_status (referred from diskio.o).
如何解决呢?
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-23 15:55:18 | 显示全部楼层

RAM_disk_status();不存在是什么原因?
回复 支持 反对

使用道具 举报

30

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2021-7-26
在线时间
194 小时
发表于 2023-1-23 21:29:47 | 显示全部楼层
1684908828 发表于 2023-1-23 15:01
好像上传不了图片。其中一个警告在diskio.c里的第32行RAM_disk_status();函数,报错内容是warning:impli ...

RAM_disk_status();函数是什么,没见过
回复 支持 反对

使用道具 举报

30

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2021-7-26
在线时间
194 小时
发表于 2023-1-25 15:48:41 | 显示全部楼层
1684908828 发表于 2023-1-23 15:01
好像上传不了图片。其中一个警告在diskio.c里的第32行RAM_disk_status();函数,报错内容是warning:impli ...

RAM_disk_status没见过这个函数,是做什么的
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-25 16:55:03 | 显示全部楼层
精英板 发表于 2023-1-25 15:48
RAM_disk_status没见过这个函数,是做什么的

这个函数名翻译成中文是“RAM_磁盘_状态”,在从官方下载的程序源码里的每一个 .c文件里也找不到该函数;我的源码有错,要不发一份你的源码给我?
回复 支持 反对

使用道具 举报

30

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2021-7-26
在线时间
194 小时
发表于 2023-1-25 20:11:39 | 显示全部楼层
1684908828 发表于 2023-1-25 16:55
这个函数名翻译成中文是“RAM_磁盘_状态”,在从官方下载的程序源码里的每一个 .c文件里也找不到该函数; ...

正点原子的例程你没有么,FATFS实验里,我给你也就给这个啊
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-25 20:41:25 | 显示全部楼层
精英板 发表于 2023-1-25 20:11
正点原子的例程你没有么,FATFS实验里,我给你也就给这个啊

找到了,多谢提醒。有空再测试一下
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-27 18:48:09 | 显示全部楼层
本帖最后由 1684908828 于 2023-1-27 18:51 编辑
精英板 发表于 2023-1-21 13:16
write_SD=f_open(&fnew,"0:/date1.txt", FA_OPEN_ALWAYS|FA_WRITE);break;
write_SD = f_lseek(&fnew,f_si ...

读取txt文件内容又是怎样的?我读到的是乱码
文件里的内容是:This is a file for testing SD card reading and writing.
但读取一字节读到的是:琅 I.
以下是我的代码:
  1. //读取txt文件。filePath=文件路径
  2. void readTxt(char *filePath){
  3.         FIL fp;
  4.         TCHAR *buff;
  5.         FRESULT result = f_open(&fp, filePath,FA_READ);
  6.         printf("正在读取txt文件%s\r\n", filePath);
  7.         f_gets(buff, 1, &fp); //读取
  8.         printf("%s\r\n",buff); //输出读取到的
  9.         result = f_close(&fp);
  10. }
复制代码




回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-28 03:18:00 | 显示全部楼层
精英板 发表于 2023-1-21 13:16
write_SD=f_open(&fnew,"0:/date1.txt", FA_OPEN_ALWAYS|FA_WRITE);break;
write_SD = f_lseek(&fnew,f_si ...

不知道是什么原因,我写过一个合并字符串的功能也是无法正常输出字符串到串口,以下是我的代码:
  1. void outReturn(void){
  2.         char str1[] = "my string 1";
  3.         char str2[] = "string 2";
  4.         char *strCat = (char*)malloc(strlen(str1) + strlen(str2)); //分配内存
  5.         sprintf(strCat,"%s%s",str1,str2); //合并
  6.         printf("%s",strCat); //输出
  7. }
复制代码


回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-28 20:58:39 | 显示全部楼层
本帖最后由 1684908828 于 2023-1-28 21:00 编辑
1684908828 发表于 2023-1-27 18:48
读取txt文件内容又是怎样的?我读到的是乱码
文件里的内容是:This is a file for testing SD card read ...

参考了官网,把代码改成如下就行了(但中文是乱码,要自己把读取到的中文转换成utf-8才行):
  1. //读取文本文件并显示
  2. char readTxt2(void){
  3.         FATFS FatFs;    //逻辑驱动器的工作区
  4.     FIL fil;        //文件对象
  5.     char line[100]; //行缓冲区
  6.     FRESULT fr;     //fatfs返回代码
  7.     //为默认驱动器提供工作区
  8.     f_mount(&FatFs, "", 0);
  9.     //打开文本文件
  10.     fr = f_open(&fil, "Test/test.txt", FA_READ);
  11.     if (fr) return (int)fr;
  12.     //读取每一行并显示
  13.     while (f_gets(line, sizeof line, &fil)) {
  14.         printf(line);
  15.     }
  16.     //关闭文件
  17.     f_close(&fil);
  18.         return 0;
  19. }
复制代码
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-28 21:02:52 | 显示全部楼层
1684908828 发表于 2023-1-28 03:18
不知道是什么原因,我写过一个合并字符串的功能也是无法正常输出字符串到串口,以下是我的代码:

能正常显示(但中文是乱码,要自己写代码转换成utf-8),是我把“char *strCat = (char*)malloc(strlen(str1) + strlen(str2)); //分配内存”写成“char *strCat;”了
回复 支持 反对

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
 楼主| 发表于 2023-1-30 23:17:47 | 显示全部楼层
精英板 发表于 2023-1-21 13:16
write_SD=f_open(&fnew,"0:/date1.txt", FA_OPEN_ALWAYS|FA_WRITE);break;
write_SD = f_lseek(&fnew,f_si ...

我按照你的代码写了个函数,但是只能写入4个字符,是什么原因?以下是我的代码:
  1. //写入内容到文件
  2. void testWrite(char *filePath, char *writeBuffer)
  3. {
  4.         FIL fnew;        //文件对象
  5.         FRESULT write_SD;     //fatfs返回代码
  6.         UINT fnum;
  7.         write_SD= f_open(&fnew,filePath, FA_OPEN_ALWAYS|FA_WRITE);
  8.         write_SD= f_lseek(&fnew,f_size(&fnew));
  9.         write_SD= f_write(&fnew, writeBuffer , sizeof(writeBuffer), &fnum);
  10.         if(write_SD==FR_OK)
  11.                 printf("-testWrite: 写入成功!\r\n");
  12.         else {
  13.                 printf("-testWrite: 写入失败!\r\n");
  14.         }
  15.         write_SD=f_close(&fnew);
  16. }
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 20:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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