Skip to content

Commit 743a812

Browse files
committed
STM32F1 ADC internal channels update
1 parent d7932c2 commit 743a812

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

targets/TARGET_STM/TARGET_STM32F1/analogin_device.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,9 @@
3535
#include "pinmap.h"
3636
#include "mbed_error.h"
3737
#include "PeripheralPins.h"
38-
#include <stdbool.h>
3938

4039
void analogin_init(analogin_t *obj, PinName pin)
4140
{
42-
static bool adc_calibrated = false;
43-
RCC_PeriphCLKInitTypeDef PeriphClkInit;
4441
uint32_t function = (uint32_t)NC;
4542

4643
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
@@ -86,8 +83,8 @@ void analogin_init(analogin_t *obj, PinName pin)
8683
}
8784

8885
// This section is done only once
89-
if (!adc_calibrated) {
90-
adc_calibrated = true;
86+
if (__HAL_RCC_GET_ADC_SOURCE() != RCC_ADCPCLK2_DIV6) {
87+
RCC_PeriphCLKInitTypeDef PeriphClkInit;
9188
// Configure ADC clock prescaler
9289
// Caution: On STM32F1, ADC clock frequency max is 14 MHz (refer to device datasheet).
9390
// Therefore, ADC clock prescaler must be configured in function
@@ -108,7 +105,7 @@ uint16_t adc_read(analogin_t *obj)
108105

109106
// Configure ADC channel
110107
sConfig.Rank = 1;
111-
sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;
108+
sConfig.SamplingTime = ADC_SAMPLETIME_41CYCLES_5;
112109

113110
switch (obj->channel) {
114111
case 0:
@@ -161,9 +158,11 @@ uint16_t adc_read(analogin_t *obj)
161158
break;
162159
case 16:
163160
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
161+
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
164162
break;
165163
case 17:
166164
sConfig.Channel = ADC_CHANNEL_VREFINT;
165+
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
167166
break;
168167
default:
169168
return 0;

0 commit comments

Comments
 (0)