OpenEdv-开源电子网

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

ADC+DMA,思路决定出路。。不知这思路毛病多不多闹。。

[复制链接]

7

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2011-4-20
在线时间
0 小时
发表于 2011-5-17 20:44:58 | 显示全部楼层 |阅读模式

做了ADC和DMA的实验后,我想做一个两者结合的。就是使用ADC1的通道123测量三个不同的电压值,通过DMA传输显示在LCD上。

思路如下:ADC主要配置           ADC1->CR1|=0<<16;      //独立工作模式  
                                                 ADC1->CR1|=1<<8;       //扫描模式

                                                 ADC1->CR2|=1<<1;       //连续转换模式
                                                 A DC1->CR2|=1<<8;    //使用DMA模式

                                                 ADC1->SQR1&=2<<20;     //3个转换在规则序列中

                                                  ADC1->SQR3|=1<<0;  //通道channel作为规则序列1
                                                 ADC1->SQR3|=1<<5;  //通道channe2作为规则序列2
                                                 ADC1->SQR3|=1<<10;  //通道channe3作为规则序列3               
                                                 ADC1->CR2|=1<<22;       //软件启动规则转换通道
                                                 while(!(ADC1->SR&1<<1));//等待转换结束

DMA主要配置:

                                                    DMA_CHx->CCR|=~(1<<4);    //从外设读
                                                    DMA_CHx->CCR&=1<<5;     //循环模式
                                                    DMA_CHx->CCR&=~(1<<6);    //外设地址非增量模式
                                                    DMA_CHx->CCR|=1<<7;     //存储器增量模式
                                                    DMA_CHx->CCR&=1<<8;     //外设数据宽度为16位
                                                    DMA_CHx->CCR&=1<<10;    //存储器数据宽度16位

 设置了一个存储数组:                   uint16_t      ad_value[3];

主函数中:        DMA_Loop_Config(DMA1_Channel1,(uint32_t)&ADC1->DR,(uint32_t)ad_value,3);//DMA通道1循环传输设置
                         DMA_CHx->CCR|=1<<0;           //开启DMA传输

                        等待channel转换完成,EOC置一,产生DMA请求,把channel采样值传给ad_value[0]  

                                                                                               接着把channe2采样值传给ad_value[1] 

                                                                                                      把channe3采样值传给ad_value[3]

                        这样一直循环采样传输下去

                        在while(1)里进行显示。。。这个思路结束。。好晕啊。。行不行的啊?

 

 

 

人生苦短,及时行乐!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-5-17 22:04:52 | 显示全部楼层
用来显示的话,完全没必要用DMA.
DMA的作用是用来做大量数据传输,你这个没必要.
如果你要采集ADC数据,来做分析,比如示波器之类的,那就比较有用.而单纯显示,有点蛋疼...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2011-4-20
在线时间
0 小时
 楼主| 发表于 2011-5-17 22:32:33 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
额。。原来是这样的啊。。有点小材大用了~那我就先不用个DMA试试看~~
人生苦短,及时行乐!!
回复 支持 反对

使用道具 举报

头像被屏蔽

269

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1031
金钱
1031
注册时间
2011-3-30
在线时间
5 小时
发表于 2011-7-16 10:26:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2011-7-2
在线时间
3 小时
发表于 2011-7-16 18:05:55 | 显示全部楼层
回复【楼主位】RR子海:

---------------------------------
可以试着做个虚拟万用表或低频段的示波器
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 17:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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