OpenEdv-开源电子网

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

STM32F407的ADC采集到的数据为12位,而存入SD卡的数据只能是八位的,怎么解决??求大神帮忙!感谢

[复制链接]

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
发表于 2014-11-25 19:59:34 | 显示全部楼层 |阅读模式
5金钱
如题,我定义了uint16_t  ADC_ConvertedValue1[100];//ADC采样结果缓存,16为的
                    uint8_t buf1[1200];//要写入SD卡的数据缓存,我个人理解(不知道对不对):因为SD卡写入的数据只能是八位的
所以我进行了:buf1[0]=(uint8_t)(ADC_ConvertedValue6[0]>>8);
                        buf1[1]=(uint8_t)(ADC_ConvertedValue6[0]);//把16位的ADC数据分离,然后分别赋给buf1
但是写到SD卡里面是一堆乱码,而写入的总文件大小和程序设计的一样,请问各位兄弟,这个问题怎么解决?感谢!

最佳答案

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

回复【7楼】Mars_man: --------------------------------- NO 直接就写ADC_ConvertedValue1即可,写入数据位100*2字节即可。 要熟练使用指针啊。 ADC_ConvertedValue1强制换换为u8*,那么就是指向200字节的u8指针了,这样,写入SD卡,就是原来的ADC_ConvertedValue1里面的数据。 你搞懂ascii和数字的区别,就知道怎么处理了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-25 19:59:35 | 显示全部楼层
回复【7楼】Mars_man:
---------------------------------
NO
直接就写ADC_ConvertedValue1即可,写入数据位100*2字节即可。
要熟练使用指针啊。
ADC_ConvertedValue1强制换换为u8*,那么就是指向200字节的u8指针了,这样,写入SD卡,就是原来的ADC_ConvertedValue1里面的数据。

你搞懂ascii和数字的区别,就知道怎么处理了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2012-7-16
在线时间
504 小时
发表于 2014-11-25 19:59:35 | 显示全部楼层
回复【11楼】Mars_man:
---------------------------------
把需要写入的数据通过spintf写入到需要写入SD卡的存储数组,然后通过指针写入SD,很方便。
回复

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
 楼主| 发表于 2014-11-25 20:00:59 | 显示全部楼层
在线等,希望各位予以帮助
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2014-11-25 21:27:46 | 显示全部楼层
道理没错,不知道哪里处理错了。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2014-11-25 21:29:21 | 显示全部楼层
把事情分成两部分,AD和存储,分头考察。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-25 22:38:05 | 显示全部楼层
你直接定义u16存入即可。
另外,你存储数据,应该以ASCII存储,才能电脑直接查看,否则存储成.bin文件了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
 楼主| 发表于 2014-11-25 22:39:28 | 显示全部楼层
回复【4楼】xuande:
------------------------------
感谢兄弟。
首先ADC部分,当我用printf(“ADC_ConvertedValue6=%d\r\n”,ADC_ConvertedValue6)把采集下来的AD数据用“%d”格式打印出来时,是可以正常显示。
所以应该不是ADC的问题。SD部分的话我单独存一个字符数组时,也是能在SD卡里正常显示的。
所以我真不知道,把两者结合起来就会出现乱码现象。
请问兄弟,你是怎么处理AD采集的数据位数与SD存储位数不同的问题?
回复

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
 楼主| 发表于 2014-11-25 22:47:35 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
是这样改吗?
u16  ADC_ConvertedValue1[100];//ADC采样结果缓存
u8 buf1[1200]//要写入SD卡的数据缓存
数据处理为:buf1[0]=(u8)(ADC_ConvertedValue6[0]>>8);
                        buf1[1]=(u8)(ADC_ConvertedValue6[0]);

另外原子哥,您说的“存储数据,应该以ASCII存储,才能电脑直接查看”,意思是一定要把数据转化为字符,存到SD卡行吗?
原子哥有什么参考资料给小弟看看吗?
回复

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
 楼主| 发表于 2014-11-26 13:49:14 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
照原子哥的意思,我进行了操作
u16 ADC_ConvertedValue1[100];//ADC数据缓存数组
然后在DMA产生中断时,直接进行res=f_write(f_jpg,(u8*)ADC_ConvertedValue1,200,&bwr);将ADC_ConvertedValue1的数据写入SD卡。但是在电脑打开SD卡时,发现还是一堆乱码?请问原子哥,我这样的做法对吗?需要什么改进?感谢您的帮助!
SD卡里的乱码是这样的:

回复

使用道具 举报

7

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2012-7-16
在线时间
504 小时
发表于 2014-11-26 13:55:24 | 显示全部楼层
原子说的对,将数据转换成字符型存储。
回复

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
 楼主| 发表于 2014-11-26 14:20:20 | 显示全部楼层
回复【10楼】hyghyg1234:
---------------------------------
您的意思是要用itoa函数先把数据转化为字符然后再存到SD卡里?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-26 14:28:37 | 显示全部楼层
回复【9楼】Mars_man:
---------------------------------
当然乱码了,你完全不理会文件格式的么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
 楼主| 发表于 2014-11-26 14:35:42 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
原子哥,我是新手。。。问的问题可能对您来说实在是太幼稚了,但是项目要的紧,我也是赶鸭子上架,一知半解的就上了,真的不好意思。
希望原子哥可以指点!
回复

使用道具 举报

11

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
493
金钱
493
注册时间
2015-3-3
在线时间
114 小时
发表于 2015-6-3 21:25:02 | 显示全部楼层
楼主采用的是adc dma方式采集的吗
回复

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2014-10-13
在线时间
18 小时
发表于 2015-7-23 08:25:51 | 显示全部楼层
回复【2楼】Mars_man:
---------------------------------
楼主,问题解决了没有,我也遇到相同问题
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
发表于 2015-8-25 16:48:20 | 显示全部楼层
回复【14楼】hyghyg1234:
---------------------------------
sprintf后的是枚举吧,还能存到数组中去吗?
回复

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-22
在线时间
30 小时
发表于 2019-3-29 20:39:31 | 显示全部楼层
Mars_man 发表于 2014-11-26 13:49
回复【8楼】正点原子:
---------------------------------
照原子哥的意思,我进行了操作

我遇到的问题是采用DMA之后,程序都实现不了了,连创建文档都不行,麻烦帮忙解答疑惑!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 10:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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