Перейти к содержанию
    

STM32L052 АЦП

Запускаю АЦП на STM32L052. Нужно читать два канала, 0 и 5, с ADC1. Скорость неважна. Если про инициализировать один канал, то все считывается нормально, и 0, и 5 показывают напряжение, приложенное к ним. Но если пытаться считывать два канала по очереди, то с обеих каналов считывается одно значение, а именно то, которое соответствует каналу, инициализированному раньше. Нашел совет полностью отключать и снова включать АЦП перед работой с другим каналом, но картина аналогичная. На настоящий момент код имеет следующий вид (засунул инициализацию в код для наглядности):

 

  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
[codeebox] для длинного кода, [code] - для короткого!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...