OpenEdv-开源电子网

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

各位大侠 请问下,我这个ADC多路采集的配置哪儿错了啊? 两次读出来的数据是一样的。

[复制链接]

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-6-5 09:03:33 | 显示全部楼层 |阅读模式

void init_adc(void)
{
 RCC->APB2ENR |= 1 << 2;
 GPIOA->CRL &= 0xffffff00;
 
 RCC->APB2ENR |= 1 << 9;
 RCC->APB2RSTR |= 1 << 9;
 RCC->APB2RSTR &= ~(1 << 9);
 RCC->CFGR |= 1 << 15; //72M主频 ADC预分频至12M

 ADC1->CR1 = 0;
 ADC1->CR2 |= 1 << 20 | 1 << 19 | 1 << 18 | 1 << 17 | 1 << 0 | 1 << 1;

 ADC1->SQR1 = 1 << 20;
 ADC1->SMPR2 |= 1 << 5 | 1 << 4 | 1 << 3 | 1 << 0 | 1 << 1 | 1 << 2;  //通道转换时间设置
 ADC1->CR2 |= 1 << 3;
 while(ADC1->CR2 & (1 << 3));
 ADC1->CR2 |= 1 << 2;
 while(ADC1->CR2 & (1 << 2));
}


void get_adc(u16 *num1, u16 *num2)
{
 ADC1->SQR3 &= 0xffffc00;
 ADC1->SQR3 |= 0 | 1 << 5;
 ADC1->CR2 |= 1 << 22;
 while(!(ADC1->SR & (1 << 1)));
 *num1 = ADC1->DR;

 while(!(ADC1->SR & (1 << 1)));

 *num2 = ADC1->DR;
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-5 09:15:43 | 显示全部楼层
回复【楼主位】lsj9383:
---------------------------------
不一样才怪...
至于原因嘛,自己想. 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-6-5 12:41:59 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子大哥,我把ADC1->CR1 |= 1 << 8;
后 实验便成功了。
但是我还是有有点闹不明白
扫描模式和连续模式到底是什么关系呢?
我把扫描模式打开,连续模式打开,它可以正常工作。
我把扫描模式关闭,连续模式打开,它只采集通道1的
我把扫描模式打开,连续模式关闭,它在 while(!(ADC1->SR & (1 << 1))); *num2 = ADC1->DR;处进入死循环。

我在网上查了下相关资料,扫描模式打开,连续模式关闭时,是把SQRx选中的通道转换,转换一次结束。
                        扫描模式打开,连续模式打开,应该是重复不停的把SQRx选中的通道转换。
                        扫描模式关闭,连续模式打开,就连续不停的转换通道1
                                  扫描模式关闭,连续模式关闭,就转换一次通道一。
按网上这个说法,我扫描模式打开,连续模式关闭,它应该把我选中的通道都转换一次才对,不应该在第二次转换处进入死循环呀。
求原子大哥解答~ 
 
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-6-5 12:44:04 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
用ADC1,Regular通道的顺序为Ch0,Ch1,Ch2,Ch3,启动Scan模式
在单次转换模式下:
启动ADC1,则
1. 开始转换Ch0
2. 转换完成后自动开始转换Ch1
3. 转换完成后自动开始转换Ch2
4. 转换完成后自动开始转换Ch3
5. 转换完成后停止,等待ADC的下一次启动。下一次ADC启动从第一步开始

在连续转换模式下:
启动ADC1,则
1. 开始转换Ch0
2. 转换完成后自动开始转换Ch1
3. 转换完成后自动开始转换Ch2
4. 转换完成后自动开始转换Ch3
5. 转换完成后回到第一步


如果没启动Sacn模式则上述过程中没有2、3、4这三个步骤
上述前提是Discontinuous模式没有启用。

这是网上一位网友说的,按他的说法,我只打开扫描模式,没打开连续模式,也应该可以工作啊,不应该进入死循环呀。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-5 12:48:24 | 显示全部楼层
回复【3楼】lsj9383:
---------------------------------
扫描,就是去扫描所有的通道(比如规则通道)
连续,连续,就是你是不是转换完一个通道后立刻开启下一个通道.如果不是,那么转换完一个通道后,需要你自己人为的启动下一次转换.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-6-5 17:33:58 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
噢噢噢 我懂了 谢谢原子大哥。
回复 支持 反对

使用道具 举报

16

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2013-5-15
在线时间
0 小时
发表于 2013-8-2 09:57:25 | 显示全部楼层
额。。一年多后我也开始研究楼主当年研究的ADC转换的问题了,,,想问下楼主,ADC转换多路通道只需要设置SCAN和连续转换模式吗?还有你这个get_adc函数能通嘛?不是ADC_DR寄存器一次只能放一个数据?你一次读俩???
之前网上他们说要用DMA传输,单路的我试过了能传输,但是又几个地方还是不解
ADC1->CR1|=0<<16;      //独立工作模式 
ADC1->CR1|=1<<8;    //扫描模式
ADC1->CR2|=1<<1;    //连续转换模式
ADC1->CR2|=1<<8;    //开启ADC DMA转换
这些都是关于ADC的设置,如果多路采集是不是要把独立模式改成交替模式?换句话说我对独立模式不理解,扫描和连续转换看了楼主帖子后明白了。

如果用DMA模式,采集到了数据怎么处理啊?有0x0000FFFF来分出来??
跪求楼主指点哈
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2013-8-2 11:25:34 | 显示全部楼层
回复【7楼】红烧螺丝钉:
---------------------------------
记不得了,后面我基本上没怎么用过多路采集的模式了......
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 21:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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