Skip to content

Commit 7653f65

Browse files
Merge pull request #4878 from jeromecoutant/PR_ADC_INTERNAL
STM32 : internal ADC channels
2 parents 86abcc9 + 54a32e0 commit 7653f65

File tree

27 files changed

+163
-52
lines changed

27 files changed

+163
-52
lines changed

Diff for: targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
5656
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
5757
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
58+
{NC, NC, 0}
59+
};
60+
61+
const PinMap PinMap_ADC_Internal[] = {
5862
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC_IN16
5963
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
6064
{ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
5656
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
5757
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
58+
{NC, NC, 0}
59+
};
60+
61+
const PinMap PinMap_ADC_Internal[] = {
5862
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC_IN16
5963
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
6064
// {ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC_IN18 - Not present

Diff for: targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ const PinMap PinMap_ADC[] = {
4949
{PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC_IN7
5050
{PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC_IN8
5151
{PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC_IN9
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)}, // ADC_IN16
5357
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
5458
{ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ const PinMap PinMap_ADC[] = {
4949
{PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC_IN7
5050
{PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC_IN8
5151
{PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC_IN9
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)}, // ADC_IN16
5357
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
5458
{ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
5656
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
5757
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
58+
{NC, NC, 0}
59+
};
60+
61+
const PinMap PinMap_ADC_Internal[] = {
5862
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC_IN16
5963
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
6064
// {ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC_IN18 - Not present

Diff for: targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
5656
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
5757
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
58+
{NC, NC, 0}
59+
};
60+
61+
const PinMap PinMap_ADC_Internal[] = {
5862
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC_IN16
5963
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
6064
{ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F0/analogin_api.c

+20-11
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,29 @@
3939
int adc_inited = 0;
4040

4141
void analogin_init(analogin_t *obj, PinName pin) {
42-
// Get the peripheral name from the pin and assign it to the object
43-
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
42+
uint32_t function = (uint32_t)NC;
43+
44+
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
45+
// are described in PinNames.h and PeripheralPins.c
46+
// Pin value must be between 0xF0 and 0xFF
47+
if ((pin < 0xF0) || (pin >= 0x100)) {
48+
// Normal channels
49+
// Get the peripheral name from the pin and assign it to the object
50+
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
51+
// Get the functions (adc channel) from the pin and assign it to the object
52+
function = pinmap_function(pin, PinMap_ADC);
53+
// Configure GPIO
54+
pinmap_pinout(pin, PinMap_ADC);
55+
} else {
56+
// Internal channels
57+
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC_Internal);
58+
function = pinmap_function(pin, PinMap_ADC_Internal);
59+
// No GPIO configuration for internal channels
60+
}
4461
MBED_ASSERT(obj->handle.Instance != (ADC_TypeDef *)NC);
45-
46-
// Get the functions (adc channel) from the pin and assign it to the object
47-
uint32_t function = pinmap_function(pin, PinMap_ADC);
4862
MBED_ASSERT(function != (uint32_t)NC);
49-
obj->channel = STM_PIN_CHANNEL(function);
5063

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

5766
// Save pin number for the read function
5867
obj->pin = pin;

Diff for: targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
5656
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
5757
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
58+
{NC, NC, 0}
59+
};
60+
61+
const PinMap PinMap_ADC_Internal[] = {
5862
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC_IN16
5963
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
6064
{NC, NC, 0}

Diff for: targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
5656
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
5757
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
58+
{NC, NC, 0}
59+
};
60+
61+
const PinMap PinMap_ADC_Internal[] = {
5862
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC_IN16
5963
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
6064
{NC, NC, 0}

Diff for: targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC_IN13
5656
{PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC_IN14
5757
{PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC_IN15
58+
{NC, NC, 0}
59+
};
60+
61+
const PinMap PinMap_ADC_Internal[] = {
5862
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC_IN16
5963
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC_IN17
6064
{NC, NC, 0}

Diff for: targets/TARGET_STM/TARGET_STM32F1/analogin_api.c

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

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

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

Diff for: targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ const PinMap PinMap_ADC[] = {
5757
{PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8
5858
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9
5959

60+
{NC, NC, 0}
61+
};
62+
63+
const PinMap PinMap_ADC_Internal[] = {
6064
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
6165
{ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC1_IN17
6266
{ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ const PinMap PinMap_ADC[] = {
5151
{PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 - ARDUINO D3
5252
{PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 - ARDUINO D6
5353

54+
{NC, NC, 0}
55+
};
56+
57+
const PinMap PinMap_ADC_Internal[] = {
5458
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
5559
{ADC_VREF1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18
5660
{ADC_VREF2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ const PinMap PinMap_ADC[] = {
9595
//{PF_2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10
9696
{PF_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5
9797

98+
{NC, NC, 0}
99+
};
100+
101+
const PinMap PinMap_ADC_Internal[] = {
98102
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
99103
{ADC_VREF1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18
100104
{ADC_VREF2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PeripheralPins.c

+4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ const PinMap PinMap_ADC[] = {
5858
{PC_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
5959
{PC_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11
6060

61+
{NC, NC, 0}
62+
};
63+
64+
const PinMap PinMap_ADC_Internal[] = {
6165
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
6266
{ADC_VREF1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18
6367
{ADC_VREF2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PeripheralPins.c

+3
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@ const PinMap PinMap_ADC[] = {
9191
//{PF_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10
9292
{PF_2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10
9393
{PF_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5
94+
{NC, NC, 0}
95+
};
9496

97+
const PinMap PinMap_ADC_Internal[] = {
9598
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
9699
{ADC_VREF1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18
97100
{ADC_VREF2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PeripheralPins.c

+3
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ const PinMap PinMap_ADC[] = {
5555
{PB_13, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13
5656
{PB_14, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_IN14
5757
{PB_15, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_IN15
58+
{NC, NC, 0}
59+
};
5860

61+
const PinMap PinMap_ADC_Internal[] = {
5962
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
6063
{ADC_VREF1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18
6164
{ADC_VREF2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PeripheralPins.c

+3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ const PinMap PinMap_ADC[] = {
6262
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9
6363
{PC_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
6464
{PC_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11
65+
{NC, NC, 0}
66+
};
6567

68+
const PinMap PinMap_ADC_Internal[] = {
6669
{ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
6770
{ADC_VREF1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18
6871
{ADC_VREF2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_IN18

Diff for: targets/TARGET_STM/TARGET_STM32F3/analogin_api.c

+20-11
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,29 @@ void analogin_init(analogin_t *obj, PinName pin)
5252
static int adc4_inited = 0;
5353
#endif
5454

55-
// Get the peripheral name from the pin and assign it to the object
56-
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
55+
uint32_t function = (uint32_t)NC;
56+
57+
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
58+
// are described in PinNames.h and PeripheralPins.c
59+
// Pin value must be between 0xF0 and 0xFF
60+
if ((pin < 0xF0) || (pin >= 0x100)) {
61+
// Normal channels
62+
// Get the peripheral name from the pin and assign it to the object
63+
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
64+
// Get the functions (adc channel) from the pin and assign it to the object
65+
function = pinmap_function(pin, PinMap_ADC);
66+
// Configure GPIO
67+
pinmap_pinout(pin, PinMap_ADC);
68+
} else {
69+
// Internal channels
70+
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC_Internal);
71+
function = pinmap_function(pin, PinMap_ADC_Internal);
72+
// No GPIO configuration for internal channels
73+
}
5774
MBED_ASSERT(obj->handle.Instance != (ADC_TypeDef *)NC);
58-
59-
// Get the pin function and assign the used channel to the object
60-
uint32_t function = pinmap_function(pin, PinMap_ADC);
6175
MBED_ASSERT(function != (uint32_t)NC);
62-
obj->channel = STM_PIN_CHANNEL(function);
6376

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

7079
// Save pin number for the read function
7180
obj->pin = pin;

Diff for: targets/TARGET_STM/TARGET_STM32F4/analogin_api.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ void analogin_init(analogin_t *obj, PinName pin)
5151
#endif
5252
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
5353
// are described in PinNames.h and PeripheralPins.c
54-
// Pin value must be >= 0xF0
55-
if (pin < 0xF0) {
54+
// Pin value must be between 0xF0 and 0xFF
55+
if ((pin < 0xF0) || (pin >= 0x100)) {
5656
// Normal channels
5757
// Get the peripheral name from the pin and assign it to the object
5858
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);

Diff for: targets/TARGET_STM/TARGET_STM32F7/analogin_api.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ void analogin_init(analogin_t *obj, PinName pin)
5151
#endif
5252
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
5353
// are described in PinNames.h and PeripheralPins.c
54-
// Pin value must be >= 0xF0
55-
if (pin < 0xF0) {
54+
// Pin value must be between 0xF0 and 0xFF
55+
if ((pin < 0xF0) || (pin >= 0x100)) {
5656
// Normal channels
5757
// Get the peripheral name from the pin and assign it to the object
5858
obj->handle.Instance = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);

Diff for: targets/TARGET_STM/TARGET_STM32L0/analogin_api.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ void analogin_init(analogin_t *obj, PinName pin)
4545

4646
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
4747
// are described in PinNames.h and PeripheralPins.c
48-
// Pin value must be >= 0xF0
49-
if (pin < 0xF0) {
48+
// Pin value must be between 0xF0 and 0xFF
49+
if ((pin < 0xF0) || (pin >= 0x100)) {
5050
// Normal channels
5151
// Get the peripheral name from the pin and assign it to the object
5252
obj->handle.Instance = (ADC_TypeDef *)pinmap_peripheral(pin, PinMap_ADC);

Diff for: targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PeripheralPins.c

+4
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}

Diff for: targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PeripheralPins.c

+4
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}

Diff for: targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/PeripheralPins.c

+4
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}

Diff for: targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/PeripheralPins.c

+4
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}

0 commit comments

Comments
 (0)