Skip to content

Commit 54a32e0

Browse files
committed
STM32L1 : internal ADC channels
1 parent 726f207 commit 54a32e0

File tree

5 files changed

+36
-12
lines changed

5 files changed

+36
-12
lines changed

targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PeripheralPins.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ const PinMap PinMap_ADC[] = {
5959
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
6060
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
6161
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
62+
{NC, NC, 0}
63+
};
64+
65+
const PinMap PinMap_ADC_Internal[] = {
6266
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
6367
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
6468
{NC, NC, 0}

targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PeripheralPins.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ const PinMap PinMap_ADC[] = {
5959
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
6060
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
6161
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
62+
{NC, NC, 0}
63+
};
64+
65+
const PinMap PinMap_ADC_Internal[] = {
6266
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
6367
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
6468
{NC, NC, 0}

targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/PeripheralPins.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ const PinMap PinMap_ADC[] = {
5959
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
6060
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
6161
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
62+
{NC, NC, 0}
63+
};
64+
65+
const PinMap PinMap_ADC_Internal[] = {
6266
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
6367
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
6468
{NC, NC, 0}

targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/PeripheralPins.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ const PinMap PinMap_ADC[] = {
4949
{PB_13, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC_IN19
5050
{PB_14, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 20, 0)}, // ADC_IN20
5151
{PB_15, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 21, 0)}, // ADC_IN21
52+
{NC, NC, 0}
53+
};
54+
55+
const PinMap PinMap_ADC_Internal[] = {
5256
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
5357
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
5458
{NC, NC, 0}

targets/TARGET_STM/TARGET_STM32L1/analogin_api.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,29 @@ int adc_inited = 0;
4141
void analogin_init(analogin_t *obj, PinName pin)
4242
{
4343
RCC_OscInitTypeDef RCC_OscInitStruct;
44-
45-
// Get the peripheral name from the pin and assign it to the object
46-
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
44+
uint32_t function = (uint32_t)NC;
45+
46+
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
47+
// are described in PinNames.h and PeripheralPins.c
48+
// Pin value must be between 0xF0 and 0xFF
49+
if ((pin < 0xF0) || (pin >= 0x100)) {
50+
// Normal channels
51+
// Get the peripheral name from the pin and assign it to the object
52+
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
53+
// Get the functions (adc channel) from the pin and assign it to the object
54+
function = pinmap_function(pin, PinMap_ADC);
55+
// Configure GPIO
56+
pinmap_pinout(pin, PinMap_ADC);
57+
} else {
58+
// Internal channels
59+
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC_Internal);
60+
function = pinmap_function(pin, PinMap_ADC_Internal);
61+
// No GPIO configuration for internal channels
62+
}
4763
MBED_ASSERT(obj->handle.Instance != (ADC_TypeDef *)NC);
48-
49-
// Get the pin function and assign the used channel to the object
50-
uint32_t function = pinmap_function(pin, PinMap_ADC);
5164
MBED_ASSERT(function != (uint32_t)NC);
52-
obj->channel = STM_PIN_CHANNEL(function);
5365

54-
// Configure GPIO excepted for internal channels (Temperature, Vref, Vbat, ...)
55-
// ADC Internal Channels "pins" are described in PinNames.h and must have a value >= 0xF0
56-
if (pin < 0xF0) {
57-
pinmap_pinout(pin, PinMap_ADC);
58-
}
66+
obj->channel = STM_PIN_CHANNEL(function);
5967

6068
// Save pin number for the read function
6169
obj->pin = pin;

0 commit comments

Comments
 (0)