本来的硬件平台是
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 configura
tion */
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);