diff options
| author | Scott Shawcroft <scott@adafruit.com> | 2020-02-12 10:55:00 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-12 10:55:00 -0800 |
| commit | 35abc48a650ef990389a674200ffc48f4d336b15 (patch) | |
| tree | 534c77cf4b05119fbde72db149094bf705fe55f2 | |
| parent | cde9b63eabb3ca04342bae48124a0f04a6f08eb8 (diff) | |
| parent | 4bc093675c11ae319deddec1b5de742c83cfb2f9 (diff) | |
Merge pull request #2589 from hierophect/stm32-temperature-us
STM32: Core temperature and voltage
| -rw-r--r-- | locale/ID.po | 10 | ||||
| -rw-r--r-- | locale/circuitpython.pot | 10 | ||||
| -rw-r--r-- | locale/de_DE.po | 10 | ||||
| -rw-r--r-- | locale/en_US.po | 10 | ||||
| -rw-r--r-- | locale/en_x_pirate.po | 10 | ||||
| -rw-r--r-- | locale/es.po | 10 | ||||
| -rw-r--r-- | locale/fil.po | 10 | ||||
| -rw-r--r-- | locale/fr.po | 10 | ||||
| -rw-r--r-- | locale/it_IT.po | 10 | ||||
| -rw-r--r-- | locale/ko.po | 10 | ||||
| -rw-r--r-- | locale/pl.po | 10 | ||||
| -rw-r--r-- | locale/pt_BR.po | 10 | ||||
| -rw-r--r-- | locale/zh_Latn_pinyin.po | 10 | ||||
| -rw-r--r-- | ports/stm32f4/common-hal/microcontroller/Processor.c | 80 | ||||
| -rw-r--r-- | ports/stm32f4/mphalport.c | 21 | ||||
| -rw-r--r-- | ports/stm32f4/mphalport.h | 28 |
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 |
