kvn234, комментировать не нужно, а, для примера, указать включен ли триггер Шмитта на используемом входе или явно его выключить в коде стоило бы.
Триггер Шмитта выключался в функции чтения. Но сейчас я выключение триггера Шмитта перенес в инициализацию.
Но это как я и предполагал не повлияло на стабильность измерений.
void init_adc(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
ADC_DeInit(ADC1);
Vrefint = *Factory_VREFINT;
Vrefint += 0x600;
ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit,ADC_Prescaler_2);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);
/* Disable the specified ADC DMA request */
ADC1->SQR[0] |= ADC_SQR1_DMAOFF;
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_0, DISABLE);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_1, DISABLE);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_2, DISABLE);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_4, DISABLE);
ADC_VrefintCmd(ENABLE);
ADC1->CR1 |= ADC_CR1_ADON;
}
uint16_t GetChannel(ADC_Channel_TypeDef Channel)
{
uint32_t res;
ADC_ChannelCmd(ADC1, Channel, ENABLE);
ADC1->CR1 |= ADC_CR1_START;
while (!(ADC1->SR & ADC_FLAG_EOC));
res = ADC_GetConversionValue(ADC1);
ADC_ChannelCmd(ADC1, Channel, DISABLE);
return (uint16_t)res;
}
Когда мы наконец разобрались где находились функции, не могли ли Вы высказать конкретные замечания по функциям.
Что нужно учесть в инициализации ADC или чтении?