From b7b8aef459060841fa9f4fec95feeef479ce825b Mon Sep 17 00:00:00 2001 From: jflyper Date: Thu, 11 Jan 2018 00:26:15 +0900 Subject: [PATCH] Handle empty main ADC channel case --- src/main/drivers/adc_stm32f4xx.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/drivers/adc_stm32f4xx.c b/src/main/drivers/adc_stm32f4xx.c index ca4ac4a08f..04ea4cf20d 100644 --- a/src/main/drivers/adc_stm32f4xx.c +++ b/src/main/drivers/adc_stm32f4xx.c @@ -218,9 +218,11 @@ void adcInit(const adcConfig_t *config) adcOperatingConfig[i].enabled = true; } +#ifndef USE_ADC_INTERNAL if (!adcActive) { return; } +#endif RCC_ClockCmd(adc.rccADC, ENABLE); @@ -233,6 +235,22 @@ void adcInit(const adcConfig_t *config) ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); +#ifdef USE_ADC_INTERNAL + // If device is not ADC1 or there's no active channel, then initialize ADC1 separately + if (device != ADCDEV_1 || !adcActive) { + RCC_ClockCmd(adcHardware[ADCDEV_1].rccADC, ENABLE); + adcInitDevice(ADC1, 2); + ADC_Cmd(ADC1, ENABLE); + } + + // Initialize for injected conversion + adcInitInternalInjected(); + + if (!adcActive) { + return; + } +#endif + adcInitDevice(adc.ADCx, configuredAdcChannels); uint8_t rank = 1; @@ -247,17 +265,6 @@ void adcInit(const adcConfig_t *config) ADC_DMACmd(adc.ADCx, ENABLE); ADC_Cmd(adc.ADCx, ENABLE); -#ifdef USE_ADC_INTERNAL - // If device is not ADC1, then initialize ADC1 separately - if (device != ADCDEV_1) { - RCC_ClockCmd(adcHardware[ADCDEV_1].rccADC, ENABLE); - adcInitDevice(ADC1, 2); - ADC_Cmd(ADC1, ENABLE); - } - - // Initialize for injected conversion - adcInitInternalInjected(); -#endif dmaInit(dmaGetIdentifier(adc.DMAy_Streamx), OWNER_ADC, 0);