Forked.

Fork of mbed-dev by mbed official

Revision:
172:7d866c31b3c5
Parent:
171:89b338f31ef1
diff -r 89b338f31ef1 -r 7d866c31b3c5 targets/TARGET_STM/TARGET_STM32L1/analogin_api.c
--- a/targets/TARGET_STM/TARGET_STM32L1/analogin_api.c	Wed Aug 16 18:27:13 2017 +0100
+++ b/targets/TARGET_STM/TARGET_STM32L1/analogin_api.c	Thu Aug 31 17:27:04 2017 +0100
@@ -41,22 +41,30 @@
 void analogin_init(analogin_t *obj, PinName pin)
 {
     RCC_OscInitTypeDef RCC_OscInitStruct;
+    uint32_t function = (uint32_t)NC;
 
-    // Get the peripheral name from the pin and assign it to the object
-    obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
+    // ADC Internal Channels "pins"  (Temperature, Vref, Vbat, ...)
+    //   are described in PinNames.h and PeripheralPins.c
+    //   Pin value must be between 0xF0 and 0xFF
+    if ((pin < 0xF0) || (pin >= 0x100)) {
+        // Normal channels
+        // Get the peripheral name from the pin and assign it to the object
+        obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
+        // Get the functions (adc channel) from the pin and assign it to the object
+        function = pinmap_function(pin, PinMap_ADC);
+        // Configure GPIO
+        pinmap_pinout(pin, PinMap_ADC);
+    } else {
+        // Internal channels
+        obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC_Internal);
+        function = pinmap_function(pin, PinMap_ADC_Internal);
+        // No GPIO configuration for internal channels
+    }
     MBED_ASSERT(obj->handle.Instance != (ADC_TypeDef *)NC);
-
-    // Get the pin function and assign the used channel to the object
-    uint32_t function = pinmap_function(pin, PinMap_ADC);
     MBED_ASSERT(function != (uint32_t)NC);
+
     obj->channel = STM_PIN_CHANNEL(function);
 
-    // Configure GPIO excepted for internal channels (Temperature, Vref, Vbat, ...)
-    // ADC Internal Channels "pins" are described in PinNames.h and must have a value >= 0xF0
-    if (pin < 0xF0) {
-        pinmap_pinout(pin, PinMap_ADC);
-    }
-
     // Save pin number for the read function
     obj->pin = pin;