OpenEdv-开源电子网

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

DAC扫描模式的数据采集

[复制链接]

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2011-8-30
在线时间
7 小时
发表于 2011-8-30 14:45:53 | 显示全部楼层 |阅读模式
我想知道
我用DAC1的扫描模式来进行数据的采集
 ADC1->CR1 =(u32)0;//ADC控制寄存器1
 ADC1->CR1|=(u32)(1<<8);//使用扫描模式
 //ADC1_CR1|=(u32)(14<<0);//模拟看门狗通道
 //ADC1_CR1|=(u32)(13<<1);
 
 ADC1->CR2=(u32)0;//ADC控制寄存器 2
 ADC1->CR2|=(u32)(0<<11);//数据右对齐
 
 ADC1->CR2|=(u32)(0<<1);//单次转换模式
 ADC1->CR2|=(u32)(7<<17);//有软件控制转换
 ADC1->CR2|=(u32)(1<<20);//使用外部触发信号启动转换
 
 ADC1->SMPR1&=(u32)0x00ffffff;//所有通道采样时间55.5周期,通道10-17    0x00B6DB6D;
 ADC1->SMPR2&=(u32)0x3fffffff;//所有通道采样时间1.5周期,通道0-9   239.5周期,提高采样时间可以提高精确度
 ADC1->SQR1&=(u32)0;//ADC规则序列寄存器1
 ADC1->SQR1|=(u32)(8<<20);//规则通道序列长度9 
 ADC1->SQR2&=(u32)0;//ADC规则序列寄存器2
 ADC1->SQR3&=(u32)0;//ADC规则序列寄存器3
 
 ADC1->SQR3|=(u32)(15<<0);//规则序列中6通道第1个转换
 ADC1->SQR3|=(u32)(13<<5);//规则序列中6通道第2个转换
 ADC1->SQR3|=(u32)(12<<10);//规则序列中6通道第3个转换
 ADC1->SQR3|=(u32)(10<<15);//规则序列中6通道第4个转换
 ADC1->SQR3|=(u32)(7<<20);//规则序列中6通道第5个转换
 ADC1->SQR3|=(u32)(5<<25);//规则序列中6通道第6个转换
 ADC1->SQR2|=(u32)(14<<0);//规则序列中6通道第7个转换
 ADC1->SQR2|=(u32)(6<<5);//规则序列中6通道第8个转换
 ADC1->SQR2|=(u32)(15<<10);//规则序列15通道第9个转换

但是留在ADC1->DR里面的数据总是最后面一个通道的数据
我想知道的是前面通道的数据是被覆盖掉了还是储存在其他的地方。假如是储存在其他的地方,那地址是什么;假如是被覆盖掉我该怎么做才能采集到所有的数据。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-30 19:52:09 | 显示全部楼层
ADC,不是DAC.
ADC只有一个读取地址,当然保存的就是最近一次转换的结果了。
你要想扫描,要嘛每得到一个结果读一次,要嘛采用dma传输。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2011-8-30
在线时间
7 小时
 楼主| 发表于 2011-8-31 08:45:38 | 显示全部楼层
假如采用DMA传输的话改如何操作呢?
我感觉ADC每次启动转换,都是把所有通道的数据全都转换后才清ADC1->SR的转换结束标志位,但每次ADC1->DR的数据只会保留最后一次的数据,前面的数据无法采集。我的意思是在每个通道转换后得到结果,并读出结果,不被下一次的数据覆盖掉,这样可以做到吗?
我也看了DMA得操作,但它也是一个地址对地址的操作,假如我想在ADC的多个通道单次顺序的转换,并当每一个通道转换结束时吧数据读出来,那必须得在转换一次结束时启动DMA,但又应ADC的这个过程是连续的,所以我搞不懂这些数据改如何采集。
假如是我的理解有误区还希望大家能够给以指点。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-31 10:17:13 | 显示全部楼层
回复【3楼】周日党:
---------------------------------
ADC的DMA操作大致过程:
1,设置ADC,包括通道,开启DMA等。
2,配置DMA。包括源地址,目的地址,数据长度,宽度等重要信息。
3,就是产生一次DMA了。
第二个明显可以做到。你每次读取一次采集一次,不就可以了么?
通道1完成->DMA->通道2完成->DMA->通道N完成->DMA->产生DMA中断->读数。

以上内容你可能会云里雾里,不过你慢慢来,别想一次就把什么都弄懂。天才只是少数人。
哪里不懂看哪里,才是正道。


我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2011-8-30
在线时间
7 小时
 楼主| 发表于 2011-8-31 10:54:41 | 显示全部楼层
恩,谢谢。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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