OpenEdv-开源电子网

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

[miniF103] MINIV3 利用FATFS将ADC转换后的数据换行写入到SD卡测试程序

[复制链接]

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2018-10-30 21:55:07 | 显示全部楼层 |阅读模式
本帖最后由 EVahl 于 2020-5-13 20:07 编辑

前几天论坛有位用户用MINIV3板子将ADC转换后的数据写入到SD卡不能回车换行,并且出现之前写入的数据被覆盖现象,所以写了这个测试程序
测试程序基于FATFS实验例程修改,因为用到ADC,所以复制ADC实验例程的ADC文件夹下的驱动到工程当中同时在工程的分组管理当中添加adc.c和stm32f10x_adc.c,adc.h的路径也被添加进工程
在main.c中定义了定义了这几个变量方便在使用FATFS时使用
[mw_shl_code=c,true]FIL fil;
FRESULT res;
UINT bww;
[/mw_shl_code]
那位用户出现了之前写入的数据被覆盖的现象,在FATFS中可以调用f_lseek()解决:每次打开/创建文件之后,调用f_lseek()将文件对象的文件读写指针
移动到文件结束处[mw_shl_code=c,true]f_lseek (&fil,f_size (&fil));                                                                //文件对象的读写指针移动到文件结束处[/mw_shl_code]
不能出现换行写入数据的情况可以用sprintf()函数解决:
[mw_shl_code=c,true]sprintf((char*)buf,"Data is:%d \r\n",adcx);                                 //将数据写入到buf[/mw_shl_code]
写入数据的整个过程是:
[mw_shl_code=c,true]        if(t<6)
        {
                delay_ms(500);
                adcx=Get_Adc_Average(ADC_Channel_1,10);                                                //获取ADC转换后的值
                LCD_ShowxNum(60,100,adcx,4,16,0);                                                        //显示ADC的值
                sprintf((char*)buf,"Data is:%d \r\n",adcx);                                 //将数据写入到buf
                f_open(&fil,"0:/message.txt", FA_OPEN_ALWAYS|FA_WRITE);                //打开/创建文件对象
                f_lseek (&fil,f_size (&fil));                                                                //文件对象的读写指针移动到文件结束处
                f_write (&fil,buf,sizeof(buf),&bww);                                                //将buf中的数据写入到message.txt
                f_close (&fil);                                                                                                //关闭文件
                t++;
        }[/mw_shl_code]
用到的ADC引脚被悬空,所以数据5次换行写入的数据有变化
1.JPG
源工程见附件









MINIV3_利用FATFS将ADC转换后的数据写入到SD卡测试程序.rar

5.3 MB, 下载次数: 11052

429ADC采集存在SD卡里面.rar

19.02 MB, 下载次数: 850

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

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-10-30
在线时间
5 小时
发表于 2018-10-31 09:49:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-22
在线时间
30 小时
发表于 2019-3-29 09:29:08 | 显示全部楼层
求大佬解答疑惑!
图片1.png
图片2.png
回复 支持 反对

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-22
在线时间
30 小时
发表于 2019-3-29 09:29:57 | 显示全部楼层
汤文贤 发表于 2019-3-29 09:29
求大佬解答疑惑!

程序没有反应,不知道为什么,看不出问题出自哪
回复 支持 反对

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-22
在线时间
30 小时
发表于 2019-3-29 20:41:58 | 显示全部楼层
求问大佬,为何我改用DMA传输之后,整个程序就没有反应了!
回复 支持 反对

使用道具 举报

0

主题

295

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-3-26
在线时间
9 小时
发表于 2019-4-3 08:57:23 | 显示全部楼层
谢谢老司机分享!
回复 支持 反对

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2018-1-18
在线时间
22 小时
发表于 2019-5-29 13:21:24 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

8

主题

185

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-7-15
在线时间
47 小时
发表于 2019-8-11 13:21:28 | 显示全部楼层
谢谢分享,学习中
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-8-8
在线时间
9 小时
发表于 2019-8-12 16:12:34 | 显示全部楼层
你好,我看了你的stm 32 mini板子,关于fatfs将ADC数据写入SD卡的帖子,借用了您的程序跑了一下,把main函数最下面的循环函数里的t<6该成了100,应该就是循环100次,但是每次上机跑只能得到3个数据,请问可以帮我解答一下么
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2020-2-5
在线时间
25 小时
发表于 2020-2-5 15:29:34 | 显示全部楼层
汤文贤 发表于 2019-3-29 09:29
求大佬解答疑惑!

f_open()函数中 &fnew 要在exfuns.c 中声明
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-11-5
在线时间
10 小时
发表于 2020-4-2 08:57:06 | 显示全部楼层
牛了大佬
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-11-5
在线时间
10 小时
发表于 2020-4-2 10:24:16 | 显示全部楼层
楼主点赞,走了些弯路才看到你的贴
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2019-1-27
在线时间
19 小时
发表于 2020-8-8 21:25:12 | 显示全部楼层
感谢大佬
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2019-1-27
在线时间
19 小时
发表于 2020-8-10 11:39:20 | 显示全部楼层
Plancks 发表于 2019-8-12 16:12
你好,我看了你的stm 32 mini板子,关于fatfs将ADC数据写入SD卡的帖子,借用了您的程序跑了一下,把main函 ...

大佬解决了吗?我改成f407的,有时候能得到6个数据,有时候得到1个,有时候得到两个数据。感觉很迷,不知道问题出在哪
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2020-7-31
在线时间
15 小时
发表于 2020-8-20 11:25:19 | 显示全部楼层
说明一下自己遇到的问题和解决办法吧。
第一是这个工程调试的时候不能退出调试模式。
原因及解决办法:keil 5.25以后有中文路径就会出现这种情况。改英文就好了。
第二个就是写入只执行 了3次。而不是和楼主一样的次数。
原因是楼主没在函数末尾加while(1){}。循环是依靠整个main{}进行的,使用的if()进行判断中止。
这个写法我感觉很不好。不同板子或者不同keil版本可能都会有问题。
把if改while判断。
main末尾加while(1)就可以了。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-8-24
在线时间
3 小时
发表于 2020-9-2 18:20:04 | 显示全部楼层
他报错说我内存溢出了。。
..\OBJ\LED.axf: Error: L6406E: No space in execution regions with .ANY selector matching flash.o(.bss).
回复 支持 反对

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6084
金钱
6084
注册时间
2018-6-27
在线时间
524 小时
发表于 2020-10-28 18:17:50 | 显示全部楼层
谢谢分享,学习学习。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2020-10-31
在线时间
26 小时
发表于 2020-12-1 16:58:23 | 显示全部楼层
麻烦老师问一下,如何将这些字符串变成一个大的字符串,最后再写入,如果每采集一次写一次,会不会很快这个SD卡就坏了
回复 支持 反对

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2021-1-24 14:52:15 | 显示全部楼层
谢谢分享,正需要这方面的资料,学习一下!
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2014-12-13
在线时间
46 小时
发表于 2021-8-20 22:09:27 | 显示全部楼层
顶顶顶
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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