STM32的ADC1和ADC2的采集问题

2019-03-23 18:41发布

试了一下STM32的ADC1和ADC2,调试时出现的问题让我不解:
(1)只使用STM32的ADC1采集信号,PA.0为其模拟输入通道;

将ADC1配置成独立模式、单通道单次转换、软件触发,

采集到的数据是正确的;

(2)只使用ADC2采集信号,与(1)中ADC1的设置完全相同,即

PA.0为其模拟输入通道;

将ADC2配置成横独立模式、单通道单次转换、软件触发,

却采集不到数据;

所以,想请教一个问题:

STM32的ADC2采集相较ADC1采集时,对ADC2的配置有什么特殊要求吗?

或者其ADC2只能在双AD模式中才能使用?




此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
qiwan
2019-03-24 13:59
ADC1采集建立project1,ADC2采集建立project2;
针对ADC1:

  1. //ADC1的模拟输入端PA.5
复制代码针对ADC2:


  1. <font color="#0000ff">//ADC2的模拟输入端PA.5</font>
复制代码针对ADC1:
  1. void  Adc_Init(void)
  2. {        
  3.         ADC_InitTypeDef ADC_InitStructure;
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE );
  5.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                       //72M/6=12,ADC最大时间不能超过14M
  6.        
  7.         ADC_DeInit(ADC1);
  8.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;           //独立模式
  9.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;                    //单通道
  10.     ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;         //单次转换
  11. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;       
  12.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;       
  13.         ADC_InitStructure.ADC_NbrOfChannel = 1;  
  14.         ADC_Init(ADC1, &ADC_InitStructure);          

  15.     ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_71Cycles5 );
  16.         ADC_Cmd(ADC1, ENABLE);

  17.         ADC_ResetCalibration(ADC1);
  18.         while(ADC_GetResetCalibrationStatus(ADC1));
  19.         ADC_StartCalibration(ADC1);
  20.         while(ADC_GetCalibrationStatus(ADC1));
  21. }
复制代码针对ADC2:
  1. <font color="#0000ff">void  Adc_Init(void)
  2. {        
  3.         ADC_InitTypeDef ADC_InitStructure;
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE );
  5.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                           //72M/6=12,ADC最大时间不能超过14M
  6.        
  7.         ADC_DeInit(ADC2);
  8.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;              //独立模式
  9.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;                       //单通道
  10.     ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;            //单次转换
  11.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None ;
  12.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;       
  13.         ADC_InitStructure.ADC_NbrOfChannel = 1;   
  14.         ADC_Init(ADC2, &ADC_InitStructure);         

  15.         ADC_RegularChannelConfig(ADC2, ADC_Channel_5, 1, ADC_SampleTime_71Cycles5 );
  16.         ADC_Cmd(ADC2, ENABLE);       

  17.         ADC_ResetCalibration(ADC2);
  18.         while(ADC_GetResetCalibrationStatus(ADC2));
  19.         ADC_StartCalibration(ADC2);
  20.         while(ADC_GetCalibrationStatus(ADC2));       
  21. }        </font>
复制代码针对ADC1:

  1. int main(void)
  2. {
  3.            SystemInit();    //系统时钟初始化:72M
  4.         Gpio_Init();
  5.         Adc_Init();
  6.         while(1)
  7.         {
  8.          ADC_SoftwareStartConvCmd(ADC1, ENABLE );
  9.         }
复制代码
针对ADC2:


  1. <font color="#0000ff">int main(void)
  2. {
  3.            SystemInit();                  //系统时钟初始化
  4.         Gpio_Init();
  5.         Adc_Init();
  6.         while(1)
  7.         {
  8.                  ADC_SoftwareStartConvCmd(ADC2, ENABLE );
  9.         }</font>
复制代码

一周热门 更多>