void ADC_InitConfiguration(void)
{
ADC_InitTypeDef ADC_InitStructure;
RCC_HSICmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
{}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_DeInit(ADC1);
ADC_StructInit(&ADC_InitStructure);
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_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// ADC_RegularChannelConfig(ADC1, BUS_VOL_CHN, 1, ADC_SampleTime_192Cycles);
ADC_DelaySelectionConfig(ADC1, ADC_DelayLength_Freeze);
ADC_PowerDownCmd(ADC1, ADC_PowerDown_Idle_Delay, ENABLE);
ADC_Cmd(ADC1, ENABLE);
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
{
}
}
UINT GetADCValue(void)
{
unchar i;
for(i=0; i<5; i++)
{
AD_Value[i] = 0x0FFF;
switch (i)
{
case 0: ADC_RegularChannelConfig(ADC1, BUS_VOL_CHN, 1, ADC_SampleTime_192Cycles); break;
case 1: ADC_RegularChannelConfig(ADC1, CURRENT_CH1_CHN, 1, ADC_SampleTime_192Cycles); break;
case 2: ADC_RegularChannelConfig(ADC1, CURRENT_CH2_CHN, 1, ADC_SampleTime_192Cycles); break;
case 3: ADC_RegularChannelConfig(ADC1, CURRENT_CH3_CHN, 1, ADC_SampleTime_192Cycles); break;
case 4: ADC_RegularChannelConfig(ADC1, CURRENT_CH4_CHN, 1, ADC_SampleTime_192Cycles); break;
}
// ?????ADC_Cmd()
ADC_Cmd(ADC1, ENABLE);
ADC_TempSensorVrefintCmd(ENABLE);
ADC_SoftwareStartConv(ADC1);
// ????????
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET)
AD_Value[i] = ADC_GetConversionValue(ADC1);
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
ADC_SoftwareStartConv(ADC1);
ADC_Cmd(ADC1, DISABLE);
}
}
|