diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PeripheralPins.c index f97c5dc4e2..e9256b4651 100644 --- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H743xI/TARGET_NUCLEO_H743ZI2/PeripheralPins.c @@ -120,9 +120,9 @@ MBED_WEAK const PinMap PinMap_ADC[] = { }; MBED_WEAK const PinMap PinMap_ADC_Internal[] = { - {ADC_TEMP, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC3_INP/INN18 - {ADC_VREF, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC3_INP/INN19 - {ADC_VBAT, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC3_INP/INN17 + {ADC_TEMP, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC3_INP18 + {ADC_VREF, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC3_INP19 + {ADC_VBAT, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC3_INP17 {NC, NC, 0} }; diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PeripheralPins.c index 47b4a42ffe..4aaf1bb8f9 100644 --- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_DISCO_H747I/PeripheralPins.c @@ -127,11 +127,10 @@ MBED_WEAK const PinMap PinMap_ADC[] = { {NC, NC, 0} }; -// !!! SECTION TO BE CHECKED WITH DEVICE REFERENCE MANUAL MBED_WEAK const PinMap PinMap_ADC_Internal[] = { - {ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, - {ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, - {ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, + {ADC_TEMP, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC3_INP18 + {ADC_VREF, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC3_INP19 + {ADC_VBAT, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC3_INP17 {NC, NC, 0} }; diff --git a/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c b/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c index 029fe0b87a..7d9ec34e8a 100644 --- a/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c +++ b/targets/TARGET_STM/TARGET_STM32H7/analogin_device.c @@ -174,90 +174,87 @@ uint16_t adc_read(analogin_t *obj) sConfig.OffsetRightShift = DISABLE; sConfig.OffsetSignedSaturation = DISABLE; - switch (obj->channel) { - case 0: - sConfig.Channel = ADC_CHANNEL_0; + switch (obj->pin) { + case ADC_TEMP: + sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; + sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; break; - case 1: - sConfig.Channel = ADC_CHANNEL_1; - break; - case 2: - sConfig.Channel = ADC_CHANNEL_2; - break; - case 3: - sConfig.Channel = ADC_CHANNEL_3; - break; - case 4: - sConfig.Channel = ADC_CHANNEL_4; - break; - case 5: - sConfig.Channel = ADC_CHANNEL_5; - break; - case 6: - sConfig.Channel = ADC_CHANNEL_6; - break; - case 7: - sConfig.Channel = ADC_CHANNEL_7; - break; - case 8: - sConfig.Channel = ADC_CHANNEL_8; - break; - case 9: - sConfig.Channel = ADC_CHANNEL_9; - break; - case 10: - sConfig.Channel = ADC_CHANNEL_10; - break; - case 11: - sConfig.Channel = ADC_CHANNEL_11; - break; - case 12: - sConfig.Channel = ADC_CHANNEL_12; - break; - case 13: - sConfig.Channel = ADC_CHANNEL_13; - break; - case 14: - sConfig.Channel = ADC_CHANNEL_14; - break; - case 15: - sConfig.Channel = ADC_CHANNEL_15; - break; - case 16: - sConfig.Channel = ADC_CHANNEL_16; - break; - case 17: - sConfig.Channel = ADC_CHANNEL_17; -#if defined(ADC3) - if ((ADCName)obj->handle.Instance == ADC_3) { - sConfig.Channel = ADC_CHANNEL_VBAT; - sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; - } -#endif + case ADC_VREF: + sConfig.Channel = ADC_CHANNEL_VREFINT; + sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; break; - case 18: - sConfig.Channel = ADC_CHANNEL_18; -#if defined(ADC3) - if ((ADCName)obj->handle.Instance == ADC_3) { - sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; - sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; - } -#endif + case ADC_VBAT: + sConfig.Channel = ADC_CHANNEL_VBAT; + sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; break; - case 19: - sConfig.Channel = ADC_CHANNEL_19; -#if defined(ADC3) - if ((ADCName)obj->handle.Instance == ADC_3) { - sConfig.Channel = ADC_CHANNEL_VREFINT; - sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; - } -#endif - break; default: - return 0; + switch (obj->channel) { + case 0: + sConfig.Channel = ADC_CHANNEL_0; + break; + case 1: + sConfig.Channel = ADC_CHANNEL_1; + break; + case 2: + sConfig.Channel = ADC_CHANNEL_2; + break; + case 3: + sConfig.Channel = ADC_CHANNEL_3; + break; + case 4: + sConfig.Channel = ADC_CHANNEL_4; + break; + case 5: + sConfig.Channel = ADC_CHANNEL_5; + break; + case 6: + sConfig.Channel = ADC_CHANNEL_6; + break; + case 7: + sConfig.Channel = ADC_CHANNEL_7; + break; + case 8: + sConfig.Channel = ADC_CHANNEL_8; + break; + case 9: + sConfig.Channel = ADC_CHANNEL_9; + break; + case 10: + sConfig.Channel = ADC_CHANNEL_10; + break; + case 11: + sConfig.Channel = ADC_CHANNEL_11; + break; + case 12: + sConfig.Channel = ADC_CHANNEL_12; + break; + case 13: + sConfig.Channel = ADC_CHANNEL_13; + break; + case 14: + sConfig.Channel = ADC_CHANNEL_14; + break; + case 15: + sConfig.Channel = ADC_CHANNEL_15; + break; + case 16: + sConfig.Channel = ADC_CHANNEL_16; + break; + case 17: + sConfig.Channel = ADC_CHANNEL_17; + break; + case 18: + sConfig.Channel = ADC_CHANNEL_18; + break; + case 19: + sConfig.Channel = ADC_CHANNEL_19; + break; + default: + return 0; + } } if (HAL_ADC_ConfigChannel(&obj->handle, &sConfig) != HAL_OK) { @@ -273,7 +270,13 @@ uint16_t adc_read(analogin_t *obj) if (HAL_ADC_PollForConversion(&obj->handle, 10) == HAL_OK) { adcValue = (uint16_t)HAL_ADC_GetValue(&obj->handle); } + LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE((&obj->handle)->Instance), LL_ADC_PATH_INTERNAL_NONE); + + if (HAL_ADC_Stop(&obj->handle) != HAL_OK) { + error("HAL_ADC_Stop issue"); + } + return adcValue; }