OpenEdv-开源电子网

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

ADC数据采集存储到SD卡的问题

[复制链接]

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
发表于 2015-10-24 15:26:53 | 显示全部楼层 |阅读模式
5金钱
本人大三学生,最近在做一个关于stm32   ADC 8通道数据采集存储到SD卡进行小波变换分析的一个小项目。
遇到ad采集的数据存储到SD卡是出现严重问题,还有就是不能多次循环采样,采集的只能存储一次!
还希望集思广益,大神的兄弟可以不惜吝啬指点我一下!若项目能成功必将代码开源啊!(本人邮箱:1294141271@qq.com
通过二维数组进行进行AD采样,通过busy中断进入AD采集,同时新建一个txt,把数据通过sprintf浮点转换成字符存储到SD卡!
 中断函数主要的部分代码如下:
   AD7606.CHn[0][AD7606.W_index] = AD7606_FSMC->AD7606_Read; 
   、、、、
   AD7606.CHn[7][AD7606.W_index] = AD7606_FSMC->AD7606_Read; 
   n=sprintf((char*)AD_Uart,"%3.2f,%3.2f,%3.2f,%3.2f,%3.2f,%3.2f,%3.2f%,%3.2f", AD7606.CHn[0][AD7606.R_index]/32768*5,AD7606.CHn[1][AD7606.R_index]/32768*5,AD7606.CHn[2][AD7606.R_index]/32768*5,AD7606.CHn[3][AD7606.R_index]/32768*5,AD7606.CHn[4][AD7606.R_index]/32768*5,AD7606.CHn[5][AD7606.R_index]/32768*5,AD7606.CHn[6][AD7606.R_index]/32768*5,AD7606.CHn[7][AD7606.R_index]/32768*5);     //把每个AD采样的数据转换成浮点数以字符格式存入数组AD_Uart
   f_mount(0,&fs);
   res = f_open(&fnew, "0:AD采样.txt", FA_CREATE_ALWAYS | FA_WRITE );  //创文件txt
  if ( res == FR_OK )
   {
     res = f_write(&fnew,  AD_Uart, n, &bw);  //写数据
     f_close(&fnew);  
   }
    else if(res == FR_EXIST)  //再次进入中断,文件已存在
     {
        f_lseek(&fnew,fnew.fsize);     //指针移操作
        res = f_write(&fnew, AD_Uart,n,&bw);   //写入第二次采集的数据
       f_close(&fnew);         
     }
  AD7606.R_index = (AD7606.R_index==(DATA_LEN-1))?0:AD7606.R_index+1;  //索引增加,进行下一次AD采样

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

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-11-21
在线时间
9 小时
发表于 2015-10-24 18:50:24 | 显示全部楼层
AD7606_Read为什么要给AD7606.CHn[0][AD7606.W_index] 0-7(共八个)不同通道的数组?
不能多次循环采样,采集的只能存储一次 什么意思?
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-24 22:58:13 | 显示全部楼层
回复【3楼】daska110:
---------------------------------
就是采样只能采一组,我的sd卡中就收到了一组(八个通道)的数据~
回复

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-11-21
在线时间
9 小时
发表于 2015-10-24 23:36:50 | 显示全部楼层
回复【4楼】时间总会慷慨:
---------------------------------
那你这八个通道数组里的值一样的啊,(都是AD7606_FSMC->AD7606_Read)
AD_Uart也就是八个重复的值,有什么意义

文件先close 再open
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-10-25
在线时间
3 小时
发表于 2015-10-25 15:16:31 | 显示全部楼层
问一下lz 你的sd卡移植文件系统后和数据采集的程序能成功存入数据吗,keil选项里的 use microlib这个勾选了吗?
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-25 15:31:53 | 显示全部楼层
回复【5楼】daska110:
---------------------------------
AD7606_FSMC->AD7606_Read 这句代码是硬件决定的,当AD7606的两个涉及采样的引脚连在一起的时候它采集一个通道之后会自动采集下一通道。

文件难道不是先创建(open)然后在close?!!
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-25 15:33:45 | 显示全部楼层
回复【6楼】suxiaoxi666:
---------------------------------
能存入数据的,就是采集到的不是我要的数据   0.00 ,0.00, 0.00, 0.00 ,0.00 ,0.00, 0.00, 0.00
主要问题是采集数据有问题,而且是只能采集一组8通道~  =、=//
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-25 15:35:26 | 显示全部楼层
回复【2楼】yklstudent:
------------------------------
我也想过这样,不过我的是中断里面采集的啊,不知道怎么再用dam把数据采集到一定大小再存到SD.  求助啊!
回复

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-11-21
在线时间
9 小时
发表于 2015-10-25 16:20:47 | 显示全部楼层
没明白什么问题,把工程和你采集的数据上传上来看看。
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-10-25
在线时间
3 小时
发表于 2015-10-25 18:49:23 | 显示全部楼层
回复【9楼】时间总会慷慨:
---------------------------------
 keil选项里 use microlib这个选上了吗 我遇到问题了,麻烦看一下你的选这个选项了没
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-25 22:09:20 | 显示全部楼层
回复【11楼】suxiaoxi666:
---------------------------------
还真没有勾,是不是会对sprintf函数有影响?
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-25 22:13:55 | 显示全部楼层
回复【12楼】时间总会慷慨:
---------------------------------
我觉得我的mdk软件有问题啊    无法用jtag,用的时候老是出现mdk应用停用的提示,然后就自动关闭软件了~
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-25 23:42:38 | 显示全部楼层
n=sprintf((char*)AD_Uart,"%3.2f,%3.2f,%3.2f,%3.2f,%3.2f,%3.2f,%3.2f%,%3.2f", AD7606.CHn[0][AD7606.R_index]/32768*5,AD7606.CHn[1][AD7606.R_index]/32768*5,AD7606.CHn[2][AD7606.R_index]/32768*5,AD7606.CHn[3][AD7606.R_index]/32768*5,AD7606.CHn[4][AD7606.R_index]/32768*5,AD7606.CHn[5][AD7606.R_index]/32768*5,AD7606.CHn[6][AD7606.R_index]/32768*5,AD7606.CHn[7][AD7606.R_index]/32768*5);     //把每个AD采样的数据转换成浮点数以字符格式存入数组AD_Uart

这句会不会有点问题???AD_Uart是这样定义的:unsigned char AD_Uart[30],而采集出来的数据转换为%3.2f为4字节的。
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-26 14:15:14 | 显示全部楼层
有哪个兄弟能帮忙看一下~
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-10-25
在线时间
3 小时
发表于 2015-10-26 14:45:19 | 显示全部楼层
楼主,我也研究这个问题呢,qq多少,想和你交流下
回复

使用道具 举报

5

主题

32

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2015-10-24
在线时间
1 小时
 楼主| 发表于 2015-10-27 13:38:44 | 显示全部楼层
回复【16楼】suxiaoxi666:
---------------------------------
QQ:1294141271
回复

使用道具 举报

14

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2016-5-16
在线时间
67 小时
发表于 2017-1-16 09:33:34 | 显示全部楼层
yklstudent 发表于 2015-10-24 17:48
AD+DMA,开辟缓存读取AD值,累计读到N个值再一次性存储到TF卡啊

如果要一次性存的话,怎么sprintf ?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 13:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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