war4one 0 23 февраля, 2016 Опубликовано 23 февраля, 2016 (изменено) · Жалоба Запускаю АЦП на 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 оседают одинаковые значения. Подскажите, куда рыть. Изменено 23 февраля, 2016 пользователем IgorKossak [codeebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться