STM32F1 ADC internal channels update

pull/6987/head
jeromecoutant 2018-03-22 14:18:36 +01:00
parent d7932c26eb
commit 743a812be6
1 changed files with 5 additions and 6 deletions

View File

@ -35,12 +35,9 @@
#include "pinmap.h" #include "pinmap.h"
#include "mbed_error.h" #include "mbed_error.h"
#include "PeripheralPins.h" #include "PeripheralPins.h"
#include <stdbool.h>
void analogin_init(analogin_t *obj, PinName pin) void analogin_init(analogin_t *obj, PinName pin)
{ {
static bool adc_calibrated = false;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
uint32_t function = (uint32_t)NC; uint32_t function = (uint32_t)NC;
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...) // ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
@ -86,8 +83,8 @@ void analogin_init(analogin_t *obj, PinName pin)
} }
// This section is done only once // This section is done only once
if (!adc_calibrated) { if (__HAL_RCC_GET_ADC_SOURCE() != RCC_ADCPCLK2_DIV6) {
adc_calibrated = true; RCC_PeriphCLKInitTypeDef PeriphClkInit;
// Configure ADC clock prescaler // Configure ADC clock prescaler
// Caution: On STM32F1, ADC clock frequency max is 14 MHz (refer to device datasheet). // Caution: On STM32F1, ADC clock frequency max is 14 MHz (refer to device datasheet).
// Therefore, ADC clock prescaler must be configured in function // Therefore, ADC clock prescaler must be configured in function
@ -108,7 +105,7 @@ uint16_t adc_read(analogin_t *obj)
// Configure ADC channel // Configure ADC channel
sConfig.Rank = 1; sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5; sConfig.SamplingTime = ADC_SAMPLETIME_41CYCLES_5;
switch (obj->channel) { switch (obj->channel) {
case 0: case 0:
@ -161,9 +158,11 @@ uint16_t adc_read(analogin_t *obj)
break; break;
case 16: case 16:
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
break; break;
case 17: case 17:
sConfig.Channel = ADC_CHANNEL_VREFINT; sConfig.Channel = ADC_CHANNEL_VREFINT;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
break; break;
default: default:
return 0; return 0;