OpenEdv-开源电子网

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

STM32F4两个ADC两个通道能实现同时采样吗?那数据怎么保存那?

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-10-30
在线时间
6 小时
发表于 2020-3-9 22:27:04 | 显示全部楼层 |阅读模式
1金钱
void  Adc_Init(void)
{   

  GPIO_InitTypeDef  GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
ADC_InitTypeDef       ADC_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//使能ADC1时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);//使能ADC2时钟

//先初始化IO口
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_6;//用于ADC的两个通道
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
  GPIO_InitStructure.GPIO_PuPd = 0x00;//不上下拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  

RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_ADC2,ENABLE); //ADC1,2复位

RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_ADC2,DISABLE); //复位结束



  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; //adc的时钟最好不要超过36MHz,这里是21MHz
  ADC_CommonInit(&ADC_CommonInitStructure);

  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描模式
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//持续转换
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
  ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1
  ADC_Init(ADC1, &ADC_InitStructure);
ADC_Init(ADC2, &ADC_InitStructure);

  ADC_DMACmd(ADC1,ENABLE);
ADC_DMACmd(ADC2,ENABLE);

ADC_Cmd(ADC1, ENABLE);//开启AD转换器  
ADC_Cmd(ADC2, ENABLE);//开启AD转换器  

ADC_RegularChannelConfig(ADC1, ADC_Channel_1,1, ADC_SampleTime_480Cycles ); //ADC1,ADC通道,480个周期,提高采样时间可以提高精确度
ADC_RegularChannelConfig(ADC2, ADC_Channel_6,1, ADC_SampleTime_480Cycles ); //ADC1,ADC通道,480个周期,提高采样时间可以提高精确度
}
这样的话,main函数里同时开启软件触发,两个ADC会同时采样并保存在ADC->DR寄存器里面吗?
如果不行,还请指点正确的方法,听说可以使用双重ADC模式,该怎么配置ADC那?
谢谢指导!


最佳答案

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

可以,用2个ADC,比如ADC1和ADC2. 然后采集用DMA,ADC1用一个DMA, ADC2用一个DMA
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-9 22:27:05 | 显示全部楼层
可以,用2个ADC,比如ADC1和ADC2.
然后采集用DMA,ADC1用一个DMA,  ADC2用一个DMA
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-10-30
在线时间
6 小时
 楼主| 发表于 2020-3-10 19:38:58 | 显示全部楼层
正点原子 发表于 2020-3-10 00:13
可以,用2个ADC,比如ADC1和ADC2.
然后采集用DMA,ADC1用一个DMA,  ADC2用一个DMA

是有先后顺序保存在ADC->DR寄存器吗?   还是ADC1保存在ADC1-DR  ADC2->DR寄存器?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-11 00:43:14 | 显示全部楼层
minizhouzhou 发表于 2020-3-10 19:38
是有先后顺序保存在ADC->DR寄存器吗?   还是ADC1保存在ADC1-DR  ADC2->DR寄存器?

2个ADC
当然是2个DR寄存器了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-10-30
在线时间
6 小时
 楼主| 发表于 2020-3-11 08:51:21 | 显示全部楼层
好的  谢谢原子哥
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-4 06:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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