OpenEdv-开源电子网

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

什么情况下用adc1,什么情况下用adc2 ?还是可以混合用?

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-7-26
在线时间
3 小时
发表于 2017-12-30 02:25:20 | 显示全部楼层 |阅读模式
1金钱
什么情况下用adc1,什么情况下用adc2 ?还是可以混合用?
STM32 的ad转换,是不是 adc1   adc2 各可以设16个?总共可以设32个?
还是只能设16个?
能同时使用吗?

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

使用道具 举报

2

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2017-9-27
在线时间
101 小时
发表于 2017-12-30 10:46:20 | 显示全部楼层
adc不是有双通道模式吗  具体用adc1 或者adc2 还是得看你自己 如果IO口充足的话 想用哪个用哪个
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-4-25
在线时间
27 小时
发表于 2017-12-30 11:20:11 | 显示全部楼层
#define ADC1_DR_Address    ((u32)0x40012400+0x4c)

__IO uint16_t ADC_ConvertedValue[12];


static void  ADC_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  ADC_InitTypeDef  ADC_InitStructure;
  DMA_InitTypeDef    DMA_InitStructure;
       
  /* Configure GPIOA pin 4~GPIOA pinI(ADC Channe4,channelI) as analog input -------------------------*/
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);         
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|
                                                                                                                                GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|
                                                                                                                                GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|
                                                                                                                                GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Enable ADC1,ADC2 clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE);
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);           //??DMA??
       
  /* ADC1,ADC2 Configuration ------------------------------------------------------*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;//1æÔòí¬2½Ä£ê½
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;//é¨Ãè
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//á¬Dø×a»»
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//ía2¿′¥·¢
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//óò¶ÔÆë
  ADC_InitStructure.ADC_NbrOfChannel = 6;//1æÔòDòáDêyÄ¿
  ADC_Init(ADC1, &ADC_InitStructure);
       
        ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;//1æÔòí¬2½Ä£ê½
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;//é¨Ãè
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//á¬Dø×a»»
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//ía2¿′¥·¢
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//óò¶ÔÆë
  ADC_InitStructure.ADC_NbrOfChannel = 6;//1æÔòDòáDêyÄ¿
  ADC_Init(ADC2, &ADC_InitStructure);

        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);//AD
        ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 1, ADC_SampleTime_55Cycles5);//AC
       
        ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_55Cycles5);//BD
        ADC_RegularChannelConfig(ADC2, ADC_Channel_12, 2, ADC_SampleTime_55Cycles5);//BC
       
        ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_55Cycles5);//CD
        ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 3, ADC_SampleTime_55Cycles5);//CC
       
        ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 4, ADC_SampleTime_55Cycles5);//XD
        ADC_RegularChannelConfig(ADC2, ADC_Channel_0, 4, ADC_SampleTime_55Cycles5);//XC

        ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 5, ADC_SampleTime_55Cycles5);//AI
        //ADC_RegularChannelConfig(ADC2, ADC_Channel_5, 5, ADC_SampleTime_55Cycles5);//AI-I
       
        ADC_RegularChannelConfig(ADC2, ADC_Channel_15, 5, ADC_SampleTime_55Cycles5);//BI
        //ADC_RegularChannelConfig(ADC2, ADC_Channel_6, 6, ADC_SampleTime_55Cycles5);//BI-I
       
        ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 6, ADC_SampleTime_55Cycles5);//CI
        //ADC_RegularChannelConfig(ADC2, ADC_Channel_7, 7, ADC_SampleTime_55Cycles5);//CI-I

        ADC_RegularChannelConfig(ADC2, ADC_Channel_10, 6, ADC_SampleTime_55Cycles5);//WD

  ADC_ExternalTrigConvCmd(ADC2, ENABLE);     //ÔêDíADC2ía2¿′¥·¢       
        /**************DMAÅäÖÃ*****************/
          DMA_DeInit(DMA1_Channel1);                                 
                DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;
                DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;   
                DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;         //íaéèμ½Äú′æ
                DMA_InitStructure.DMA_BufferSize = 12;                      //DMA»o′æ′óD¡
                DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;             //íaéèμØÖ·2»±ä
                DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                      //Äú′æμØÖ·×ÔÔö
                DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;      //32
                DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;              //32
                DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;          //Ñ-»·Ä£ê½
                DMA_InitStructure.DMA_Priority = DMA_Priority_High;     //DMA1¸ßóÅÏè¼¶
                DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;            //Äú′æμ½Äú′æ2»ê1Äü
                DMA_Init(DMA1_Channel1, &DMA_InitStructure);           
               
                DMA_Cmd(DMA1_Channel1,ENABLE);                          
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);
        delay_ms(10);
  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));
  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));  

  /* Enable ADC2 */
  ADC_Cmd(ADC2, ENABLE);
        delay_ms(10);
  /* Enable ADC2 reset calibaration register */   
  ADC_ResetCalibration(ADC2);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC2));
  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC2);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC2));
  
         ADC_DMACmd(ADC1, ENABLE);  
        /* Start ADC1 Software Conversion */
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        // ADC1->CR2|=1<<22;
         //ADC1->CR2|=1<<20;
//         ADC1->CR2 |=(uint32_t)0x00500000;
}
这是以前写的例子
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-7-26
在线时间
3 小时
 楼主| 发表于 2017-12-31 01:05:45 | 显示全部楼层
问的是原理.不论adc1 还是adc2 .比如都打开通道1 .其实指向的是同一个IO .那理论上讲,就只能是监测一个电压
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-23 04:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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