OpenEdv-开源电子网

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

STM32F4双重ADC问题

[复制链接]

27

主题

112

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-11-10
在线时间
66 小时
发表于 2017-7-23 22:12:55 | 显示全部楼层 |阅读模式
10金钱
单个ADC的多通道数据采集已经会了,现在同时使用ADC1和ADC3来采集数据,具体该如何设置呢??我按照两个独立的ADC使用,将他们整合到一起,但是不起作用,必须注释掉一个ADC,另一个才好用。

最佳答案

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

你是不是复位了ADC?初始化的时候复位的话,另外一个的配置,直接就歇菜了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-7-23 22:12:56 | 显示全部楼层
你是不是复位了ADC?初始化的时候复位的话,另外一个的配置,直接就歇菜了
回复

使用道具 举报

13

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2016-5-17
在线时间
23 小时
发表于 2017-7-23 23:27:25 | 显示全部楼层
如需获取各种技术资料,可以关注微店“海纳巴科技”,微店地址:https://weidian.com/?userid=1231109981
回复

使用道具 举报

10

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2017-7-20
在线时间
17 小时
发表于 2017-7-24 07:40:41 | 显示全部楼层
我也是这样,配置三重ADC的时候ADC 1就不好使了,
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-7-24 09:21:20 | 显示全部楼层
8位三通道ADC+DMA采集模式代码,实测可用

[mw_shl_code=c,true]//ADC1-CH13-PC3
//DMA2-CH0-STREAM0
  #define ADCx                     ADC1
  #define ADC_CHANNEL              ADC_Channel_13
  #define ADCx_CLK                 RCC_APB2Periph_ADC1
  #define ADCx_CHANNEL_GPIO_CLK    RCC_AHB1Periph_GPIOC
  #define GPIO_PIN                 GPIO_Pin_3
  #define GPIO_PORT                GPIOC
  #define DMA_CHANNELx             DMA_Channel_0
  #define DMA_STREAMx              DMA2_Stream0
  #define ADCx_DR_ADDRESS          ((uint32_t)&(ADCx->DR))//((uint32_t)0x4001224C)
void        ADC_DMAInit(void)
{
  ADC_InitTypeDef       ADC_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  DMA_InitTypeDef       DMA_InitStructure;
  GPIO_InitTypeDef      GPIO_InitStructure;

  /* Enable ADCx, DMA and GPIO clocks ****************************************/
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
  RCC_AHB1PeriphClockCmd(ADCx_CHANNEL_GPIO_CLK, ENABLE);  
  RCC_APB2PeriphClockCmd(ADCx_CLK, ENABLE);
   

  /* DMA2 Stream0 channel2 configuration **************************************/
  DMA_InitStructure.DMA_Channel = DMA_CHANNELx;  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADCx_DR_ADDRESS;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&(ADC_DATAPOOL[0]);
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = ADC_POOLSIZE;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA_STREAMx, &DMA_InitStructure);
  DMA_Cmd(DMA_STREAMx, ENABLE);

  /* Configure ADC3 Channel7 pin as analog input ******************************/
  GPIO_InitStructure.GPIO_Pin = GPIO_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIO_PORT, &GPIO_InitStructure);

  /* ADC Common Init **********************************************************/
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);

  /* ADC3 Init ****************************************************************/
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADCx, &ADC_InitStructure);

  /* ADC3 regular channel7 configuration **************************************/
  ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1, ADC_SampleTime_480Cycles);

/* Enable DMA request after last transfer (Single-ADC mode) */
  ADC_DMARequestAfterLastTransferCmd(ADCx, ENABLE);

  /* Enable ADC3 DMA */
  ADC_DMACmd(ADCx, ENABLE);

  /* Enable ADC3 */
  ADC_Cmd(ADCx, ENABLE);
}
主程序:
                                        for(j=0;j<ADC_POOLSIZE;j++)
                                        {
                                                if(ADC_DATAPOOL[j]>0x01)
                                                        posicnt++;
                                        }
                                        duty=100*posicnt/(float)(ADC_POOLSIZE)+0.1f;//线性补偿[/mw_shl_code]
回复

使用道具 举报

27

主题

112

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-11-10
在线时间
66 小时
 楼主| 发表于 2017-7-24 09:27:11 | 显示全部楼层
正点原子 发表于 2017-7-23 22:12
你是不是复位了ADC?初始化的时候复位的话,另外一个的配置,直接就歇菜了

还是原子大哥,确实复位了,把复位程序段注释掉就可以了。多谢
回复

使用道具 举报

27

主题

112

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-11-10
在线时间
66 小时
 楼主| 发表于 2017-7-24 09:28:52 | 显示全部楼层
yyx112358 发表于 2017-7-24 09:21
8位三通道ADC+DMA采集模式代码,实测可用

[mw_shl_code=c,true]//ADC1-CH13-PC3

厉害啦,
回复

使用道具 举报

27

主题

112

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-11-10
在线时间
66 小时
 楼主| 发表于 2017-7-24 09:29:52 | 显示全部楼层
Homer6 发表于 2017-7-24 07:40
我也是这样,配置三重ADC的时候ADC 1就不好使了,

我只用到了两个,楼下使用到了三个,你可以看看。
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-7-24 09:52:59 | 显示全部楼层
本帖最后由 yyx112358 于 2017-7-24 09:54 编辑
jizhendong1994 发表于 2017-7-24 09:27
还是原子大哥,确实复位了,把复位程序段注释掉就可以了。多谢

搞错了,那个是单个ADC的三通道采集,不是三ADC
这个才是
[mw_shl_code=c,true]/**
  * @brief  ADC configuration
  * @note   This function Configure the ADC peripheral  
            1) Enable peripheral clocks
            2) Configure ADC Channel 12 pin as analog input
            3) DMA2_Stream0 channel2 configuration
            4) Configure ADC1 Channel 12
            5) Configure ADC2 Channel 12
            6) Configure ADC3 Channel 12
  * @param  None
  * @retval None
  */#if defined (USE_STM324xG_EVAL)
  #define ADC_CHANNEL              ADC_Channel_12
  #define ADC1_2_CHANNEL_GPIO_CLK  RCC_AHB1Periph_GPIOC
  #define GPIO_PIN                 GPIO_Pin_2
  #define GPIO_PORT                GPIOC
  #define DMA_CHANNELx             DMA_Channel_0
  #define DMA_STREAMx              DMA2_Stream0
  #define ADC_CDR_ADDRESS          ((uint32_t)0x40012308)

#elif defined (USE_STM324x7I_EVAL)
  #define ADC_CHANNEL              ADC_Channel_12
  #define ADC1_2_CHANNEL_GPIO_CLK  RCC_AHB1Periph_GPIOC
  #define GPIO_PIN                 GPIO_Pin_2
  #define GPIO_PORT                GPIOC
  #define DMA_CHANNELx             DMA_Channel_0
  #define DMA_STREAMx              DMA2_Stream0
  #define ADC_CDR_ADDRESS          ((uint32_t)0x40012308)

#else
  #define ADC_CHANNEL              ADC_Channel_12
  #define ADC1_2_CHANNEL_GPIO_CLK  RCC_AHB1Periph_GPIOC
  #define GPIO_PIN                 GPIO_Pin_2
  #define GPIO_PORT                GPIOC
  #define DMA_CHANNELx             DMA_Channel_0
  #define DMA_STREAMx              DMA2_Stream0
  #define ADC_CDR_ADDRESS          ((uint32_t)0x40012308)

#endif
static void ADC_Config(void)
{
  GPIO_InitTypeDef       GPIO_InitStructure;
  DMA_InitTypeDef        DMA_InitStructure;
  ADC_InitTypeDef        ADC_InitStructure;
  ADC_CommonInitTypeDef  ADC_CommonInitStructure;  
  
  /* Enable peripheral clocks *************************************************/
  RCC_AHB1PeriphClockCmd( ADC1_2_CHANNEL_GPIO_CLK , ENABLE);
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_DMA2 , ENABLE);
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1 , ENABLE);
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC2 , ENABLE);
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC3 , ENABLE);  

  /* Configure ADC Channel 12 pin as analog input *****************************/
  GPIO_InitStructure.GPIO_Pin = GPIO_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIO_PORT, &GPIO_InitStructure);

  /* DMA2 Stream0 channel0 configuration **************************************/
  DMA_InitStructure.DMA_Channel = DMA_CHANNELx;  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&aADCTripleConvertedValue;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = 3;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA_STREAMx, &DMA_InitStructure);

  /* DMA2_Stream0 enable */
  DMA_Cmd(DMA_STREAMx, ENABLE);

  /* ADC Common configuration *************************************************/
  ADC_CommonInitStructure.ADC_Mode = ADC_TripleMode_Interl;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2;  
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInit(&ADC_CommonInitStructure);

  /* ADC1 regular channel 12 configuration ************************************/
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADC1, &ADC_InitStructure);

  ADC_RegularChannelConfig(ADC1, ADC_CHANNEL, 1, ADC_SampleTime_3Cycles);
  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);

  /* ADC2 regular channel 12 configuration ************************************/
  ADC_Init(ADC2, &ADC_InitStructure);
  /* ADC2 regular channel12 configuration */
  ADC_RegularChannelConfig(ADC2, ADC_CHANNEL, 1, ADC_SampleTime_3Cycles);

  /* ADC3 regular channel 12 configuration ************************************/
  ADC_Init(ADC3, &ADC_InitStructure);
  /* ADC3 regular channel12 configuration */
  ADC_RegularChannelConfig(ADC3, ADC_CHANNEL, 1, ADC_SampleTime_3Cycles);

  /* Enable DMA request after last transfer (multi-ADC mode) ******************/
  ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);

  /* Enable ADC1 **************************************************************/
  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC2 **************************************************************/
  ADC_Cmd(ADC2, ENABLE);

  /* Enable ADC3 **************************************************************/
  ADC_Cmd(ADC3, ENABLE);
}  [/mw_shl_code]
回复

使用道具 举报

10

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2017-7-20
在线时间
17 小时
发表于 2017-7-24 15:08:47 | 显示全部楼层
jizhendong1994 发表于 2017-7-24 09:29
我只用到了两个,楼下使用到了三个,你可以看看。

能把你双重ADC的程序给我借鉴一下吗?
回复

使用道具 举报

27

主题

112

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-11-10
在线时间
66 小时
 楼主| 发表于 2017-7-24 15:20:59 | 显示全部楼层
Homer6 发表于 2017-7-24 15:08
能把你双重ADC的程序给我借鉴一下吗?

留邮箱呀
回复

使用道具 举报

10

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2017-7-20
在线时间
17 小时
发表于 2017-7-24 15:36:21 | 显示全部楼层
回复

使用道具 举报

40

主题

250

帖子

0

精华

高级会员

Rank: 4

积分
854
金钱
854
注册时间
2016-11-13
在线时间
705 小时
发表于 2017-7-24 16:47:23 | 显示全部楼层

发一份给我可以吗,805863921@qq.com.谢谢
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-7-30
在线时间
8 小时
发表于 2017-7-30 16:14:33 来自手机 | 显示全部楼层
可以参考一下双重ADC的程序吗,1274018709@qq.com
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-5-27
在线时间
8 小时
发表于 2017-8-12 18:08:59 | 显示全部楼层
能分享一下源码吗?
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-5-27
在线时间
8 小时
发表于 2017-8-12 18:13:38 | 显示全部楼层
Homer6 发表于 2017-7-24 15:08
能把你双重ADC的程序给我借鉴一下吗?

能把双层ADC程序借鉴一下吗?邮箱1061194897@qq.com
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-5-27
在线时间
8 小时
发表于 2017-8-12 18:19:00 | 显示全部楼层
单个ADC多通道数据采集源码能分享一下吗?1061194897@qq,com
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2017-8-21
在线时间
0 小时
发表于 2017-8-21 17:53:23 | 显示全部楼层

能把双重ADC程序借鉴一下吗?邮箱hqng@163.com,谢谢大神!
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2017-8-21
在线时间
0 小时
发表于 2017-8-21 17:57:02 | 显示全部楼层
jizhendong1994 发表于 2017-7-24 09:27
还是原子大哥,确实复位了,把复位程序段注释掉就可以了。多谢

能借鉴一下你的ADC程序吗?邮箱hqng@163.com,谢谢啦!
回复

使用道具 举报

5

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-7-13
在线时间
14 小时
发表于 2017-8-29 22:53:14 | 显示全部楼层
能分享你的双重ADC源码吗 谢谢!572865288@qq.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-5-30
在线时间
3 小时
发表于 2018-5-30 10:08:13 | 显示全部楼层
您好,我是个学生,最近在弄STM32F4的双AD同时采样,看了您的帖子,不知道可不可以借鉴一下您双重ADC的程序?万分感谢!
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-6-26
在线时间
3 小时
发表于 2018-6-27 10:44:01 | 显示全部楼层
1028500742@qq.com 大佬请给我一份,谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 08:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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