Запускаю АЦП на STM32L052. Нужно читать два канала, 0 и 5, с ADC1. Скорость неважна. Если про инициализировать один канал, то все считывается нормально, и 0, и 5 показывают напряжение, приложенное к ним. Но если пытаться считывать два канала по очереди, то с обеих каналов считывается одно значение, а именно то, которое соответствует каналу, инициализированному раньше. Нашел совет полностью отключать и снова включать АЦП перед работой с другим каналом, но картина аналогичная. На настоящий момент код имеет следующий вид (засунул инициализацию в код для наглядности):
CODE
while(1)
{
AdcHandle.Instance = ADC1;
AdcHandle.Init.OversamplingMode = DISABLE;
AdcHandle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1;
AdcHandle.Init.LowPowerAutoPowerOff = DISABLE;
AdcHandle.Init.LowPowerFrequencyMode = ENABLE;
AdcHandle.Init.LowPowerAutoWait = DISABLE;
AdcHandle.Init.Resolution = ADC_RESOLUTION_12B;
AdcHandle.Init.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;
AdcHandle.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
AdcHandle.Init.ContinuousConvMode = ENABLE;
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
AdcHandle.Init.DMAContinuousRequests = DISABLE;
HAL_ADC_Init(&AdcHandle);
HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED);
sConfig.Channel = ADC_CHANNEL_0;
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
HAL_ADC_Start(&AdcHandle);
HAL_ADC_PollForConversion(&AdcHandle, 1000);
if ((HAL_ADC_GetState(&AdcHandle) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC)
{
ADCValueSensor = HAL_ADC_GetValue(&AdcHandle);
}
HAL_ADC_Stop(&AdcHandle);
HAL_ADC_DeInit(&AdcHandle);
ADC_Disable(&AdcHandle);
HAL_Delay(100);
HAL_ADC_Init(&AdcHandle);
HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED);
sConfig.Channel = ADC_CHANNEL_5;
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
HAL_ADC_Start(&AdcHandle);
HAL_ADC_PollForConversion(&AdcHandle, 1000);
if ((HAL_ADC_GetState(&AdcHandle) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC)
{
ADCValuePower = HAL_ADC_GetValue(&AdcHandle);
}
HAL_ADC_Stop(&AdcHandle);
HAL_ADC_DeInit(&AdcHandle);
ADC_Disable(&AdcHandle);
HAL_Delay(100);
}
В переменных ADCValueSensor и ADCValuePower оседают одинаковые значения. Подскажите, куда рыть.
Сообщение отредактировал IgorKossak - Feb 23 2016, 19:44
Причина редактирования: [codeebox] для длинного кода, [code] - для короткого!