summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Shawcroft <scott@adafruit.com>2020-02-12 10:55:00 -0800
committerGitHub <noreply@github.com>2020-02-12 10:55:00 -0800
commit35abc48a650ef990389a674200ffc48f4d336b15 (patch)
tree534c77cf4b05119fbde72db149094bf705fe55f2
parentcde9b63eabb3ca04342bae48124a0f04a6f08eb8 (diff)
parent4bc093675c11ae319deddec1b5de742c83cfb2f9 (diff)
Merge pull request #2589 from hierophect/stm32-temperature-us
STM32: Core temperature and voltage
-rw-r--r--locale/ID.po10
-rw-r--r--locale/circuitpython.pot10
-rw-r--r--locale/de_DE.po10
-rw-r--r--locale/en_US.po10
-rw-r--r--locale/en_x_pirate.po10
-rw-r--r--locale/es.po10
-rw-r--r--locale/fil.po10
-rw-r--r--locale/fr.po10
-rw-r--r--locale/it_IT.po10
-rw-r--r--locale/ko.po10
-rw-r--r--locale/pl.po10
-rw-r--r--locale/pt_BR.po10
-rw-r--r--locale/zh_Latn_pinyin.po10
-rw-r--r--ports/stm32f4/common-hal/microcontroller/Processor.c80
-rw-r--r--ports/stm32f4/mphalport.c21
-rw-r--r--ports/stm32f4/mphalport.h28
16 files changed, 227 insertions, 32 deletions
diff --git a/locale/ID.po b/locale/ID.po
index bcdad2994..182dd2679 100644
--- a/locale/ID.po
+++ b/locale/ID.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1285,6 +1285,10 @@ msgstr ""
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1494,6 +1498,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "PERINGATAN: Nama file kode anda mempunyai dua ekstensi\n"
diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot
index 1a378e331..baf5bf5ae 100644
--- a/locale/circuitpython.pot
+++ b/locale/circuitpython.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-11 19:18-0500\n"
+"POT-Creation-Date: 2020-02-12 12:11-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1269,6 +1269,10 @@ msgstr ""
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1477,6 +1481,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index f2d8537f6..a5bb053ab 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
@@ -1286,6 +1286,10 @@ msgstr "Stream fehlt readinto() oder write() Methode."
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1498,6 +1502,10 @@ msgstr "Länge des Wertes > max_length"
msgid "Viper functions don't currently support more than 4 arguments"
msgstr "Viper-Funktionen unterstützen derzeit nicht mehr als 4 Argumente"
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr ""
diff --git a/locale/en_US.po b/locale/en_US.po
index 680c535a9..5485810a3 100644
--- a/locale/en_US.po
+++ b/locale/en_US.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -1269,6 +1269,10 @@ msgstr ""
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1477,6 +1481,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr ""
diff --git a/locale/en_x_pirate.po b/locale/en_x_pirate.po
index 5ff575cdf..517d067da 100644
--- a/locale/en_x_pirate.po
+++ b/locale/en_x_pirate.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: @sommersoft, @MrCertainly\n"
@@ -1273,6 +1273,10 @@ msgstr ""
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1481,6 +1485,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "Blimey! Yer code filename has two extensions\n"
diff --git a/locale/es.po b/locale/es.po
index 873c4d3e7..76f079924 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -1286,6 +1286,10 @@ msgstr "A Stream le falta el método readinto() o write()."
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1495,6 +1499,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr "funciones Viper actualmente no soportan más de 4 argumentos."
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "ADVERTENCIA: El nombre de archivo de tu código tiene dos extensiones\n"
diff --git a/locale/fil.po b/locale/fil.po
index 63feb3316..187c31b53 100644
--- a/locale/fil.po
+++ b/locale/fil.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2018-12-20 22:15-0800\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n"
@@ -1292,6 +1292,10 @@ msgstr "Stream kulang ng readinto() o write() method."
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1504,6 +1508,10 @@ msgstr ""
"Ang mga function ng Viper ay kasalukuyang hindi sumusuporta sa higit sa 4 na "
"argumento"
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "BABALA: Ang pangalan ng file ay may dalawang extension\n"
diff --git a/locale/fr.po b/locale/fr.po
index ba1d56211..8b66e5c0d 100644
--- a/locale/fr.po
+++ b/locale/fr.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2019-04-14 20:05+0100\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\n"
@@ -1306,6 +1306,10 @@ msgstr "Il manque une méthode readinto() ou write() au flux."
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1522,6 +1526,10 @@ msgid "Viper functions don't currently support more than 4 arguments"
msgstr ""
"les fonctions de Viper ne supportent pas plus de 4 arguments actuellement"
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "ATTENTION: le nom de fichier de votre code a deux extensions\n"
diff --git a/locale/it_IT.po b/locale/it_IT.po
index 6bc116f21..3671a6ec2 100644
--- a/locale/it_IT.po
+++ b/locale/it_IT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n"
@@ -1303,6 +1303,10 @@ msgstr "Metodi mancanti readinto() o write() allo stream."
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1513,6 +1517,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr "Le funzioni Viper non supportano più di 4 argomenti al momento"
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "ATTENZIONE: Il nome del sorgente ha due estensioni\n"
diff --git a/locale/ko.po b/locale/ko.po
index 64bd2e9dd..f1f550775 100644
--- a/locale/ko.po
+++ b/locale/ko.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2019-05-06 14:22-0700\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1273,6 +1273,10 @@ msgstr ""
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1482,6 +1486,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr ""
diff --git a/locale/pl.po b/locale/pl.po
index 77357d05d..ee95b2e7d 100644
--- a/locale/pl.po
+++ b/locale/pl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2019-03-19 18:37-0700\n"
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
"Language-Team: pl\n"
@@ -1274,6 +1274,10 @@ msgstr "Strumień nie ma metod readinto() lub write()."
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1482,6 +1486,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr "Funkcje Viper nie obsługują obecnie więcej niż 4 argumentów"
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "UWAGA: Nazwa pliku ma dwa rozszerzenia\n"
diff --git a/locale/pt_BR.po b/locale/pt_BR.po
index e5dde29f4..b94b14fcd 100644
--- a/locale/pt_BR.po
+++ b/locale/pt_BR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2018-10-02 21:14-0000\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -1286,6 +1286,10 @@ msgstr ""
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1495,6 +1499,10 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "AVISO: Seu arquivo de código tem duas extensões\n"
diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po
index dbe1605b6..938f59cf7 100644
--- a/locale/zh_Latn_pinyin.po
+++ b/locale/zh_Latn_pinyin.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-05 15:55-0800\n"
+"POT-Creation-Date: 2020-02-10 11:46-0500\n"
"PO-Revision-Date: 2019-04-13 10:10-0700\n"
"Last-Translator: hexthat\n"
"Language-Team: Chinese Hanyu Pinyin\n"
@@ -1279,6 +1279,10 @@ msgstr "Liú quēshǎo readinto() huò write() fāngfǎ."
msgid "Supply at least one UART pin"
msgstr ""
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Temperature read timed out"
+msgstr ""
+
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
@@ -1489,6 +1493,10 @@ msgstr "Zhí chángdù > zuìdà chángdù"
msgid "Viper functions don't currently support more than 4 arguments"
msgstr "Viper hánshù mùqián bù zhīchí chāoguò 4 gè cānshù"
+#: ports/stm32f4/common-hal/microcontroller/Processor.c
+msgid "Voltage read timed out"
+msgstr ""
+
#: main.c
msgid "WARNING: Your code filename has two extensions\n"
msgstr "Jǐnggào: Nǐ de dàimǎ wénjiàn míng yǒu liǎng gè kuòzhǎn míng\n"
diff --git a/ports/stm32f4/common-hal/microcontroller/Processor.c b/ports/stm32f4/common-hal/microcontroller/Processor.c
index 3ab746685..324659cef 100644
--- a/ports/stm32f4/common-hal/microcontroller/Processor.c
+++ b/ports/stm32f4/common-hal/microcontroller/Processor.c
@@ -3,7 +3,6 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2017 Dan Halbert for Adafruit Industries
* Copyright (c) 2019 Lucian Copeland for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -34,12 +33,87 @@
#define STM32_UUID ((uint32_t *)0x1FFF7A10)
+//Factory calibration locations
+#define ADC_CAL_ADDRESS (0x1fff7a2a)
+#define ADC_CAL1 ((uint16_t*)(ADC_CAL_ADDRESS + 2))
+#define ADC_CAL2 ((uint16_t*)(ADC_CAL_ADDRESS + 4))
+#define VREFIN_CAL ((uint16_t *)ADC_CAL_ADDRESS)
+
+// correction factor for reference value
+STATIC volatile float adc_refcor = 1.0f;
+
+STATIC void set_adc_params(ADC_HandleTypeDef *AdcHandle) {
+ AdcHandle->Instance = ADC1;
+ AdcHandle->Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
+ AdcHandle->Init.Resolution = ADC_RESOLUTION_12B;
+ AdcHandle->Init.ScanConvMode = DISABLE;
+ AdcHandle->Init.ContinuousConvMode = DISABLE;
+ AdcHandle->Init.DiscontinuousConvMode = DISABLE;
+ AdcHandle->Init.NbrOfDiscConversion = 0;
+ AdcHandle->Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
+ AdcHandle->Init.ExternalTrigConv = ADC_SOFTWARE_START;
+ AdcHandle->Init.DataAlign = ADC_DATAALIGN_RIGHT;
+ AdcHandle->Init.NbrOfConversion = 1;
+ AdcHandle->Init.DMAContinuousRequests = DISABLE;
+ AdcHandle->Init.EOCSelection = ADC_EOC_SINGLE_CONV;
+}
+
float common_hal_mcu_processor_get_temperature(void) {
- return NAN;
+ __HAL_RCC_ADC1_CLK_ENABLE();
+
+ //HAL Implementation
+ ADC_HandleTypeDef AdcHandle;
+ ADC_ChannelConfTypeDef sConfig;
+ set_adc_params(&AdcHandle);
+ HAL_ADC_Init(&AdcHandle);
+
+ ADC->CCR |= ADC_CCR_TSVREFE;
+ ADC->CCR &= ~ADC_CCR_VBATE; // If this somehow got turned on, it'll return bad values.
+
+ sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; //either 16 or 18, depending on chip
+ sConfig.Rank = 1;
+ sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; // Temp sensor likes 10us minimum
+ HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
+
+ HAL_ADC_Start(&AdcHandle);
+ if (HAL_ADC_PollForConversion(&AdcHandle,1) != HAL_OK) {
+ mp_raise_RuntimeError(translate("Temperature read timed out"));
+ }
+ uint32_t value = (uint32_t)HAL_ADC_GetValue(&AdcHandle);
+ HAL_ADC_Stop(&AdcHandle);
+
+ //There's no F4 specific appnote for this but it works the same as the L1 in AN3964
+ float core_temp_avg_slope = (*ADC_CAL2 - *ADC_CAL1) / 80.0;
+ return (((float)value * adc_refcor - *ADC_CAL1) / core_temp_avg_slope) + 30.0f;
}
float common_hal_mcu_processor_get_voltage(void) {
- return NAN;
+ __HAL_RCC_ADC1_CLK_ENABLE();
+
+ //HAL Implementation
+ ADC_HandleTypeDef AdcHandle;
+ ADC_ChannelConfTypeDef sConfig;
+ set_adc_params(&AdcHandle);
+ HAL_ADC_Init(&AdcHandle);
+
+ ADC->CCR |= ADC_CCR_TSVREFE;
+
+ sConfig.Channel = ADC_CHANNEL_VREFINT;
+ sConfig.Rank = 1;
+ sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
+ HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
+
+ HAL_ADC_Start(&AdcHandle);
+ if (HAL_ADC_PollForConversion(&AdcHandle,1) != HAL_OK) {
+ mp_raise_RuntimeError(translate("Voltage read timed out"));
+ }
+ uint32_t value = (uint32_t)HAL_ADC_GetValue(&AdcHandle);
+ HAL_ADC_Stop(&AdcHandle);
+
+ //This value could be used to actively correct ADC values.
+ adc_refcor = ((float)(*VREFIN_CAL)) / ((float)value);
+
+ return adc_refcor * 3.3f;
}
uint32_t common_hal_mcu_processor_get_frequency(void) {
diff --git a/ports/stm32f4/mphalport.c b/ports/stm32f4/mphalport.c
index f78e9c750..a3cf501c0 100644
--- a/ports/stm32f4/mphalport.c
+++ b/ports/stm32f4/mphalport.c
@@ -31,18 +31,15 @@
#include "py/mpstate.h"
#include "py/gc.h"
+#include "shared-bindings/microcontroller/__init__.h"
#include "supervisor/shared/tick.h"
+#include "stm32f4xx_hal.h"
-/*------------------------------------------------------------------*/
-/* delay
- *------------------------------------------------------------------*/
void mp_hal_delay_ms(mp_uint_t delay) {
uint64_t start_tick = supervisor_ticks_ms64();
uint64_t duration = 0;
while (duration < delay) {
- #ifdef MICROPY_VM_HOOK_LOOP
- MICROPY_VM_HOOK_LOOP
- #endif
+ RUN_BACKGROUND_TASKS;
// Check to see if we've been CTRL-Ced by autoreload or the user.
if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)) ||
MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception))) {
@@ -52,3 +49,15 @@ void mp_hal_delay_ms(mp_uint_t delay) {
// TODO(tannewt): Go to sleep for a little while while we wait.
}
}
+
+void mp_hal_delay_us(mp_uint_t delay) {
+ common_hal_mcu_delay_us(delay);
+}
+
+void mp_hal_disable_all_interrupts(void) {
+ common_hal_mcu_disable_interrupts();
+}
+
+void mp_hal_enable_all_interrupts(void) {
+ common_hal_mcu_enable_interrupts();
+}
diff --git a/ports/stm32f4/mphalport.h b/ports/stm32f4/mphalport.h
index df2f0ca65..b392cb0f8 100644
--- a/ports/stm32f4/mphalport.h
+++ b/ports/stm32f4/mphalport.h
@@ -24,20 +24,28 @@
* THE SOFTWARE.
*/
-#ifndef __STM32F4_HAL
-#define __STM32F4_HAL
+#ifndef MICROPY_INCLUDED_STM32F4_MPHALPORT_H
+#define MICROPY_INCLUDED_STM32F4_MPHALPORT_H
-#include <stdbool.h>
-#include <stdint.h>
+#include "py/obj.h"
+
+#include "lib/oofatfs/ff.h"
-#include "lib/utils/interrupt_char.h"
-#include "py/mpconfig.h"
#include "supervisor/shared/tick.h"
+// Global millisecond tick count (driven by SysTick interrupt).
+static inline mp_uint_t mp_hal_ticks_ms(void) {
+ return supervisor_ticks_ms32();
+}
+// Number of bytes in receive buffer
+volatile uint8_t usb_rx_count;
+volatile bool mp_cdc_enabled;
+
+int receive_usb(void);
-#define mp_hal_ticks_ms() ((mp_uint_t) supervisor_ticks_ms32())
-//#define mp_hal_delay_us(us) NRFX_DELAY_US((uint32_t) (us))
+void mp_hal_set_interrupt_char(int c);
-bool mp_hal_stdin_any(void);
+void mp_hal_disable_all_interrupts(void);
+void mp_hal_enable_all_interrupts(void);
-#endif
+#endif // MICROPY_INCLUDED_STM32F4_MPHALPORT_H