From cb3c66e79358f03367d0b4e5d2b6ec649ac29733 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Thu, 20 Sep 2018 23:51:33 +1000
Subject: [PATCH] stm32/adc: Increase sample time for internal sensors on L4
 MCUs.

They need time (around 4us for VREFINT) to obtain accurate results.

Fixes issue #4022.
---
 ports/stm32/adc.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/ports/stm32/adc.c b/ports/stm32/adc.c
index c20e1bca4..f16159bef 100644
--- a/ports/stm32/adc.c
+++ b/ports/stm32/adc.c
@@ -304,7 +304,13 @@ STATIC void adc_config_channel(ADC_HandleTypeDef *adc_handle, uint32_t channel)
     sConfig.OffsetRightShift = DISABLE;
     sConfig.OffsetSignedSaturation = DISABLE;
 #elif defined(STM32L4)
-    sConfig.SamplingTime = ADC_SAMPLETIME_12CYCLES_5;
+    if (channel == ADC_CHANNEL_VREFINT
+        || channel == ADC_CHANNEL_TEMPSENSOR
+        || channel == ADC_CHANNEL_VBAT) {
+        sConfig.SamplingTime = ADC_SAMPLETIME_247CYCLES_5;
+    } else {
+        sConfig.SamplingTime = ADC_SAMPLETIME_12CYCLES_5;
+    }
     sConfig.SingleDiff = ADC_SINGLE_ENDED;
     sConfig.OffsetNumber = ADC_OFFSET_NONE;
     sConfig.Offset = 0;
-- 
GitLab