Skip to content

Commit c9a727e

Browse files
jeromecoutantadbridge
authored andcommitted
STM32L4 ADC Internal Channel : correct sampling time
1 parent d07086c commit c9a727e

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

targets/TARGET_STM/TARGET_STM32L4/analogin_device.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,16 @@ uint16_t adc_read(analogin_t *obj)
105105
ADC_ChannelConfTypeDef sConfig = {0};
106106

107107
// Configure ADC channel
108+
sConfig.Rank = ADC_REGULAR_RANK_1;
109+
sConfig.SamplingTime = ADC_SAMPLETIME_47CYCLES_5; // default value (1.5 us for 80MHz clock)
110+
sConfig.SingleDiff = ADC_SINGLE_ENDED;
111+
sConfig.OffsetNumber = ADC_OFFSET_NONE;
112+
sConfig.Offset = 0;
113+
108114
switch (obj->channel) {
109115
case 0:
110116
sConfig.Channel = ADC_CHANNEL_VREFINT;
117+
sConfig.SamplingTime = ADC_SAMPLETIME_247CYCLES_5; // Minimum ADC sampling time when reading the internal reference voltage is 4us
111118
break;
112119
case 1:
113120
sConfig.Channel = ADC_CHANNEL_1;
@@ -159,20 +166,16 @@ uint16_t adc_read(analogin_t *obj)
159166
break;
160167
case 17:
161168
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
169+
sConfig.SamplingTime = ADC_SAMPLETIME_247CYCLES_5; // Minimum ADC sampling time when reading the temperature is 5us
162170
break;
163171
case 18:
164172
sConfig.Channel = ADC_CHANNEL_VBAT;
173+
sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5; // Minimum ADC sampling time when reading the VBAT is 12us
165174
break;
166175
default:
167176
return 0;
168177
}
169178

170-
sConfig.Rank = ADC_REGULAR_RANK_1;
171-
sConfig.SamplingTime = ADC_SAMPLETIME_47CYCLES_5;
172-
sConfig.SingleDiff = ADC_SINGLE_ENDED;
173-
sConfig.OffsetNumber = ADC_OFFSET_NONE;
174-
sConfig.Offset = 0;
175-
176179
HAL_ADC_ConfigChannel(&obj->handle, &sConfig);
177180

178181
HAL_ADC_Start(&obj->handle); // Start conversion

0 commit comments

Comments
 (0)