From fd141371802a95f5f47551c25b5fe23a058449e0 Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Wed, 20 Jul 2022 09:20:19 +0000
Subject: [PATCH] [InternalTemp] Added support for STM32F2

---
 src/shared/drivers/adc/InternalTemp.cpp  | 12 ++++++++----
 src/tests/drivers/test-internal-temp.cpp |  2 +-
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/shared/drivers/adc/InternalTemp.cpp b/src/shared/drivers/adc/InternalTemp.cpp
index 39a41d4ed..e6c15b2fc 100644
--- a/src/shared/drivers/adc/InternalTemp.cpp
+++ b/src/shared/drivers/adc/InternalTemp.cpp
@@ -22,10 +22,12 @@
 
 #include "InternalTemp.h"
 
+#ifdef _ARCH_CORTEXM4_STM32F4
 #define TEMP30_CAL_VALUE ((uint16_t*)((uint32_t)0x1FFF7A2C))
 #define TEMP110_CAL_VALUE ((uint16_t*)((uint32_t)0x1FFF7A2E))
 #define TEMP30 30
 #define TEMP110 110
+#endif
 
 namespace Boardcore
 {
@@ -40,7 +42,7 @@ bool InternalTemp::init()
 {
     bool result = adc.init();
 
-#ifdef _BOARD_STM32F4DISCOVERY
+#if defined(_BOARD_STM32F4DISCOVERY) || defined(_ARCH_CORTEXM3_STM32F2)
     adc.addRegularChannel(InternalADC::CH16);
 #else
     adc.addRegularChannel(InternalADC::CH18);
@@ -56,7 +58,7 @@ bool InternalTemp::selfTest() { return adc.selfTest(); }
 
 InternalTempData InternalTemp::sampleImpl()
 {
-#ifdef _BOARD_STM32F4DISCOVERY
+#if defined(_BOARD_STM32F4DISCOVERY) || defined(_ARCH_CORTEXM3_STM32F2)
     auto adcData = adc.readChannel(InternalADC::CH16, sampleTime);
 #else
     auto adcData = adc.readChannel(InternalADC::CH18, sampleTime);
@@ -65,14 +67,16 @@ InternalTempData InternalTemp::sampleImpl()
     InternalTempData data;
     data.temperatureTimestamp = adcData.voltageTimestamp;
 
+#ifdef _ARCH_CORTEXM3_STM32F2
     // Default conversion
-    // data.temperature          = ((adcData.voltage - 0.76) / 0.0025) + 25;
-
+    data.temperature = ((adcData.voltage - 0.76) / 0.0025) + 25;
+#else
     // Factory calibration
     float voltage30  = static_cast<float>(*TEMP30_CAL_VALUE) * 3.3 / 4095;
     float voltage110 = static_cast<float>(*TEMP110_CAL_VALUE) * 3.3 / 4095;
     float slope      = (voltage110 - voltage30) / (TEMP110 - TEMP30);
     data.temperature = ((adcData.voltage - voltage30) / slope) + TEMP30;
+#endif
 
     return data;
 }
diff --git a/src/tests/drivers/test-internal-temp.cpp b/src/tests/drivers/test-internal-temp.cpp
index 2d6c7dcf4..23fd7844a 100644
--- a/src/tests/drivers/test-internal-temp.cpp
+++ b/src/tests/drivers/test-internal-temp.cpp
@@ -37,7 +37,7 @@ int main()
     for (;;)
     {
         temp.sample();
-        printf("%2.3f test\n", temp.getLastSample().temperature);
+        printf("Temperature: %2.3f\n", temp.getLastSample().temperature);
 
         miosix::delayMs(1000);
     }
-- 
GitLab