Skip to content

Commit f2a6eec

Browse files
committed
[NUCLEO_F334R8] Correct the code used during initialization
1 parent ad9b6a7 commit f2a6eec

File tree

1 file changed

+27
-30
lines changed
  • libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8

1 file changed

+27
-30
lines changed

libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/analogin_api.c

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@
3737

3838
ADC_HandleTypeDef AdcHandle;
3939

40-
int adc1_inited = 0;
41-
int adc2_inited = 0;
42-
4340
void analogin_init(analogin_t *obj, PinName pin)
4441
{
42+
static int adc1_inited = 0;
43+
static int adc2_inited = 0;
44+
4545
// Get the peripheral name from the pin and assign it to the object
4646
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
4747
MBED_ASSERT(obj->adc != (ADCName)NC);
@@ -52,33 +52,30 @@ void analogin_init(analogin_t *obj, PinName pin)
5252
// Save pin number for the read function
5353
obj->pin = pin;
5454

55-
// The ADC initialization is done only once for each ADC
56-
if ((adc1_inited == 0) || (adc2_inited == 0)) {
57-
if (obj->adc == ADC_1) {
58-
__ADC12_CLK_ENABLE();
59-
adc1_inited = 1;
60-
}
61-
if (obj->adc == ADC_2) {
62-
__ADC12_CLK_ENABLE();
63-
adc2_inited = 1;
64-
}
65-
66-
// Configure ADC
67-
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
68-
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
69-
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
70-
AdcHandle.Init.ScanConvMode = DISABLE;
71-
AdcHandle.Init.ContinuousConvMode = DISABLE;
72-
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
73-
AdcHandle.Init.NbrOfDiscConversion = 0;
74-
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
75-
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
76-
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
77-
AdcHandle.Init.NbrOfConversion = 1;
78-
AdcHandle.Init.DMAContinuousRequests = DISABLE;
79-
AdcHandle.Init.EOCSelection = DISABLE;
80-
HAL_ADC_Init(&AdcHandle);
81-
}
55+
// Check if ADC is already initialized
56+
if ((obj->adc == ADC_1) && adc1_inited) return;
57+
if ((obj->adc == ADC_2) && adc2_inited) return;
58+
if (obj->adc == ADC_1) adc1_inited = 1;
59+
if (obj->adc == ADC_2) adc2_inited = 1;
60+
61+
// Enable ADC clock
62+
__ADC12_CLK_ENABLE();
63+
64+
// Configure ADC
65+
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
66+
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
67+
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
68+
AdcHandle.Init.ScanConvMode = DISABLE;
69+
AdcHandle.Init.ContinuousConvMode = DISABLE;
70+
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
71+
AdcHandle.Init.NbrOfDiscConversion = 0;
72+
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
73+
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
74+
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
75+
AdcHandle.Init.NbrOfConversion = 1;
76+
AdcHandle.Init.DMAContinuousRequests = DISABLE;
77+
AdcHandle.Init.EOCSelection = DISABLE;
78+
HAL_ADC_Init(&AdcHandle);
8279
}
8380

8481
static inline uint16_t adc_read(analogin_t *obj)

0 commit comments

Comments
 (0)