你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F303xC系列ADC校准一直不通过

[复制链接]
哈佛教授 提问时间:2020-5-28 14:41 /
本来的硬件平台是STM32F303VC,ADC校准能通过。换成STM32F303CC,校准就不行了,程序用的老的固件库。ADC的校准需要什么条件才能成功。初始化代码如下:

        ADC_InitTypeDef        ADC_InitStructure;
  ADC_CommonInitTypeDef  ADC_CommonInitStructure;

  /* Configure the ADC clock */
  RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div1);
//  RCC_AHBPeriphResetCmd(RCC_AHBPeriph_ADC12,ENABLE);  
  /* Enable ADC1 clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE);
  /* ADC GPIO configuration */
  ADC_GPIO_Configuration();

  /* ADC DMA Channel configuration */
  ADC_DMA_Configuration();
       
  ADC_StructInit(&ADC_InitStructure);
  /* ADC Calibration procedure */
        ADC_VoltageRegulatorCmd(ADC1, ENABLE);
  ADC_VoltageRegulatorCmd(ADC2, ENABLE);

  ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single);
  ADC_StartCalibration(ADC1);
  ADC_SelectCalibrationMode(ADC2, ADC_CalibrationMode_Single);
  ADC_StartCalibration(ADC2);
        while(ADC_GetCalibrationStatus(ADC1) != RESET )
        {
          calibration_value_1 = ADC_GetCalibrationValue(ADC1);
                debug_log("ADC1 Calibration Value %d",calibration_value_1);
        }
  while(ADC_GetCalibrationStatus(ADC2) != RESET )
        {
                calibration_value_2 = ADC_GetCalibrationValue(ADC2);
                debug_log("ADC2 Calibration Value %d",calibration_value_2);            
        }
//  /* ADC Dual mode configuration */     
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_RegSimul;                                                                    
  ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;                    
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1;            
  ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;                  
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = 1;         

  ADC_CommonInit(ADC1, &ADC_CommonInitStructure);

  /* */  
  ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Enable;
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;         
  ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable;   
  ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;  
  ADC_InitStructure.ADC_NbrOfRegChannel = 16;
  ADC_Init(ADC1, &ADC_InitStructure);
  ADC_Init(ADC2, &ADC_InitStructure);
       
       
   ADC_TempSensorCmd(ADC1,ENABLE);

   ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_61Cycles5);

   ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 2, ADC_SampleTime_61Cycles5);
         
   ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 3, ADC_SampleTime_61Cycles5);

   ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 4, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 4, ADC_SampleTime_61Cycles5);
         
   ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 5, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 5, ADC_SampleTime_61Cycles5);         

   ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 6, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 6, ADC_SampleTime_61Cycles5);

   ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 7, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 7, ADC_SampleTime_61Cycles5);

   ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 8, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 8, ADC_SampleTime_61Cycles5);

   ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 9, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 9, ADC_SampleTime_61Cycles5);

   ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 10, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 10, ADC_SampleTime_61Cycles5);
         
   ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 11, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 11, ADC_SampleTime_61Cycles5);         


   ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 12, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 12, ADC_SampleTime_61Cycles5);
         
         ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 13, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 13, ADC_SampleTime_61Cycles5);
         
         ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 14, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 14, ADC_SampleTime_61Cycles5);
         
         ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 15,ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 15, ADC_SampleTime_61Cycles5);
         
         ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 16, ADC_SampleTime_61Cycles5);
   ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 16, ADC_SampleTime_61Cycles5);

  /* Configures the ADC DMA */
  ADC_DMAConfig(ADC1, ADC_DMAMode_Circular);
  /* Enable the ADC DMA */
  ADC_DMACmd(ADC1, ENABLE);

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

  /* wait for ADC1 ADRDY */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY));

  /* wait for ADC2 ADRDY */
  while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_RDY));

  /* Enable the DMA channel */
  DMA_Cmd(DMA1_Channel1, ENABLE);

  /* Start ADC1 Software Conversion */
  ADC_StartConversion(ADC1);        

收藏 评论5 发布时间:2020-5-28 14:41

举报

5个回答
哈佛教授 回答时间:2020-5-28 14:42:29
来个大佬指点迷津啊
butterflyspring 回答时间:2020-6-8 17:23:00
官方的例程有校准的,参考一下吧 \en.stm32f30x_dsp_stdperiph_lib\STM32F30x_DSP_StdPeriph_Lib_V1.2.3\Projects\STM32F30x_StdPeriph_Examples\ADC\ADC_BasicExample
zhangwf 回答时间:2020-7-23 09:55:09
求LZ的f303的固件库例程,我只有hal库的,不太会用,我邮箱1483060623@qq.com
哈佛教授 回答时间:2020-8-11 17:10:48
zhangwf 发表于 2020-7-23 09:55
求LZ的f303的固件库例程,我只有hal库的,不太会用,我邮箱

用CubeMX下载的芯片包里的例程就是固件库的
robinliub 回答时间:2020-8-11 19:35:41
之前碰过类似问题,校准时候要确保ADC使能位置0

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版