Skip to content

Commit 50cb260

Browse files
committed
STM32L1xx - Add support of ADC internal channels (Temperature, VRef)
1 parent 49fe84c commit 50cb260

File tree

9 files changed

+30
-4
lines changed

9 files changed

+30
-4
lines changed

targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PeripheralPins.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ 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+
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
63+
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
6264
{NC, NC, 0}
6365
};
6466

targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PinNames.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ typedef enum {
133133
//PH_0 = 0x70,
134134
//PH_1 = 0x71,
135135

136+
// ADC internal channels
137+
ADC_TEMP = 0xF0,
138+
ADC_VREF = 0xF1,
139+
136140
// Arduino connector namings
137141
A0 = PA_0,
138142
A1 = PA_1,

targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PeripheralPins.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ 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+
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
63+
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
6264
{NC, NC, 0}
6365
};
6466

targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PinNames.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ typedef enum {
133133
PH_0 = 0x70,
134134
PH_1 = 0x71,
135135

136+
// ADC internal channels
137+
ADC_TEMP = 0xF0,
138+
ADC_VREF = 0xF1,
139+
136140
// Arduino connector namings
137141
A0 = PA_0,
138142
A1 = PA_1,

targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/PeripheralPins.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ 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+
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
63+
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
6264
{NC, NC, 0}
6365
};
6466

targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/PinNames.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ typedef enum {
133133
PH_0 = 0x70,
134134
PH_1 = 0x71,
135135

136+
// ADC internal channels
137+
ADC_TEMP = 0xF0,
138+
ADC_VREF = 0xF1,
139+
136140
// Generic signals namings
137141
LED1 = PB_2,
138142
LED2 = PB_2,

targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/PeripheralPins.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ 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+
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
53+
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
5254
{NC, NC, 0}
5355
};
5456

targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/PinNames.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ typedef enum {
133133
PH_0 = 0x70,
134134
PH_1 = 0x71,
135135

136+
// ADC internal channels
137+
ADC_TEMP = 0xF0,
138+
ADC_VREF = 0xF1,
139+
136140
// GPIOs
137141
GPIO0 = PA_4, // analog out capable, analog in capable
138142
GPIO1 = PA_5, // analog out capable, analog in capable

targets/TARGET_STM/TARGET_STM32L1/analogin_api.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ void analogin_init(analogin_t *obj, PinName pin)
5353
MBED_ASSERT(function != (uint32_t)NC);
5454
obj->channel = STM_PIN_CHANNEL(function);
5555

56-
// Configure GPIO
57-
pinmap_pinout(pin, PinMap_ADC);
56+
// Configure GPIO excepted for internal channels (Temperature, Vref)
57+
if ((obj->channel != 16) && (obj->channel != 17)) {
58+
pinmap_pinout(pin, PinMap_ADC);
59+
}
5860

5961
// Save pin number for the read function
6062
obj->pin = pin;
@@ -154,10 +156,10 @@ static inline uint16_t adc_read(analogin_t *obj)
154156
sConfig.Channel = ADC_CHANNEL_15;
155157
break;
156158
case 16:
157-
sConfig.Channel = ADC_CHANNEL_16;
159+
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
158160
break;
159161
case 17:
160-
sConfig.Channel = ADC_CHANNEL_17;
162+
sConfig.Channel = ADC_CHANNEL_VREFINT;
161163
break;
162164
case 18:
163165
sConfig.Channel = ADC_CHANNEL_18;

0 commit comments

Comments
 (0)