35
35
#include "pinmap.h"
36
36
#include "mbed_error.h"
37
37
#include "PeripheralPins.h"
38
- #include <stdbool.h>
39
38
40
39
void analogin_init (analogin_t * obj , PinName pin )
41
40
{
42
- static bool adc_calibrated = false;
43
41
uint32_t function = (uint32_t )NC ;
44
42
45
43
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
@@ -89,9 +87,7 @@ void analogin_init(analogin_t *obj, PinName pin)
89
87
error ("Cannot initialize ADC" );
90
88
}
91
89
92
- // ADC calibration is done only once
93
- if (!adc_calibrated ) {
94
- adc_calibrated = true;
90
+ if (!LL_ADC_REG_ReadConversionData6 (obj -> handle .Instance )) {
95
91
HAL_ADCEx_Calibration_Start (& obj -> handle );
96
92
}
97
93
}
@@ -102,11 +98,7 @@ uint16_t adc_read(analogin_t *obj)
102
98
103
99
// Configure ADC channel
104
100
sConfig .Rank = ADC_RANK_CHANNEL_NUMBER ;
105
- #if defined (TARGET_STM32F091RC )
106
- sConfig .SamplingTime = ADC_SAMPLETIME_13CYCLES_5 ;
107
- #else
108
- sConfig .SamplingTime = ADC_SAMPLETIME_7CYCLES_5 ;
109
- #endif
101
+ sConfig .SamplingTime = ADC_SAMPLETIME_41CYCLES_5 ;
110
102
111
103
switch (obj -> channel ) {
112
104
case 0 :
@@ -159,13 +151,16 @@ uint16_t adc_read(analogin_t *obj)
159
151
break ;
160
152
case 16 :
161
153
sConfig .Channel = ADC_CHANNEL_TEMPSENSOR ;
154
+ sConfig .SamplingTime = ADC_SAMPLETIME_239CYCLES_5 ;
162
155
break ;
163
156
case 17 :
164
157
sConfig .Channel = ADC_CHANNEL_VREFINT ;
158
+ sConfig .SamplingTime = ADC_SAMPLETIME_239CYCLES_5 ;
165
159
break ;
166
160
#ifdef ADC_CHANNEL_VBAT
167
161
case 18 :
168
162
sConfig .Channel = ADC_CHANNEL_VBAT ;
163
+ sConfig .SamplingTime = ADC_SAMPLETIME_239CYCLES_5 ;
169
164
break ;
170
165
#endif
171
166
default :
0 commit comments