From 987d3dfc2787593bbc33e7babc415191cb8d8880 Mon Sep 17 00:00:00 2001
From: dds90 <40141422+dds90@users.noreply.github.com>
Date: Mon, 30 Dec 2019 19:37:25 +0100
Subject: [PATCH 1/5] Add files via upload
---
boards.txt | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/boards.txt b/boards.txt
index 7cae09cbb7..ab3b11e36e 100644
--- a/boards.txt
+++ b/boards.txt
@@ -1,4 +1,4 @@
-# See: https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
+# See: https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
menu.pnum=Board part number
@@ -847,6 +847,14 @@ GenF1.menu.pnum.MAPLEMINI_F103CB.build.board=MAPLEMINI_F103CB
GenF1.menu.pnum.MAPLEMINI_F103CB.build.product_line=STM32F103xB
GenF1.menu.pnum.MAPLEMINI_F103CB.build.variant=MAPLEMINI_F103CB
+# VCCGND_F103ZET6 board
+GenF1.menu.pnum.VCCGND_F103ZET6=VCCGND_F103ZET6
+GenF1.menu.pnum.VCCGND_F103ZET6.upload.maximum_size=524288
+GenF1.menu.pnum.VCCGND_F103ZET6.upload.maximum_data_size=65536
+GenF1.menu.pnum.VCCGND_F103ZET6.build.board=VCCGND_F103ZET6
+GenF1.menu.pnum.VCCGND_F103ZET6.build.product_line=STM32F103xE
+GenF1.menu.pnum.VCCGND_F103ZET6.build.variant=VCCGND_F103ZET6
+
# Upload menu
GenF1.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
GenF1.menu.upload_method.swdMethod.upload.protocol=0
From 5dd006a3075ecff44885beb949534da0cfaa3f8a Mon Sep 17 00:00:00 2001
From: dds90 <40141422+dds90@users.noreply.github.com>
Date: Mon, 30 Dec 2019 19:38:39 +0100
Subject: [PATCH 2/5] Create ldscript.ld
---
variants/VCCGND_F103ZET6/ldscript.ld | 187 +++++++++++++++++++++++++++
1 file changed, 187 insertions(+)
create mode 100644 variants/VCCGND_F103ZET6/ldscript.ld
diff --git a/variants/VCCGND_F103ZET6/ldscript.ld b/variants/VCCGND_F103ZET6/ldscript.ld
new file mode 100644
index 0000000000..03e7a5e600
--- /dev/null
+++ b/variants/VCCGND_F103ZET6/ldscript.ld
@@ -0,0 +1,187 @@
+/*
+******************************************************************************
+**
+
+** File : LinkerScript.ld
+**
+** Author : Auto-generated by System Workbench for STM32
+**
+** Abstract : Linker script for STM32F103ZETx series
+** 512Kbytes FLASH and 64Kbytes RAM
+**
+** Set heap size, stack size and stack location according
+** to application requirements.
+**
+** Set memory bank area and size if external memory is used.
+**
+** Target : STMicroelectronics STM32
+**
+** Distribution: The file is distributed “as is,” without any warranty
+** of any kind.
+**
+*****************************************************************************
+** @attention
+**
+**
© COPYRIGHT(c) 2019 STMicroelectronics
+**
+** Redistribution and use in source and binary forms, with or without modification,
+** are permitted provided that the following conditions are met:
+** 1. Redistributions of source code must retain the above copyright notice,
+** this list of conditions and the following disclaimer.
+** 2. Redistributions in binary form must reproduce the above copyright notice,
+** this list of conditions and the following disclaimer in the documentation
+** and/or other materials provided with the distribution.
+** 3. Neither the name of STMicroelectronics nor the names of its contributors
+** may be used to endorse or promote products derived from this software
+** without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**
+*****************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = 0x20010000; /* end of RAM */
+/* Generate a link error if heap and stack don't fit into RAM */
+_Min_Heap_Size = 0x200; /* required amount of heap */
+_Min_Stack_Size = 0x400; /* required amount of stack */
+
+/* Specify the memory areas */
+MEMORY
+{
+RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
+FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
+}
+
+/* Define output sections */
+SECTIONS
+{
+ /* The startup code goes first into FLASH */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >FLASH
+
+ /* The program code and other data goes into FLASH */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >FLASH
+
+ /* Constant data goes into FLASH */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
+ .ARM : {
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ } >FLASH
+
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } >FLASH
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } >FLASH
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } >FLASH
+
+ /* used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections goes into RAM, load LMA copy after code */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+ } >RAM AT> FLASH
+
+
+ /* Uninitialized data section */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss secion */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM
+
+ /* User_heap_stack section, used to check that there is enough RAM left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM
+
+
+
+ /* Remove information from the standard libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
From b724e14ea6b3e2457db2f8e9f8f7842d39e5e3b3 Mon Sep 17 00:00:00 2001
From: dds90 <40141422+dds90@users.noreply.github.com>
Date: Mon, 30 Dec 2019 19:39:49 +0100
Subject: [PATCH 3/5] Add New Variant VCCGND_F103ZET6
Add New Variant VCCGND_F103ZET6
Schema:
https://ydsd1.oss-cn-shenzhen.aliyuncs.com/STM32F1/103ZEmini.rar
---
variants/VCCGND_F103ZET6/PeripheralPins.c | 334 ++++++++++++++++++++++
variants/VCCGND_F103ZET6/PinNamesVar.h | 30 ++
variants/VCCGND_F103ZET6/variant.cpp | 230 +++++++++++++++
variants/VCCGND_F103ZET6/variant.h | 312 ++++++++++++++++++++
4 files changed, 906 insertions(+)
create mode 100644 variants/VCCGND_F103ZET6/PeripheralPins.c
create mode 100644 variants/VCCGND_F103ZET6/PinNamesVar.h
create mode 100644 variants/VCCGND_F103ZET6/variant.cpp
create mode 100644 variants/VCCGND_F103ZET6/variant.h
diff --git a/variants/VCCGND_F103ZET6/PeripheralPins.c b/variants/VCCGND_F103ZET6/PeripheralPins.c
new file mode 100644
index 0000000000..7e05d6cdbe
--- /dev/null
+++ b/variants/VCCGND_F103ZET6/PeripheralPins.c
@@ -0,0 +1,334 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ * Automatically generated from STM32F103Z(C-D-E)Tx.xml
+ */
+#include "Arduino.h"
+#include "PeripheralPins.h"
+
+/* =====
+ * Note: Commented lines are alternative possibilities which are not used per default.
+ * If you change them, you will have to know what you do
+ * =====
+ */
+
+//*** ADC ***
+
+#ifdef HAL_ADC_MODULE_ENABLED
+WEAK const PinMap PinMap_ADC[] = {
+ // {PA_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0
+ // {PA_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC2_IN0
+ // {PA_0, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC3_IN0
+ // {PA_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1
+ // {PA_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_IN1
+ // {PA_1, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC3_IN1
+ // {PA_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2
+ // {PA_2, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_IN2
+ // {PA_2, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC3_IN2
+ // {PA_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3
+ // {PA_3, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_IN3
+ // {PA_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC3_IN3
+ // {PA_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4
+ // {PA_4, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_IN4
+ // {PA_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5
+ // {PA_5, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
+ // {PA_6, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6
+ // {PA_6, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC2_IN6
+ // {PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7
+ // {PA_7, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC2_IN7
+ // {PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8
+ // {PB_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC2_IN8
+ // {PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9
+ // {PB_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC2_IN9
+ // {PC_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10
+ // {PC_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10
+ {PC_0, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC3_IN10
+ // {PC_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11
+ // {PC_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11
+ {PC_1, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC3_IN11
+ // {PC_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12
+ // {PC_2, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_IN12
+ // {PC_2, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC3_IN12
+ // {PC_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13
+ // {PC_3, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC2_IN13
+ // {PC_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC3_IN13
+ // {PC_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14
+ // {PC_4, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_IN14
+ // {PC_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15
+ // {PC_5, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_IN15
+ {PF_6, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_IN4
+ {PF_7, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_IN5
+ {PF_8, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_IN6
+ {PF_9, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC3_IN7
+ //{PF_10, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC3_IN8
+ {NC, NP, 0}
+};
+#endif
+
+//*** DAC ***
+
+// #ifdef HAL_DAC_MODULE_ENABLED
+// WEAK const PinMap PinMap_DAC[] = {
+ // {PA_4, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
+ // {PA_5, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2
+ // {NC, NP, 0}
+// };
+// #endif
+
+//*** I2C ***
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SDA[] = {
+ {PB_7, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, AFIO_NONE)},
+ //{PB_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, AFIO_I2C1_ENABLE)},
+ //{PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, AFIO_NONE)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SCL[] = {
+ {PB_6, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, AFIO_NONE)},
+ //{PB_8, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, AFIO_I2C1_ENABLE)},
+ //{PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, AFIO_NONE)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** PWM ***
+
+#ifdef HAL_TIM_MODULE_ENABLED
+WEAK const PinMap PinMap_PWM[] = {
+ // {PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 0)}, // TIM2_CH1
+ // {PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_2, 1, 0)}, // TIM2_CH1
+ // {PA_0, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 0)}, // TIM5_CH1
+ // {PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 0)}, // TIM2_CH2
+ // {PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_2, 2, 0)}, // TIM2_CH2
+ // {PA_1, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 0)}, // TIM5_CH2
+ // {PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 0)}, // TIM2_CH3
+ // {PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_1, 3, 0)}, // TIM2_CH3
+ // {PA_2, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 0)}, // TIM5_CH3
+ // {PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 4, 0)}, // TIM2_CH4
+ // {PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_1, 4, 0)}, // TIM2_CH4
+ // {PA_3, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 4, 0)}, // TIM5_CH4
+ // {PA_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 0)}, // TIM3_CH1
+ // {PA_7, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_PARTIAL, 1, 1)}, // TIM1_CH1N
+ // {PA_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 0)}, // TIM3_CH2
+ // {PA_7, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 1)}, // TIM8_CH1N
+ // {PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 0)}, // TIM1_CH1
+ // {PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_PARTIAL, 1, 0)}, // TIM1_CH1
+ // {PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 0)}, // TIM1_CH2
+ // {PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_PARTIAL, 2, 0)}, // TIM1_CH2
+ // {PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 0)}, // TIM1_CH3
+ // {PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_PARTIAL, 3, 0)}, // TIM1_CH3
+ // {PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 4, 0)}, // TIM1_CH4
+ // {PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_PARTIAL, 4, 0)}, // TIM1_CH4
+ // {PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_1, 1, 0)}, // TIM2_CH1
+ // {PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_ENABLE, 1, 0)}, // TIM2_CH1
+ // {PB_0, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_PARTIAL, 2, 1)}, // TIM1_CH2N
+ // {PB_0, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 0)}, // TIM3_CH3
+ // {PB_0, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_PARTIAL, 3, 0)}, // TIM3_CH3
+ // {PB_0, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 1)}, // TIM8_CH2N
+ // {PB_1, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_PARTIAL, 3, 1)}, // TIM1_CH3N
+ // {PB_1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 4, 0)}, // TIM3_CH4
+ // {PB_1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_PARTIAL, 4, 0)}, // TIM3_CH4
+ // {PB_1, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 1)}, // TIM8_CH3N
+ // {PB_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_1, 2, 0)}, // TIM2_CH2
+ // {PB_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_ENABLE, 2, 0)}, // TIM2_CH2
+ {PB_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_PARTIAL, 1, 0)}, // TIM3_CH1
+ {PB_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_PARTIAL, 2, 0)}, // TIM3_CH2
+ // {PB_6, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 0)}, // TIM4_CH1
+ // {PB_7, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 0)}, // TIM4_CH2
+ // {PB_8, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 0)}, // TIM4_CH3
+ // {PB_9, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 4, 0)}, // TIM4_CH4
+ // {PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_2, 3, 0)}, // TIM2_CH3
+ // {PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_ENABLE, 3, 0)}, // TIM2_CH3
+ // {PB_11, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_PARTIAL_2, 4, 0)}, // TIM2_CH4
+ // {PB_11, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM2_ENABLE, 4, 0)}, // TIM2_CH4
+ // {PB_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 1)}, // TIM1_CH1N
+ // {PB_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 1)}, // TIM1_CH2N
+ // {PB_15, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 1)}, // TIM1_CH3N
+ // {PC_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_ENABLE, 1, 0)}, // TIM3_CH1
+ // {PC_6, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 1, 0)}, // TIM8_CH1
+ // {PC_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_ENABLE, 2, 0)}, // TIM3_CH2
+ // {PC_7, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 2, 0)}, // TIM8_CH2
+ // {PC_8, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_ENABLE, 3, 0)}, // TIM3_CH3
+ // {PC_8, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 3, 0)}, // TIM8_CH3
+ // {PC_9, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM3_ENABLE, 4, 0)}, // TIM3_CH4
+ // {PC_9, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE, 4, 0)}, // TIM8_CH4
+ {PD_12, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM4_ENABLE, 1, 0)}, // TIM4_CH1
+ {PD_13, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM4_ENABLE, 2, 0)}, // TIM4_CH2
+ {PD_14, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM4_ENABLE, 3, 0)}, // TIM4_CH3
+ {PD_15, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM4_ENABLE, 4, 0)}, // TIM4_CH4
+ // {PE_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_ENABLE, 1, 1)}, // TIM1_CH1N
+ // {PE_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_ENABLE, 1, 0)}, // TIM1_CH1
+ // {PE_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_ENABLE, 2, 1)}, // TIM1_CH2N
+ // {PE_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_ENABLE, 2, 0)}, // TIM1_CH2
+ // {PE_12, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_ENABLE, 3, 1)}, // TIM1_CH3N
+ // {PE_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_ENABLE, 3, 0)}, // TIM1_CH3
+ // {PE_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_TIM1_ENABLE, 4, 0)}, // TIM1_CH4
+ {NC, NP, 0}
+};
+#endif
+
+//*** SERIAL ***
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_TX[] = {
+ {PA_2, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ {PA_9, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_6, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART1_ENABLE)},
+ {PB_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PC_10, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PC_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART3_PARTIAL)},
+ //{PC_12, UART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PD_5, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART2_ENABLE)},
+ //{PD_8, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART3_ENABLE)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RX[] = {
+ {PA_3, USART2, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_NONE)},
+ {PA_10, USART1, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_7, USART1, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_USART1_ENABLE)},
+ {PB_11, USART3, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_NONE)},
+ //{PC_11, UART4, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_NONE)},
+ //{PC_11, USART3, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_USART3_PARTIAL)},
+ //{PD_2, UART5, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_NONE)},
+ //{PD_6, USART2, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_USART2_ENABLE)},
+ //{PD_9, USART3, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, AFIO_USART3_ENABLE)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RTS[] = {
+ // {PA_1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PA_12, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PB_14, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PB_14, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART3_PARTIAL)},
+ // {PD_4, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART2_ENABLE)},
+ // {PD_12, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART3_ENABLE)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_CTS[] = {
+ // {PA_0, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PA_11, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PB_13, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PB_13, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART3_PARTIAL)},
+ // {PD_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART2_ENABLE)},
+ // {PD_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_USART3_ENABLE)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** SPI ***
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MOSI[] = {
+ {PA_7, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_SPI1_ENABLE)},
+ //{PB_5, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MISO[] = {
+ {PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_SPI1_ENABLE)},
+ //{PB_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SCLK[] = {
+ {PA_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_SPI1_ENABLE)},
+ //{PB_3, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ //{PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SSEL[] = {
+ // {PA_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PA_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_SPI1_ENABLE)},
+ // {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ // {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** CAN ***
+
+// #ifdef HAL_CAN_MODULE_ENABLED
+// WEAK const PinMap PinMap_CAN_RD[] = {
+ // {PA_11, CAN1, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, AFIO_NONE)},
+ // {PB_8, CAN1, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, AFIO_CAN1_2)},
+ // {PD_0, CAN1, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, AFIO_CAN1_3)},
+ // {NC, NP, 0}
+// };
+// #endif
+
+// #ifdef HAL_CAN_MODULE_ENABLED
+// WEAK const PinMap PinMap_CAN_TD[] = {
+ // {PA_12, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, AFIO_NONE)},
+ // {PB_9, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, AFIO_CAN1_2)},
+ // {PD_1, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, AFIO_CAN1_3)},
+ // {NC, NP, 0}
+// };
+// #endif
+
+//*** No ETHERNET ***
+
+//*** No QUADSPI ***
+
+//*** USB ***
+
+#ifdef HAL_PCD_MODULE_ENABLED
+WEAK const PinMap PinMap_USB[] = {
+ {PA_11, USB, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, AFIO_NONE)}, // USB_DM
+ {PA_12, USB, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, AFIO_NONE)}, // USB_DP
+ {NC, NP, 0}
+};
+#endif
+
+//*** No USB_OTG_FS ***
+
+//*** No USB_OTG_HS ***
+
+//*** SD ***
+
+#ifdef HAL_SD_MODULE_ENABLED
+WEAK const PinMap PinMap_SD[] = {
+ //{PB_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D4
+ //{PB_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D5
+ //{PC_6, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D6
+ //{PC_7, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D7
+ {PC_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D0
+ {PC_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D1
+ {PC_10, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D2
+ {PC_11, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, AFIO_NONE)}, // SDIO_D3
+ {PC_12, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, AFIO_NONE)}, // SDIO_CK
+ {PD_2, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, AFIO_NONE)}, // SDIO_CMD
+ {NC, NP, 0}
+};
+#endif
diff --git a/variants/VCCGND_F103ZET6/PinNamesVar.h b/variants/VCCGND_F103ZET6/PinNamesVar.h
new file mode 100644
index 0000000000..f7fb9d83a4
--- /dev/null
+++ b/variants/VCCGND_F103ZET6/PinNamesVar.h
@@ -0,0 +1,30 @@
+/* SYS_WKUP */
+#ifdef PWR_WAKEUP_PIN1
+SYS_WKUP1 = PA_0,
+#endif
+#ifdef PWR_WAKEUP_PIN2
+SYS_WKUP2 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN3
+SYS_WKUP3 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN4
+SYS_WKUP4 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN5
+SYS_WKUP5 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN6
+SYS_WKUP6 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN7
+SYS_WKUP7 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN8
+SYS_WKUP8 = NC,
+#endif
+/* USB */
+#ifdef USBCON
+USB_DM = PA_11,
+USB_DP = PA_12,
+#endif
diff --git a/variants/VCCGND_F103ZET6/variant.cpp b/variants/VCCGND_F103ZET6/variant.cpp
new file mode 100644
index 0000000000..d5f63defaf
--- /dev/null
+++ b/variants/VCCGND_F103ZET6/variant.cpp
@@ -0,0 +1,230 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ */
+
+#include "pins_arduino.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Digital PinName array
+// This array allows to wrap Arduino pin number(Dx or x)
+// to STM32 PinName (PX_n)
+const PinName digitalPin[] = {
+ //PX_n, //Dx
+ PE_0, //D0
+ PE_1, //D1
+ PE_2, //D2
+ PE_3, //D3
+ PE_4, //D4
+ PE_5, //D5
+ PE_6, //D6
+ PC_13, //D7
+ PC_14, //D8 - LSE
+ PC_15, //D9 - LSE
+ PF_0, //D10
+ PF_1, //D11
+ PF_2, //D12
+ PF_3, //D13
+ PF_4, //D14
+ PF_5, //D15
+ PF_6, //D16
+ PF_7, //D17
+ PF_8, //D18
+ PF_9, //D19
+ PF_10, //D20
+ PC_0, //D21
+ PC_1, //D22
+ PC_2, //D23
+ PC_3, //D24
+ PA_0, //D25
+ PA_1, //D26
+ PA_2, //D27
+ PA_3, //D28
+ PA_4, //D29
+ PA_5, //D30 - SPI SCLK
+ PA_6, //D31 - SPI MISO
+ PA_7, //D32 - SPI MOSI
+ PC_4, //D33
+ PC_5, //D34
+ PB_0, //D35
+ PB_1, //D36
+ PB_2, //D37 - BOOT1
+ PF_11, //D38
+ PF_12, //D39
+ PF_13, //D40
+ PF_14, //D41
+ PF_15, //D42
+ PG_0, //D43
+ PG_1, //D44
+ PE_7, //D45
+ PE_8, //D46
+ PE_9, //D47
+ PE_10, //D48
+ PE_11, //D49
+ PE_12, //D50
+ PE_13, //D51
+ PE_14, //D52
+ PE_15, //D53
+ PB_10, //D54
+ PB_11, //D55
+ PB_12, //D56
+ PB_13, //D57
+ PB_14, //D58
+ PB_15, //D59
+ PD_8, //D60
+ PD_9, //D61
+ PD_10, //D62
+ PD_11, //D63
+ PD_12, //D64
+ PD_13, //D65
+ PD_14, //D66
+ PD_15, //D67
+ PG_2, //D68
+ PG_3, //D69
+ PG_4, //D70
+ PG_5, //D71
+ PG_6, //D72
+ PG_7, //D73
+ PG_8, //D74
+ PC_6, //D75
+ PC_7, //D76
+ PC_8, //D77
+ PC_9, //D78
+ PA_8, //D79
+ PA_9, //D80
+ PA_10, //D81
+ PA_11, //D82 - USB DM
+ PA_12, //D83 - USB DP
+ PA_13, //D84 - SWDI0
+ PA_14, //D85 - SWCLK
+ PA_15, //D86
+ PC_10, //D87
+ PC_11, //D88
+ PC_12, //D89
+ PD_0, //D90
+ PD_1, //D91
+ PD_2, //D92
+ PD_3, //D93
+ PD_4, //D94
+ PD_5, //D95
+ PD_6, //D96
+ PD_7, //D97
+ PG_9, //D98
+ PG_10, //D99
+ PG_11, //D100
+ PG_12, //D101
+ PG_13, //D102
+ PG_14, //D103
+ PG_15, //D104 - LED_BUILTIN
+ PB_3, //D105
+ PB_4, //D106
+ PB_5, //D107
+ PB_6, //D108 - I2C SCL
+ PB_7, //D109 - I2C SDA
+ PB_8, //D110
+ PB_9, //D111
+ // Required only if Ax pins are automaticaly defined using `NUM_ANALOG_FIRST`
+ // and have to be contiguous in this array
+ // Duplicated pins in order to be aligned with PinMap_ADC
+ PC_0, //D112/A0 = D0
+ PC_1, //D123/A1 = D1
+ PF_6, //D114/A2 = D2
+ PF_7, //D115/A3 = D3
+ PF_8, //D116/A4 = D4
+ PF_9, //D117/A5 = D5
+ PF_10 //D118/A6 = D6
+
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+// ----------------------------------------------------------------------------
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief System Clock Configuration
+ * The system Clock is configured as follow :
+ * System Clock source = PLL (HSE)
+ * SYSCLK(Hz) = 72000000
+ * HCLK(Hz) = 72000000
+ * AHB Prescaler = 1
+ * APB1 Prescaler = 2
+ * APB2 Prescaler = 1
+ * PLL_Source = HSE
+ * PLL_Mul = 9
+ * Flash Latency(WS) = 2
+ * ADC Prescaler = 6
+ * USB Prescaler = 1.5
+ * @param None
+ * @retval None
+ */
+WEAK void SystemClock_Config(void)
+{
+ // Here copy the desired System Clock Configuration
+ // It could be generated thanks STM32CubeMX after code generation for Toolchain/IDE: 'SW4STM32',
+ // available in src/main.c
+ // or
+ // copied from a STM32CubeYY project examples
+ // where 'YY' could be F0, F1, F2, F3, F4, F7, G0, G4, H7, L0, L1, L4, MP1, WB
+
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+ RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
+
+ /** Initializes the CPU, AHB and APB busses clocks
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+ RCC_OscInitStruct.LSIState = RCC_LSI_ON;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Initializes the CPU, AHB and APB busses clocks
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC
+ |RCC_PERIPHCLK_USB;
+ PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
+ PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
+ PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
+ {
+ Error_Handler();
+ }
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/variants/VCCGND_F103ZET6/variant.h b/variants/VCCGND_F103ZET6/variant.h
new file mode 100644
index 0000000000..dbac54acdd
--- /dev/null
+++ b/variants/VCCGND_F103ZET6/variant.h
@@ -0,0 +1,312 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ */
+
+#ifndef _VARIANT_ARDUINO_STM32_
+#define _VARIANT_ARDUINO_STM32_
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*----------------------------------------------------------------------------
+ * Pins
+ *----------------------------------------------------------------------------*/
+
+// Define pin names to match digital pin number --> Dx
+// It could be used with preprocessor tests (e.g. #if PXn == 3)
+// so an enum will not work.
+// !!!
+// !!! Copy the digitalPin[] array from the variant.cpp
+// !!! and remove all '_': PX_n --> PXn
+// !!! For NC, comment the line to warn x pin number is NC
+// !!! // x is NC
+// !!! For duplicated pin name, comment the line to warn x pin number
+// !!! is PXn which is already defined with y pin number
+// !!! // x is PXn (y)
+// !!! Ex:
+// !!! ...
+// !!! #define PA4 20 // A14 <-- if NUM_ANALOG_FIRST not defined
+// !!! or
+// !!! #define PA4 A14 // 20 <-- if NUM_ANALOG_FIRST defined
+// !!! #define PB4 21
+// !!! #define PB5 22
+// !!! #define PB3 23
+// !!! // 24 is PA4 (20)
+// !!! // 25 is PB4 (21)
+// !!! #define PA2 26 // A15 <-- if NUM_ANALOG_FIRST not defined
+// !!! or
+// !!! #define PA2 A15 // 26 <-- if NUM_ANALOG_FIRST defined
+// !!! ...
+//#define PXn x
+#define PE0 0
+#define PE1 1
+#define PE2 2
+#define PE3 3
+#define PE4 4
+#define PE5 5
+#define PE6 6
+#define PC13 7
+#define PC14 8 // LSE
+#define PC15 9 // LSE
+#define PF0 10
+#define PF1 11
+#define PF2 12
+#define PF3 13
+#define PF4 14
+#define PF5 15
+#define PF6 16
+#define PF7 17
+#define PF8 18
+#define PF9 19
+#define PF10 20
+#define PC0 21
+#define PC1 22
+#define PC2 23
+#define PC3 24
+#define PA0 25
+#define PA1 26
+#define PA2 27
+#define PA3 28
+#define PA4 29
+#define PA5 30 // SPI SCLK
+#define PA6 31 // SPI MISO
+#define PA7 32 // SPI MOSI
+#define PC4 33
+#define PC5 34
+#define PB0 35
+#define PB1 36
+#define PB2 37 // BOOT1
+#define PF11 38
+#define PF12 39
+#define PF13 40
+#define PF14 41
+#define PF15 42
+#define PG0 43
+#define PG1 44
+#define PE7 45
+#define PE8 46
+#define PE9 47
+#define PE10 48
+#define PE11 49
+#define PE12 50
+#define PE13 51
+#define PE14 52
+#define PE15 53
+#define PB10 54
+#define PB11 55
+#define PB12 56
+#define PB13 57
+#define PB14 58
+#define PB15 59
+#define PD8 60
+#define PD9 61
+#define PD10 62
+#define PD11 63
+#define PD12 64
+#define PD13 65
+#define PD14 66
+#define PD15 67
+#define PG2 68
+#define PG3 69
+#define PG4 70
+#define PG5 71
+#define PG6 72
+#define PG7 73
+#define PG8 74
+#define PC6 75
+#define PC7 76
+#define PC8 77
+#define PC9 78
+#define PA8 79
+#define PA9 80
+#define PA10 81
+#define PA11 82 // USB DM
+#define PA12 83 // USB DP
+#define PA13 84 // SWDI0
+#define PA14 85 // SWCLK
+#define PA15 86
+#define PC10 87
+#define PC11 88
+#define PC12 89
+#define PD0 90
+#define PD1 91
+#define PD2 92
+#define PD3 93
+#define PD4 94
+#define PD5 95
+#define PD6 96
+#define PD7 97
+#define PG9 98
+#define PG10 99
+#define PG11 100
+#define PG12 101
+#define PG13 102
+#define PG14 103
+#define PG15 104 // LEDBUILTIN
+#define PB3 105
+#define PB4 106
+#define PB5 107
+#define PB6 108 // I2C SCL
+#define PB7 109 // I2C SDA
+#define PB8 110
+#define PB9 111
+
+// This must be a literal
+// It is used with preprocessor tests (e.g. #if NUM_DIGITAL_PINS > 3)
+// so an enum will not work.
+#define NUM_DIGITAL_PINS 112
+
+// Allow to define Arduino style alias for analog input pin number --> Ax
+// If no analog pin required then NUM_ANALOG_INPUTS could not be defined
+// or set to `0`
+// All pins are digital, analog inputs are a subset of digital pins.
+// This must be a literal
+// It is used with preprocessor tests (e.g. #if NUM_ANALOG_INPUTS > 3)
+// so an enum will not work.
+// !!!
+// !!! It must be aligned with the number of analog PinName
+// !!! defined in digitalPin[] array in variant.cpp
+// !!!
+#define NUM_ANALOG_INPUTS 6
+
+// They are 2 possibles way to define analog pins:
+//-------------------------------------------------------------------------------------------
+// - If they are contiguous in the digitalPin array:
+// Simply defined `NUM_ANALOG_FIRST` and all pins Ax will be automatically defined.
+// It define the digital pin number of the first analog input (i.e. which digital pin is A0)
+// First analog pin value (A0) must be greater than or equal to NUM_ANALOG_INPUTS
+// This must be a literal with a value less than or equal to MAX_ANALOG_INPUTS
+// defined in pin_arduino.h
+#define NUM_ANALOG_FIRST 112
+//------------------------------------OR------------------------------------------------------
+// - If they are not contiguous in the digitalPin array:
+// Add an analogInputPin array in the variant.cpp without defining NUM_ANALOG_FIRST
+// In that case the defined PYn for analog pin have to define the Ax definition instead of
+// index in digitalPin[] array:
+// #define PA4 A14
+//-------------------------------------------------------------------------------------------
+
+
+// Below ADC and PWM definitions already done in the core
+// Could be redefined here if needed
+// ADC resolution is 10 bits
+//#define ADC_RESOLUTION 10
+
+// PWM resolution
+//#define PWM_RESOLUTION 8
+//#define PWM_FREQUENCY 1000
+//#define PWM_MAX_DUTY_CYCLE 255
+
+// On-board LED pin number
+#define LED_BUILTIN PG15
+#define LED_BLUE LED_BUILTIN
+
+// On-board user button
+//#define USER_BTN x
+
+// Below SPI and I2C definitions already done in the core
+// Could be redefined here if differs from the default one
+// SPI Definitions
+//#define PIN_SPI_SS 10 // Default for Arduino connector compatibility
+#define PIN_SPI_MOSI PA7 // Default for Arduino connector compatibility
+#define PIN_SPI_MISO PA6 // Default for Arduino connector compatibility
+#define PIN_SPI_SCK PA5 // Default for Arduino connector compatibility
+
+// I2C Definitions
+#define PIN_WIRE_SDA PB7 // Default for Arduino connector compatibility
+#define PIN_WIRE_SCL PB6 // Default for Arduino connector compatibility
+
+// I2C timing definitions (optional), avoid time spent to compute if defined
+// * I2C_TIMING_SM for Standard Mode (100kHz)
+// * I2C_TIMING_FM for Fast Mode (400kHz)
+// * I2C_TIMING_FMP for Fast Mode Plus (1000kHz)
+//#define I2C_TIMING_SM 0x00000000
+//#define I2C_TIMING_FM 0x00000000
+//#define I2C_TIMING_FMP 0x00000000
+
+// Timer Definitions (optional)
+// Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin
+#define TIMER_TONE TIM6
+#define TIMER_SERVO TIM7
+
+// UART Definitions
+// Define here Serial instance number to map on Serial generic name
+#define SERIAL_UART_INSTANCE 1 //ex: 2 for Serial2 (USART2)
+// DEBUG_UART could be redefined to print on another instance than 'Serial'
+//#define DEBUG_UART ((USART_TypeDef *) U(S)ARTX) // ex: USART3
+// DEBUG_UART baudrate, default: 9600 if not defined
+//#define DEBUG_UART_BAUDRATE x
+// DEBUG_UART Tx pin name, default: the first one found in PinMap_UART_TX for DEBUG_UART
+//#define DEBUG_PINNAME_TX PX_n // PinName used for TX
+
+// Default pin used for 'Serial' instance (ex: ST-Link)
+// Mandatory for Firmata
+#define PIN_SERIAL_RX PA10
+#define PIN_SERIAL_TX PA9
+
+// UART Definitions
+#define SERIAL_UART_INSTANCE 2
+// Default pin used for 'Serial2' instance
+#define PIN_SERIAL1_RX PA3
+#define PIN_SERIAL1_TX PA2
+
+// UART Definitions
+#define SERIAL_UART_INSTANCE 3
+// Default pin used for 'Serial3' instance
+#define PIN_SERIAL2_RX PB11
+#define PIN_SERIAL2_TX PB10
+
+
+// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
+// Used when user instanciate a hardware Serial using its peripheral name.
+// Example: HardwareSerial mySerial(USART3);
+// will use PIN_SERIAL3_RX and PIN_SERIAL3_TX if defined.
+//#define PIN_SERIALn_RX x // For U(S)ARTn RX
+//#define PIN_SERIALn_TX x // For U(S)ARTn TX
+//#define PIN_SERIALLP1_RX x // For LPUART1 RX
+//#define PIN_SERIALLP1_TX x // For LPUART1 TX
+
+// SD card slot Definitions
+// SD detect signal can be defined if required
+#define SD_DETECT_PIN PF10
+// SD Read/Write timeout, default value defined in STM32SD library
+//#define SD_DATATIMEOUT x
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+/*----------------------------------------------------------------------------
+ * Arduino objects - C++ only
+ *----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+// These serial port names are intended to allow libraries and architecture-neutral
+// sketches to automatically default to the correct port name for a particular type
+// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
+// the first hardware serial port whose RX/TX pins are not dedicated to another use.
+//
+// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
+//
+// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
+//
+// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
+//
+// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
+//
+// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
+// pins are NOT connected to anything by default.
+#define SERIAL_PORT_MONITOR Serial
+#define SERIAL_PORT_HARDWARE Serial1
+#endif
+
+#endif /* _VARIANT_ARDUINO_STM32_ */
From 63adec98ee8613bdd8807011c5e122fae22def90 Mon Sep 17 00:00:00 2001
From: dds90 <40141422+dds90@users.noreply.github.com>
Date: Wed, 22 Jul 2020 21:00:27 +0200
Subject: [PATCH 4/5] [New variant] STM32F407ZGT6 Mini
https://github.com/stm32duino/Arduino_Core_STM32/issues/635
---
README.md | 369 +++++++++++++--------
boards.txt | 948 ++++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 1095 insertions(+), 222 deletions(-)
diff --git a/README.md b/README.md
index d22eb06bed..4972c31915 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,16 @@
# Arduino core support for STM32 based boards
+[](https://www.stm32duino.com/)
+[](https://github.com/stm32duino/wiki/wiki)
+
+
[](https://github.com/stm32duino/Arduino_Core_STM32/releases/latest)

-[](https://github.com/stm32duino/Arduino_Core_STM32/compare/1.8.0...master)
-[](https://travis-ci.com/stm32duino/Arduino_Core_STM32)
+[](https://github.com/stm32duino/Arduino_Core_STM32/compare/1.9.0...master)
+
* [Introduction](https://github.com/stm32duino/Arduino_Core_STM32#Introduction)
* [Getting Started](https://github.com/stm32duino/Arduino_Core_STM32#getting-started)
-* [Boards available](https://github.com/stm32duino/Arduino_Core_STM32#boards-available)
+* [Supported boards](https://github.com/stm32duino/Arduino_Core_STM32#supported-boards)
* [Troubleshooting](https://github.com/stm32duino/Arduino_Core_STM32#troubleshooting)
* [Wiki](https://github.com/stm32duino/wiki/wiki/)
@@ -37,140 +41,243 @@ Advanced user can use the repository to benefit from the latest development. See
User can add a STM32 based board following this [wiki](https://github.com/stm32duino/wiki/wiki/Add-a-new-variant-(board)).
-## Boards available
-
-| Status | [Nucleo 144](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-nucleo-boards.html) | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [Nucleo F207ZG](http://www.st.com/en/evaluation-tools/nucleo-f207zg.html) | *0.2.0* | |
-| :green_heart: | [Nucleo F429ZI](http://www.st.com/en/evaluation-tools/nucleo-f429zi.html) | *0.1.0* | |
-| :green_heart: | [Nucleo F767ZI](http://www.st.com/en/evaluation-tools/nucleo-f767zi.html) | *1.4.0* | |
-| :green_heart: | [Nucleo L496ZG](http://www.st.com/en/evaluation-tools/nucleo-l496zg.html) | *1.3.0* | |
-| :green_heart: | [Nucleo L496ZG-P](http://www.st.com/en/evaluation-tools/nucleo-l496zg-p.html) | *1.3.0* | |
-| :green_heart: | [Nucleo L4R5ZI](http://www.st.com/en/evaluation-tools/nucleo-l4r5zi.html) | *1.4.0* | |
-| :green_heart: | [Nucleo L4R5ZI-P](http://www.st.com/en/evaluation-tools/nucleo-l4r5zi-p.html) | *1.4.0* | |
-| :green_heart: | [Nucleo H743ZI(2)](https://www.st.com/en/evaluation-tools/nucleo-h743zi.html) | *1.5.0* | Nucleo H743ZI2 since 1.6.0 |
-
-| Status | [Nucleo 64](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-nucleo-boards.html) | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [Nucleo F030R8](http://www.st.com/en/evaluation-tools/nucleo-f030r8.html) | *0.2.0* | |
-| :green_heart: | [Nucleo F091RC](http://www.st.com/en/evaluation-tools/nucleo-f091rc.html) | *0.1.0* | |
-| :green_heart: | [Nucleo F103RB](http://www.st.com/en/evaluation-tools/nucleo-f103rb.html) | *0.2.0* | |
-| :green_heart: | [Nucleo F302R8](http://www.st.com/en/evaluation-tools/nucleo-f302r8.html) | *1.1.0* | |
-| :green_heart: | [Nucleo F303RE](http://www.st.com/en/evaluation-tools/nucleo-f303re.html) | *0.1.0* | |
-| :green_heart: | [Nucleo F401RE](http://www.st.com/en/evaluation-tools/nucleo-f401re.html) | *0.2.1* | |
-| :green_heart: | [Nucleo F411RE](http://www.st.com/en/evaluation-tools/nucleo-f411re.html) | *0.2.1* | |
-| :green_heart: | [Nucleo F446RE](http://www.st.com/en/evaluation-tools/nucleo-f446re.html) | *1.1.1* | |
-| :green_heart: | [Nucleo-G071RB](https://www.st.com/en/evaluation-tools/nucleo-g071rb.html) | *1.6.0* | |
-| :green_heart: | [Nucleo-G431RB](https://www.st.com/en/evaluation-tools/nucleo-g431rb.html) | *1.7.0* | |
-| :green_heart: | [Nucleo-G474RE](https://www.st.com/en/evaluation-tools/nucleo-g474re.html) | *1.7.0* | |
-| :green_heart: | [Nucleo L053R8](http://www.st.com/en/evaluation-tools/nucleo-l053r8.html) | *0.1.0* | |
-| :green_heart: | [Nucleo L073RZ](http://www.st.com/en/evaluation-tools/nucleo-l073rz.html) | *1.4.0* | |
-| :green_heart: | [Nucleo L152RE](http://www.st.com/en/evaluation-tools/nucleo-l152re.html) | *1.0.0* | |
-| :green_heart: | [Nucleo L452RE](http://www.st.com/en/evaluation-tools/nucleo-l452re.html) | *1.5.0* | |
-| :green_heart: | [Nucleo L452RE-P](http://www.st.com/en/evaluation-tools/nucleo-l452re-p.html) | *1.8.0* | |
-| :green_heart: | [Nucleo L476RG](http://www.st.com/en/evaluation-tools/nucleo-l476rg.html) | *0.1.0* | |
-| :green_heart: | [P-Nucleo-WB55RG](https://www.st.com/en/evaluation-tools/p-nucleo-wb55.html) | *1.6.0* | No BLE support |
-
-| Status | [Nucleo 32](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-nucleo-boards.html) | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [Nucleo F303K8](http://www.st.com/en/evaluation-tools/nucleo-f303k8.html) | *1.1.0* | |
-| :green_heart: | [Nucleo-G431KB](https://www.st.com/en/evaluation-tools/nucleo-g431kb.html) | *1.7.0* | |
-| :green_heart: | [Nucleo L031K6](http://www.st.com/en/evaluation-tools/nucleo-l031k6.html) | *1.1.1* | |
-| :green_heart: | [Nucleo L412KB](http://www.st.com/en/evaluation-tools/nucleo-l412kb.html) | *1.5.0* | |
-| :green_heart: | [Nucleo L432KC](http://www.st.com/en/evaluation-tools/nucleo-l432kc.html) | *0.2.0* | |
-
-| Status | [Discovery](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-discovery-kits.html) | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [32F0308DISCOVERY](http://www.st.com/en/evaluation-tools/32f0308discovery.html) | *1.3.0* | |
-| :green_heart: | [32F072BDISCOVERY](https://www.st.com/en/evaluation-tools/32f072bdiscovery.html) | *1.5.0* | |
-| :green_heart: | [STM32VLDISCOVERY](https://www.st.com/en/evaluation-tools/stm32vldiscovery.html) | 0.2.1 | |
-| :green_heart: | [STM32F407G-DISC1](http://www.st.com/en/evaluation-tools/stm32f4discovery.html) | *0.1.0* | |
-| :green_heart: | [STM32F746G-DISCOVERY](http://www.st.com/en/evaluation-tools/32f746gdiscovery.html) | *0.1.0* | |
-| :green_heart: | [B-L072Z-LRWAN1](http://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html) | *1.1.0* | |
-| :green_heart: | [B-L475E-IOT01A](http://www.st.com/en/evaluation-tools/b-l475e-iot01a.html) | *1.0.1* | |
-
-| Status | [Eval](https://www.st.com/en/evaluation-tools/stm32-eval-boards.html) | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [STEVAL-MKSBOX1V1 (SensorTile.box)](https://www.st.com/en/evaluation-tools/steval-mksbox1v1.html) | *1.7.0* | |
-
-| Status | [STM32MP1 series coprocessor](https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm32-arm-cortex-mpus/stm32mp1-series.html) | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [STM32MP157A-DK1](https://www.st.com/en/evaluation-tools/stm32mp157a-dk1.html) | *1.8.0* | See [the documentation](https://github.com/stm32duino/Arduino_Core_STM32/tree/master/variants/STM32MP157_DK/README.md) to use this board|
-| :green_heart: | [STM32MP157C-DK2](https://www.st.com/en/evaluation-tools/stm32mp157c-dk2.html) | *1.8.0* | See [the documentation](https://github.com/stm32duino/Arduino_Core_STM32/tree/master/variants/STM32MP157_DK/README.md) to use this board|
-
-
-| Status | Generic STM32F0xx | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [STM32F030F4 Demo board](https://stm32-base.org/boards/STM32F030F4P6-STM32F030-DEMO-BOARD-V1.1) | *1.5.0* | |
-
-| Status | Generic STM32F1xx | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [BluePill F103C(6-8-B)](https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill) | *1.2.0* | USB CDC support since *1.5.0*, Maple bootloaders support since *1.6.0* |
-| :green_heart: | [BlackPill F103C(8-B)](https://stm32-base.org/boards/STM32F103C8T6-Black-Pill) | *1.5.0* | |
-| :green_heart: | [Generic F103R(8-B-C-E)T6](https://stm32-base.org/boards/STM32F103RET6-Generic-Board) | *1.7.0* | Blue Button |
-| :green_heart: | HY-TinySTM103T | *1.5.0* | |
-| :green_heart: | MapleMini F103CB | *1.2.0* | USB CDC support since *1.5.0*, Maple bootloaders support since *1.6.0* |
-
-| Status | Generic STM32F3xx | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [RobotDyn BlackPill F303CC](https://robotdyn.com/catalog/development-boards/stm-boards-and-shields.html) | *1.6.1* | |
-
-| Status | Generic STM32F4xx | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [Adafruit Feather STM32F405 Express](https://www.adafruit.com/product/4382) | *1.8.0* | |
-| :green_heart: | BlackPill F401CC | *1.7.0* | |
-| :green_heart: | [Black F407VET6](https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0) | *1.4.0* | VG/ZE/ZG in *1.5.0* |
-| :green_heart: | [Blue F407VET6 Mini](https://stm32-base.org/boards/STM32F407VET6-VCC-GND-Small) | *1.4.0* | |
-| :green_heart: | Core Board F401RC | *1.7.0* | |
-| :green_heart: | [DIYMORE STM32F407VGT](https://stm32-base.org/boards/STM32F407VGT6-diymore) | *1.5.0* | |
-| :green_heart: | FK407M1 | *1.5.0* | |
-| :green_heart: | Generic F401R(B-C-D-E) | *1.8.0* | |
-
-| Status | Generic STM32L0xx | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [PX-HER0](https://piconomix.com/fwlib/_p_i_c_o_n_o_m_i_x__s_t_m32__h_e_r_o__b_o_a_r_d.html) | *1.8.0* | |
-| :green_heart: | [ThunderPack](https://github.com/jgillick/ThunderPack) | *1.8.0* | |
-
-| Status | 3D printer boards | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [ARMED V1](https://github.com/ktand/Armed) | *1.5.0* | |
-| :green_heart: | [EExtruder F030 V1](https://github.com/ghent360/PrntrBoard/tree/tmc2130-redesign/EExtruder) | *1.5.0* | Small companion board for Prntr Board V1 |
-| :green_heart: | [Malyan M200 V1](http://malyansys.com/product/m200-v1/) | *1.5.0* | |
-| :green_heart: | [Malyan M200 V2](http://malyansys.com/product/m200-v2/) | *1.5.0* | |
-| :green_heart: | [Malyan M300](http://malyansys.com/product/m300/) | *1.8.0* | |
-| :green_heart: | [Prntr Board V1](https://github.com/ghent360/PrntrBoard) | *1.5.0* | |
-| :green_heart: | [Prntr Board V2](https://github.com/ghent360/PrntrBoardV2) | *1.8.0* | |
-| :green_heart: | [RemRam v1](https://github.com/hasenbanck/remram) | *1.4.0* | |
-| :green_heart: | [RUMBA32](https://github.com/Aus3D/RUMBA32) | *1.5.0* | |
-| :green_heart: | [STEVAL-3DP001V1](https://www.st.com/en/evaluation-tools/steval-3dp001v1.html) | *1.6.0* | |
-| :green_heart: | [VAkE v1.0](https://www.facebook.com/pages/category/Product-Service/VAkE-Board-2290066274575218/) | *1.6.0* | |
-
-| Status | LoRa boards | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [RAK811 LoRa Tracker](https://www.rakwireless.com/en/) | *1.4.0* | Basic support |
-| :green_heart: | [RHF76-052](https://www.ai-thinker.com/) | *1.7.0* | Basic support |
-
-| Status | Electronic Speed Controller boards | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | Wraith V1 ESC | *1.8.0* | |
-
-| Status | Generic flight controllers | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | Afro Flight Rev5 (8/12MHz) | *1.7.0* | |
-| :green_heart: | [Sparky V1](https://github.com/TauLabs/TauLabs/wiki/Sparky) | *1.6.0* | |
-
-| Status | [Midatronics](https://midatronics.com/) | Release | Comment |
-| :---: | --- | :---: | :--- |
-| :green_heart: | [SharkyMKR](https://midatronics.com/Development_Boards/MKR_Sharky_I) | *1.7.0* | |
+## Supported boards
+
+ - [Nucleo 144 boards](#nucleo-144-boards)
+ - [Nucleo 64 boards](#nucleo-64-boards)
+ - [Nucleo 32 boards](#nucleo-32-boards)
+ - [Discovery boards](#discovery-boards)
+ - [Eval boards](#eval-boards)
+ - [STM32MP1 series coprocessor boards](#stm32mp1-series-coprocessor-boards)
+ - [Generic STM32F0 boards](#generic-stm32f0-boards)
+ - [Generic STM32F1 boards](#generic-stm32f1-boards)
+ - [Generic STM32F3 boards](#generic-stm32f3-boards)
+ - [Generic STM32F4 boards](#generic-stm32f4-boards)
+ - [Generic STM32H7 boards](#generic-stm32h7-boards)
+ - [Generic STM32L0 boards](#generic-stm32l0-boards)
+ - [3D printer boards](#3d-printer-boards)
+ - [LoRa boards](#lora-boards)
+ - [Electronic Speed Controller boards](#electronic-speed-controller-boards)
+ - [Generic flight controllers](#generic-flight-controllers)
+ - [Garatronics boards](#Garatronic/McHobby-boards)
+ - [Midatronics boards](#midatronics-boards)
+
+
+### [Nucleo 144](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-nucleo-boards.html) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F207ZG | [Nucleo F207ZG](http://www.st.com/en/evaluation-tools/nucleo-f207zg.html) | *0.2.0* | |
+| :green_heart: | STM32F429ZI | [Nucleo F429ZI](http://www.st.com/en/evaluation-tools/nucleo-f429zi.html) | *0.1.0* | |
+| :green_heart: | STM32F767ZI | [Nucleo F767ZI](http://www.st.com/en/evaluation-tools/nucleo-f767zi.html) | *1.4.0* | |
+| :green_heart: | STM32F746ZG | [Nucleo F746ZG](https://www.st.com/en/evaluation-tools/nucleo-f746zg.html) | *1.9.0* | |
+| :green_heart: | STM32F756ZG | [Nucleo F756ZG](https://www.st.com/en/evaluation-tools/nucleo-f756zg.html) | *1.9.0* | |
+| :green_heart: | STM32L496ZG | [Nucleo L496ZG](http://www.st.com/en/evaluation-tools/nucleo-l496zg.html) | *1.3.0* | |
+| :green_heart: | STM32L496ZG-P | [Nucleo L496ZG-P](http://www.st.com/en/evaluation-tools/nucleo-l496zg-p.html) | *1.3.0* | |
+| :green_heart: | STM32L4R5ZI | [Nucleo L4R5ZI](http://www.st.com/en/evaluation-tools/nucleo-l4r5zi.html) | *1.4.0* | |
+| :green_heart: | STM32L4R5ZI-P | [Nucleo L4R5ZI-P](http://www.st.com/en/evaluation-tools/nucleo-l4r5zi-p.html) | *1.4.0* | |
+| :green_heart: | STM32H743ZI | [Nucleo H743ZI(2)](https://www.st.com/en/evaluation-tools/nucleo-h743zi.html) | *1.5.0* | Nucleo H743ZI2 since 1.6.0 |
+
+### [Nucleo 64](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-nucleo-boards.html) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F030R8 | [Nucleo F030R8](http://www.st.com/en/evaluation-tools/nucleo-f030r8.html) | *0.2.0* | |
+| :green_heart: | STM32F072RB | [Nucleo F072RB](http://www.st.com/en/evaluation-tools/nucleo-f072rb.html) | *1.9.0* | |
+| :green_heart: | STM32F091RC | [Nucleo F091RC](http://www.st.com/en/evaluation-tools/nucleo-f091rc.html) | *0.1.0* | |
+| :green_heart: | STM32F103RB | [Nucleo F103RB](http://www.st.com/en/evaluation-tools/nucleo-f103rb.html) | *0.2.0* | |
+| :green_heart: | STM32F302R8 | [Nucleo F302R8](http://www.st.com/en/evaluation-tools/nucleo-f302r8.html) | *1.1.0* | |
+| :green_heart: | STM32F303RE | [Nucleo F303RE](http://www.st.com/en/evaluation-tools/nucleo-f303re.html) | *0.1.0* | |
+| :green_heart: | STM32F401RE | [Nucleo F401RE](http://www.st.com/en/evaluation-tools/nucleo-f401re.html) | *0.2.1* | |
+| :green_heart: | STM32F411RE | [Nucleo F411RE](http://www.st.com/en/evaluation-tools/nucleo-f411re.html) | *0.2.1* | |
+| :green_heart: | STM32F446RE | [Nucleo F446RE](http://www.st.com/en/evaluation-tools/nucleo-f446re.html) | *1.1.1* | |
+| :green_heart: | STM32G071RB | [Nucleo G071RB](https://www.st.com/en/evaluation-tools/nucleo-g071rb.html) | *1.6.0* | |
+| :green_heart: | STM32G431RB | [Nucleo G431RB](https://www.st.com/en/evaluation-tools/nucleo-g431rb.html) | *1.7.0* | |
+| :green_heart: | STM32G474RE | [Nucleo G474RE](https://www.st.com/en/evaluation-tools/nucleo-g474re.html) | *1.7.0* | |
+| :green_heart: | STM32L053R8 | [Nucleo L053R8](http://www.st.com/en/evaluation-tools/nucleo-l053r8.html) | *0.1.0* | |
+| :green_heart: | STM32L073RZ | [Nucleo L073RZ](http://www.st.com/en/evaluation-tools/nucleo-l073rz.html) | *1.4.0* | |
+| :green_heart: | STM32L152RE | [Nucleo L152RE](http://www.st.com/en/evaluation-tools/nucleo-l152re.html) | *1.0.0* | |
+| :green_heart: | STM32L433RC-P | [Nucleo L433RC-P](https://www.st.com/en/evaluation-tools/nucleo-l433rc-p.html) | *1.9.0* | |
+| :green_heart: | STM32L452RE | [Nucleo L452RE](http://www.st.com/en/evaluation-tools/nucleo-l452re.html) | *1.5.0* | |
+| :green_heart: | STM32L452RE-P | [Nucleo L452RE-P](http://www.st.com/en/evaluation-tools/nucleo-l452re-p.html) | *1.8.0* | |
+| :green_heart: | STM32L476RG | [Nucleo L476RG](http://www.st.com/en/evaluation-tools/nucleo-l476rg.html) | *0.1.0* | |
+| :green_heart: | STM32WB55RG
STM32WB55CG | [P-Nucleo-WB55RG](https://www.st.com/en/evaluation-tools/p-nucleo-wb55.html) | *1.6.0* | No BLE support |
+
+### [Nucleo 32](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-nucleo-boards.html) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F031K6 | [Nucleo F031K6](https://www.st.com/en/evaluation-tools/nucleo-f031k6.html) | *1.9.0* | |
+| :green_heart: | STM32F303K8 | [Nucleo F303K8](http://www.st.com/en/evaluation-tools/nucleo-f303k8.html) | *1.1.0* | |
+| :green_heart: | STM32G431KB | [Nucleo G431KB](https://www.st.com/en/evaluation-tools/nucleo-g431kb.html) | *1.7.0* | |
+| :green_heart: | STM32L031K6 | [Nucleo L031K6](http://www.st.com/en/evaluation-tools/nucleo-l031k6.html) | *1.1.1* | |
+| :green_heart: | STM32L412KB | [Nucleo L412KB](http://www.st.com/en/evaluation-tools/nucleo-l412kb.html) | *1.5.0* | |
+| :green_heart: | STM32L432KC | [Nucleo L432KC](http://www.st.com/en/evaluation-tools/nucleo-l432kc.html) | *0.2.0* | |
+
+### [Discovery](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-discovery-kits.html) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F030R8 | [32F0308DISCOVERY](http://www.st.com/en/evaluation-tools/32f0308discovery.html) | *1.3.0* | |
+| :green_heart: | STM32F072RB | [32F072BDISCOVERY](https://www.st.com/en/evaluation-tools/32f072bdiscovery.html) | *1.5.0* | |
+| :green_heart: | STM32F100RB | [STM32VLDISCOVERY](https://www.st.com/en/evaluation-tools/stm32vldiscovery.html) | 0.2.1 | |
+| :green_heart: | STM32F407VG | [STM32F407G-DISC1](http://www.st.com/en/evaluation-tools/stm32f4discovery.html) | *0.1.0* | |
+| :green_heart: | STM32F746NG | [STM32F746G-DISCOVERY](http://www.st.com/en/evaluation-tools/32f746gdiscovery.html) | *0.1.0* | |
+| :green_heart: | STM32G031J6 | [STM32G0316-DISCO](https://www.st.com/en/evaluation-tools/stm32g0316-disco.html) | *1.9.0* | |
+| :green_heart: | STM32L072CZ | [B-L072Z-LRWAN1](http://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html) | *1.1.0* | |
+| :green_heart: | STM32L475VG | [B-L475E-IOT01A](http://www.st.com/en/evaluation-tools/b-l475e-iot01a.html) | *1.0.1* | |
+| :green_heart: | STM32F413ZH | [32F413HDISCOVERY](https://www.st.com/en/evaluation-tools/32f413hdiscovery.html) | *1.9.0* | |
+| :yellow_heart: | STM32L4S5VI | [B-L4S5I-IOT01A](https://www.st.com/en/evaluation-tools/b-l4s5i-iot01a.html) | **2.0.0** | |
+
+### [Eval](https://www.st.com/en/evaluation-tools/stm32-eval-boards.html) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32L4R9ZI | [STEVAL-MKSBOX1V1 (SensorTile.box)](https://www.st.com/en/evaluation-tools/steval-mksbox1v1.html) | *1.7.0* | |
+
+### [STM32MP1 series coprocessor](https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm32-arm-cortex-mpus/stm32mp1-series.html) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32MP157A | [STM32MP157A-DK1](https://www.st.com/en/evaluation-tools/stm32mp157a-dk1.html) | *1.8.0* | See [the documentation](https://github.com/stm32duino/Arduino_Core_STM32/tree/master/variants/STM32MP157_DK/README.md) to use this board|
+| :green_heart: | STM32MP157C | [STM32MP157C-DK2](https://www.st.com/en/evaluation-tools/stm32mp157c-dk2.html) | *1.8.0* | See [the documentation](https://github.com/stm32duino/Arduino_Core_STM32/tree/master/variants/STM32MP157_DK/README.md) to use this board|
+
+### Generic STM32F0 boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F030F4 | [STM32F030F4 Demo board](https://stm32-base.org/boards/STM32F030F4P6-STM32F030-DEMO-BOARD-V1.1) | *1.5.0* | |
+
+### Generic STM32F1 boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F103C6
STM32F103C8
STM32F103CB | [Blue Pill](https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill) | *1.2.0* | USB CDC support since *1.5.0*
Maple bootloaders support since *1.6.0* |
+| :green_heart: | STM32F103C8
STM32F103CB | [Black Pill](https://stm32-base.org/boards/STM32F103C8T6-Black-Pill) | *1.5.0* | |
+| :green_heart: | STM32F103C4
STM32F103C6
STM32F103C8
STM32F103CB | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F103R6
STM32F103R8
STM32F103RB
STM32F103RC
STM32F103RD
STM32F103RE
STM32F103RF
STM32F103RG | [Generic Board](https://stm32-base.org/boards/STM32F103RET6-Generic-Board) | *1.9.0* | |
+| :green_heart: | STM32F103T4
STM32F103T6
STM32F103T8
STM32F103TB | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F103V8
STM32F103VB
STM32F103VC
STM32F103VD
STM32F103VE
STM32F103VF
STM32F103VG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F103ZC
STM32F103ZD
STM32F103ZE
STM32F103ZF
STM32F103ZG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F103TB | HY-TinySTM103T | *1.5.0* | [More info](https://www.hotmcu.com/stm32f103tb-arm-cortex-m3-development-board-p-222.html) |
+| :green_heart: | STM32F103CB | Maple Mini | *1.2.0* | [More info](https://www.leaflabs.com/maple)
USB CDC support since *1.5.0*
Maple bootloaders support since *1.6.0* |
+| :green_heart: | STM32F103ZE | [vcc-gnd.com](https://stm32-base.org/boards/STM32F103ZET6-VCC-GND-XLarge) | *1.9.0* | [More info](http://www.vcc-gnd.com/rtd/html/STM32/quickref.html#stm32f1) |
+| :green_heart: | STM32F103ZE | vcc-gnd.com Mini | *1.9.0* | [More info](http://www.vcc-gnd.com/rtd/html/STM32/quickref.html#stm32f1) |
+
+### Generic STM32F3 boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F303CC | [RobotDyn Black Pill](https://stm32-base.org/boards/STM32F303CCT6-RobotDyn-Black-Pill) | *1.6.1* | [More info](https://robotdyn.com/catalog/development-boards/stm-boards-and-shields.html) |
+
+### Generic STM32F4 boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F405RG | [Adafruit Feather STM32F405 Express](https://www.adafruit.com/product/4382) | *1.8.0* | |
+| :green_heart: | STM32F401CC | [WeAct Black Pill](https://stm32-base.org/boards/STM32F401CCU6-WeAct-Black-Pill-V1.2) | *1.7.0* | [More info](https://github.com/WeActTC/MiniF4-STM32F4x1) |
+| :green_heart: | STM32F411CE | [WeAct Black Pill](https://stm32-base.org/boards/STM32F411CEU6-WeAct-Black-Pill-V2.0) | *1.9.0* | [More info](https://github.com/WeActTC/MiniF4-STM32F4x1) |
+| :green_heart: | STM32F407VE
STM32F407VG | [STM32 F4VE / Black F407VET6](https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0) | *1.4.0* | STM32F407VG support since *1.5.0* |
+| :green_heart: | STM32F407ZE
STM32F407ZG | Black F407ZE / Black F407ZG | *1.5.0* | |
+| :green_heart: | STM32F407VE | [vcc-gnd.com Mini](https://stm32-base.org/boards/STM32F407VET6-VCC-GND-Small) | *1.4.0* | [More info](http://vcc-gnd.com/rtd/html/STM32/quickref.html#stm32f4) |
+| :green_heart: | STM32F401RC | [STM32F Core Board](https://stm32-base.org/boards/STM32F401RCT6-STM32F-Core-Board) | *1.7.0* | |
+| :green_heart: | STM32F407VG | [DIYMORE STM32F407VGT](https://stm32-base.org/boards/STM32F407VGT6-diymore) | *1.5.0* | |
+| :green_heart: | STM32F407VE | [FK407M1](https://stm32-base.org/boards/STM32F407VET6-FK407M1-V1.0) | *1.5.0* | |
+| :green_heart: | STM32F401CB
STM32F401CC
STM32F401CD
STM32F401CE | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F401RB
STM32F401RC
STM32F401RD
STM32F401RE | Generic Board | *1.8.0* | |
+| :green_heart: | STM32F405RG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F407VE
STM32F407VG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F407Zx
STM32F407Zx | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F407Zx
STM32F407Zx | vcc-gnd.com Mini | *1.9.0* | [More info](http://www.vcc-gnd.com/rtd/html/STM32/quickref.html#stm32f4) |
+| :green_heart: | STM32F410C8
STM32F410CB | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F410R8
STM32F410RB | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F411CC
STM32F411CE | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F411RC
STM32F411RE | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F412CE
STM32F412CG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F412RE
STM32F412RG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F413CG
STM32F413CH | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F413RG
STM32F413RH | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F415RG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F417VE
STM32F417VG | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F423CH | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F423RH | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F446RC
STM32F446RE | Generic Board | *1.9.0* | |
+| :green_heart: | STM32F411CE | [ThunderPack v1.1+](https://github.com/jgillick/ThunderPack) | *1.9.0* | |
+
+### Generic STM32H7 boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32H750IB | [Daisy ](https://www.electro-smith.com/daisy/daisy) | *1.9.0* | |
+
+### Generic STM32L0 boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32L072RB | [PX-HER0](https://piconomix.com/fwlib/_p_i_c_o_n_o_m_i_x__s_t_m32__h_e_r_o__b_o_a_r_d.html) | *1.8.0* | |
+| :green_heart: | STM32L072KZ | [ThunderPack v1.0](https://github.com/jgillick/ThunderPack) | *1.8.0* | |
+
+### 3D printer boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F407VE | [ARMED V1](https://github.com/ktand/Armed) | *1.5.0* | |
+| :green_heart: | STM32F030 | [EExtruder F030 V1](https://github.com/ghent360/PrntrBoard/tree/tmc2130-redesign/EExtruder) | *1.5.0* | Small companion board for Prntr Board V1 |
+| :green_heart: | STM32F103C8 | [Malyan M200 V1](http://malyansys.com/product/m200-v1/) | *1.5.0* | |
+| :green_heart: | STM32F070C8 | [Malyan M200 V2](http://malyansys.com/product/m200-v2/) | *1.5.0* | |
+| :green_heart: | STM32F070C8 | [Malyan M300](http://malyansys.com/product/m300/) | *1.8.0* | |
+| :green_heart: | STM32F407VE | [Prntr Board V1](https://github.com/ghent360/PrntrBoard) | *1.5.0* | |
+| :green_heart: | STM32F407VE | [Prntr Board V2](https://github.com/ghent360/PrntrBoardV2) | *1.8.0* | |
+| :green_heart: | STM32F765VI | [RemRam v1](https://github.com/hasenbanck/remram) | *1.4.0* | |
+| :green_heart: | STM32F446VE | [RUMBA32](https://github.com/Aus3D/RUMBA32) | *1.5.0* | |
+| :green_heart: | STM32F401VE | [STEVAL-3DP001V1](https://www.st.com/en/evaluation-tools/steval-3dp001v1.html) | *1.6.0* | |
+| :green_heart: | STM32F446RE | [VAkE v1.0](https://www.facebook.com/pages/category/Product-Service/VAkE-Board-2290066274575218/) | *1.6.0* | |
+| :green_heart: | STM32F446VE | [FYSETC_S6](https://wiki.fysetc.com/FYSETC_S6/) | *1.9.0* | |
+
+### LoRa boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F072C8
STM32F072CB | [Elektor LoRa Node](https://github.com/ElektorLabs/180516-Elektor_LoRa_Node) | *1.8.0* | [More info](https://www.elektormagazine.com/labs/lorawan-node-experimental-platform) |
+| :green_heart: | STM32L151RB | [RAK811 LoRa Tracker](https://www.rakwireless.com/en/) | *1.4.0* | [Wiki](https://github.com/stm32duino/wiki/wiki/Connectivities#lora) |
+| :green_heart: | STM32L052C8 | [RHF76-052](https://www.ai-thinker.com/) | *1.7.0* | Basic support |
+
+### Electronic Speed Controller boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F051K6 | Wraith V1 ESC | *1.8.0* | |
+
+### Generic flight controllers
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F103CB | Afro Flight Rev5 (8/12MHz) | *1.7.0* | |
+| :green_heart: | STM32F303CC | [Sparky V1](https://github.com/TauLabs/TauLabs/wiki/Sparky) | *1.6.0* | |
+
+### [Garatronic](https://www.garatronic.fr)/[McHobby](https://shop.mchobby.be) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32F072RB | [PYBStick 26 Duino](https://shop.mchobby.be/fr/compatibles-arduino/1851-pybstick-duino-arduino-uniquement-3232100018518-garatronic.html) | *1.9.0* | [More info](https://github.com/mchobby/pyboard-driver/tree/master/PYBStick) |
+| :green_heart: | STM32F401CE | [PYBStick 26 Lite](https://shop.mchobby.be/fr/micropython/1830-pybstick-lite-26-micropython-et-arduino-3232100018303-garatronic.html) | *1.9.0* | [More info](https://github.com/mchobby/pyboard-driver/tree/master/PYBStick) |
+| :green_heart: | STM32F411RE | [PYBStick 26 Standard](https://shop.mchobby.be/fr/micropython/1844-pybstick-standard-26-micropython-et-arduino-3232100018440-garatronic.html) | *1.9.0* | [More info](https://github.com/mchobby/pyboard-driver/tree/master/PYBStick) |
+| :green_heart: | STM32F412RE | [PYBStick 26 Pro](https://shop.mchobby.be/fr/micropython/1850-pybstick-pro-26-micropython-et-arduino-3232100018501-garatronic.html) | *1.9.0* | [More info](https://github.com/mchobby/pyboard-driver/tree/master/PYBStick) |
+
+### [Midatronics](https://midatronics.com/) boards
+
+| Status | Device(s) | Name | Release | Notes |
+| :----: | :-------: | ---- | :-----: | :---- |
+| :green_heart: | STM32WB55CG | [SharkyMKR](https://midatronics.com/shop/development-boards/mkr-sharky-i/) | *1.7.0* | |
## Next release
- See [milestones](https://github.com/stm32duino/Arduino_Core_STM32/milestones) to have an overview of the next release content.
+See [milestones](https://github.com/stm32duino/Arduino_Core_STM32/milestones) to have an overview of the next release content.
## Troubleshooting
-If you have any issue, you could [file an issue on Github](https://github.com/stm32duino/Arduino_Core_STM32/issues/new).
+For question, support, ..., you could submit a topic on the [stm32duino forum](http://stm32duino.com).
-For question, support, ..., you could submit a topic on the [stm32duino forum](http://stm32duino.com):
+If you have any issue, you could [file an issue on Github](https://github.com/stm32duino/Arduino_Core_STM32/issues/new).
In any case, it always fine to search if your issue was not already existing before submit a new one.
diff --git a/boards.txt b/boards.txt
index ab3b11e36e..2548ab0050 100644
--- a/boards.txt
+++ b/boards.txt
@@ -1,10 +1,11 @@
-# See: https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
+# See: https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
menu.pnum=Board part number
menu.xserial=U(S)ART support
menu.usb=USB support (if available)
menu.xusb=USB speed (if available)
+menu.virtio=Virtual serial support
menu.opt=Optimize
menu.rtlib=C Runtime Library
@@ -15,7 +16,6 @@ menu.upload_method=Upload method
Nucleo_144.name=Nucleo-144
-Nucleo_144.build.vid=0x0483
Nucleo_144.build.core=arduino
Nucleo_144.build.board=Nucleo_144
Nucleo_144.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -38,7 +38,7 @@ Nucleo_144.menu.pnum.NUCLEO_F207ZG.build.cmsis_lib_gcc=arm_cortexM3l_math
Nucleo_144.menu.pnum.NUCLEO_F429ZI=Nucleo F429ZI
Nucleo_144.menu.pnum.NUCLEO_F429ZI.node=NODE_F429ZI
Nucleo_144.menu.pnum.NUCLEO_F429ZI.upload.maximum_size=2097152
-Nucleo_144.menu.pnum.NUCLEO_F429ZI.upload.maximum_data_size=262144
+Nucleo_144.menu.pnum.NUCLEO_F429ZI.upload.maximum_data_size=196608
Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.mcu=cortex-m4
Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.board=NUCLEO_F429ZI
@@ -47,6 +47,32 @@ Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.product_line=STM32F429xx
Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.variant=NUCLEO_F429ZI
Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.cmsis_lib_gcc=arm_cortexM4lf_math
+# NUCLEO_F746ZG board
+Nucleo_144.menu.pnum.NUCLEO_F746ZG=Nucleo F746ZG
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.node=NODE_F746ZG
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.upload.maximum_size=1048576
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.upload.maximum_data_size=327680
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.build.mcu=cortex-m7
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.build.board=NUCLEO_F746ZG
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.build.series=STM32F7xx
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.build.product_line=STM32F746xx
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.build.variant=NUCLEO_F7x6ZG
+Nucleo_144.menu.pnum.NUCLEO_F746ZG.build.cmsis_lib_gcc=arm_cortexM7lfsp_math
+
+# NUCLEO_F756ZG board
+Nucleo_144.menu.pnum.NUCLEO_F756ZG=Nucleo F756ZG
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.node=NODE_F756ZG
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.upload.maximum_size=1048576
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.upload.maximum_data_size=327680
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.build.mcu=cortex-m7
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.build.board=NUCLEO_F756ZG
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.build.series=STM32F7xx
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.build.product_line=STM32F756xx
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.build.variant=NUCLEO_F7x6ZG
+Nucleo_144.menu.pnum.NUCLEO_F756ZG.build.cmsis_lib_gcc=arm_cortexM7lfsp_math
+
# NUCLEO_F767ZI board
Nucleo_144.menu.pnum.NUCLEO_F767ZI=Nucleo F767ZI
Nucleo_144.menu.pnum.NUCLEO_F767ZI.node=NODE_F767ZI
@@ -162,7 +188,6 @@ Nucleo_144.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
Nucleo_64.name=Nucleo-64
-Nucleo_64.build.vid=0x0483
Nucleo_64.build.core=arduino
Nucleo_64.build.board=Nucleo_64
Nucleo_64.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -179,6 +204,18 @@ Nucleo_64.menu.pnum.NUCLEO_F030R8.build.product_line=STM32F030x8
Nucleo_64.menu.pnum.NUCLEO_F030R8.build.variant=NUCLEO_F030R8
Nucleo_64.menu.pnum.NUCLEO_F030R8.build.cmsis_lib_gcc=arm_cortexM0l_math
+# NUCLEO_F072RB board
+Nucleo_64.menu.pnum.NUCLEO_F072RB=Nucleo F072RB
+Nucleo_64.menu.pnum.NUCLEO_F072RB.node="NODE_F072RB,NUCLEO"
+Nucleo_64.menu.pnum.NUCLEO_F072RB.upload.maximum_size=131072
+Nucleo_64.menu.pnum.NUCLEO_F072RB.upload.maximum_data_size=16384
+Nucleo_64.menu.pnum.NUCLEO_F072RB.build.mcu=cortex-m0
+Nucleo_64.menu.pnum.NUCLEO_F072RB.build.board=NUCLEO_F072RB
+Nucleo_64.menu.pnum.NUCLEO_F072RB.build.series=STM32F0xx
+Nucleo_64.menu.pnum.NUCLEO_F072RB.build.product_line=STM32F072xB
+Nucleo_64.menu.pnum.NUCLEO_F072RB.build.variant=NUCLEO_F072RB
+Nucleo_64.menu.pnum.NUCLEO_F072RB.build.cmsis_lib_gcc=arm_cortexM0l_math
+
# NUCLEO_F091RC board
Nucleo_64.menu.pnum.NUCLEO_F091RC=Nucleo F091RC
Nucleo_64.menu.pnum.NUCLEO_F091RC.node=NODE_F091RC
@@ -239,7 +276,7 @@ Nucleo_64.menu.pnum.NUCLEO_F401RE.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=h
Nucleo_64.menu.pnum.NUCLEO_F401RE.build.board=NUCLEO_F401RE
Nucleo_64.menu.pnum.NUCLEO_F401RE.build.series=STM32F4xx
Nucleo_64.menu.pnum.NUCLEO_F401RE.build.product_line=STM32F401xE
-Nucleo_64.menu.pnum.NUCLEO_F401RE.build.variant=NUCLEO_F401RE
+Nucleo_64.menu.pnum.NUCLEO_F401RE.build.variant=NUCLEO_F4x1RE
Nucleo_64.menu.pnum.NUCLEO_F401RE.build.cmsis_lib_gcc=arm_cortexM4lf_math
# NUCLEO_F411RE board
@@ -252,7 +289,7 @@ Nucleo_64.menu.pnum.NUCLEO_F411RE.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=h
Nucleo_64.menu.pnum.NUCLEO_F411RE.build.board=NUCLEO_F411RE
Nucleo_64.menu.pnum.NUCLEO_F411RE.build.series=STM32F4xx
Nucleo_64.menu.pnum.NUCLEO_F411RE.build.product_line=STM32F411xE
-Nucleo_64.menu.pnum.NUCLEO_F411RE.build.variant=NUCLEO_F411RE
+Nucleo_64.menu.pnum.NUCLEO_F411RE.build.variant=NUCLEO_F4x1RE
Nucleo_64.menu.pnum.NUCLEO_F411RE.build.cmsis_lib_gcc=arm_cortexM4lf_math
# NUCLEO_F446RE board
@@ -345,6 +382,19 @@ Nucleo_64.menu.pnum.NUCLEO_L152RE.build.product_line=STM32L152xE
Nucleo_64.menu.pnum.NUCLEO_L152RE.build.variant=NUCLEO_L152RE
Nucleo_64.menu.pnum.NUCLEO_L152RE.build.cmsis_lib_gcc=arm_cortexM3l_math
+# NUCLEO_L433RC_P board
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P=Nucleo L433RC-P
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.node=NODE_L433RC
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.upload.maximum_size=1048576
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.upload.maximum_data_size=98304
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.build.mcu=cortex-m4
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.build.board=NUCLEO_L433RC
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.build.series=STM32L4xx
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.build.product_line=STM32L433xx
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.build.variant=NUCLEO_L433RC_P
+Nucleo_64.menu.pnum.NUCLEO_L433RC_P.build.cmsis_lib_gcc=arm_cortexM4lf_math
+
# NUCLEO_L452RE board
Nucleo_64.menu.pnum.NUCLEO_L452RE=Nucleo L452RE
Nucleo_64.menu.pnum.NUCLEO_L452RE.node=NODE_L452RE
@@ -387,7 +437,7 @@ Nucleo_64.menu.pnum.NUCLEO_L476RG.build.cmsis_lib_gcc=arm_cortexM4lf_math
# PNUCLEO_WB55RG board
Nucleo_64.menu.pnum.PNUCLEO_WB55RG=P-Nucleo WB55RG
-Nucleo_64.menu.pnum.PNUCLEO_WB55RG.node=NODE_WB55RG
+Nucleo_64.menu.pnum.PNUCLEO_WB55RG.node="NODE_WB55RG,NOD_WB55RG"
Nucleo_64.menu.pnum.PNUCLEO_WB55RG.upload.maximum_size=524288
Nucleo_64.menu.pnum.PNUCLEO_WB55RG.upload.maximum_data_size=196604
Nucleo_64.menu.pnum.PNUCLEO_WB55RG.build.mcu=cortex-m4
@@ -423,11 +473,22 @@ Nucleo_64.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
Nucleo_32.name=Nucleo-32
-Nucleo_32.build.vid=0x0483
Nucleo_32.build.core=arduino
Nucleo_32.build.board=Nucleo_32
Nucleo_32.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
+# NUCLEO_F031K6 board
+Nucleo_32.menu.pnum.NUCLEO_F031K6=Nucleo F031K6
+Nucleo_32.menu.pnum.NUCLEO_F031K6.node=NODE_F031K6
+Nucleo_32.menu.pnum.NUCLEO_F031K6.upload.maximum_size=32768
+Nucleo_32.menu.pnum.NUCLEO_F031K6.upload.maximum_data_size=4096
+Nucleo_32.menu.pnum.NUCLEO_F031K6.build.mcu=cortex-m0
+Nucleo_32.menu.pnum.NUCLEO_F031K6.build.board=NUCLEO_F031K6
+Nucleo_32.menu.pnum.NUCLEO_F031K6.build.series=STM32F0xx
+Nucleo_32.menu.pnum.NUCLEO_F031K6.build.product_line=STM32F031x6
+Nucleo_32.menu.pnum.NUCLEO_F031K6.build.variant=NUCLEO_F031K6
+Nucleo_32.menu.pnum.NUCLEO_F031K6.build.cmsis_lib_gcc=arm_cortexM0l_math
+
# NUCLEO_L031K6 board
Nucleo_32.menu.pnum.NUCLEO_L031K6=Nucleo L031K6
Nucleo_32.menu.pnum.NUCLEO_L031K6.node=NODE_L031K6
@@ -517,7 +578,6 @@ Nucleo_32.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
Disco.name=Discovery
-Disco.build.vid=0x0483
Disco.build.core=arduino
Disco.build.board=Disco
Disco.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -562,7 +622,7 @@ Disco.menu.pnum.DISCO_F100RB.build.cmsis_lib_gcc=arm_cortexM3l_math
Disco.menu.pnum.DISCO_F407VG=STM32F407G-DISC1
Disco.menu.pnum.DISCO_F407VG.node=DIS_F407VG
Disco.menu.pnum.DISCO_F407VG.upload.maximum_size=1048576
-Disco.menu.pnum.DISCO_F407VG.upload.maximum_data_size=196608
+Disco.menu.pnum.DISCO_F407VG.upload.maximum_data_size=131072
Disco.menu.pnum.DISCO_F407VG.build.mcu=cortex-m4
Disco.menu.pnum.DISCO_F407VG.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
Disco.menu.pnum.DISCO_F407VG.build.board=DISCO_F407VG
@@ -571,6 +631,19 @@ Disco.menu.pnum.DISCO_F407VG.build.product_line=STM32F407xx
Disco.menu.pnum.DISCO_F407VG.build.variant=DISCO_F407VG
Disco.menu.pnum.DISCO_F407VG.build.cmsis_lib_gcc=arm_cortexM4lf_math
+# DISCO_F413ZH board
+Disco.menu.pnum.DISCO_F413ZH=STM32F413H-DISCO
+Disco.menu.pnum.DISCO_F413ZH.node=DIS_F413ZH
+Disco.menu.pnum.DISCO_F413ZH.upload.maximum_size=1572864
+Disco.menu.pnum.DISCO_F413ZH.upload.maximum_data_size=327680
+Disco.menu.pnum.DISCO_F413ZH.build.mcu=cortex-m4
+Disco.menu.pnum.DISCO_F413ZH.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+Disco.menu.pnum.DISCO_F413ZH.build.board=DISCO_F413ZH
+Disco.menu.pnum.DISCO_F413ZH.build.series=STM32F4xx
+Disco.menu.pnum.DISCO_F413ZH.build.product_line=STM32F413xx
+Disco.menu.pnum.DISCO_F413ZH.build.variant=DISCO_F413ZH
+Disco.menu.pnum.DISCO_F413ZH.build.cmsis_lib_gcc=arm_cortexM4lf_math
+
# DISCO_F746NG board
Disco.menu.pnum.DISCO_F746NG=STM32F746G-DISCOVERY
Disco.menu.pnum.DISCO_F746NG.node=DIS_F746NG
@@ -584,6 +657,19 @@ Disco.menu.pnum.DISCO_F746NG.build.product_line=STM32F746xx
Disco.menu.pnum.DISCO_F746NG.build.variant=DISCO_F746NG
Disco.menu.pnum.DISCO_F746NG.build.cmsis_lib_gcc=arm_cortexM7lfsp_math
+# DISCO_G0316 board
+Disco.menu.pnum.DISCO_G0316=STM32G0316-DISCO
+Disco.menu.pnum.DISCO_G0316.node=NODE_G031J6
+Disco.menu.pnum.DISCO_G0316.upload.maximum_size=131072
+Disco.menu.pnum.DISCO_G0316.upload.maximum_data_size=32768
+Disco.menu.pnum.DISCO_G0316.build.mcu=cortex-m0plus
+Disco.menu.pnum.DISCO_G0316.build.board=DISCO_G0316
+Disco.menu.pnum.DISCO_G0316.build.series=STM32G0xx
+Disco.menu.pnum.DISCO_G0316.build.product_line=STM32G031xx
+Disco.menu.pnum.DISCO_G0316.build.variant=DISCO_G0316
+Disco.menu.pnum.DISCO_G0316.build.cmsis_lib_gcc=arm_cortexM0l_math
+Disco.menu.pnum.DISCO_G0316.build.extra_flags=-D{build.product_line} {build.xSerial} -D__CORTEX_SC=0
+
# DISCO_L475VG_IOT board
Disco.menu.pnum.DISCO_L475VG_IOT=STM32L475VG-DISCOVERY-IOT
Disco.menu.pnum.DISCO_L475VG_IOT.node=DIS_L4IOT
@@ -597,6 +683,19 @@ Disco.menu.pnum.DISCO_L475VG_IOT.build.product_line=STM32L475xx
Disco.menu.pnum.DISCO_L475VG_IOT.build.variant=DISCO_L475VG_IOT
Disco.menu.pnum.DISCO_L475VG_IOT.build.cmsis_lib_gcc=arm_cortexM4lf_math
+# B_L4S5I_IOT01A board
+Disco.menu.pnum.B_L4S5I_IOT01A=B-L4S5I-IOT01A
+Disco.menu.pnum.B_L4S5I_IOT01A.node="DIS_L4IOT,DIS_L4S5VI"
+Disco.menu.pnum.B_L4S5I_IOT01A.upload.maximum_size=2097152
+Disco.menu.pnum.B_L4S5I_IOT01A.upload.maximum_data_size=655360
+Disco.menu.pnum.B_L4S5I_IOT01A.build.mcu=cortex-m4
+Disco.menu.pnum.B_L4S5I_IOT01A.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+Disco.menu.pnum.B_L4S5I_IOT01A.build.board=B_L4S5I_IOT01A
+Disco.menu.pnum.B_L4S5I_IOT01A.build.series=STM32L4xx
+Disco.menu.pnum.B_L4S5I_IOT01A.build.product_line=STM32L4S5xx
+Disco.menu.pnum.B_L4S5I_IOT01A.build.variant=B_L4S5I_IOT01A
+Disco.menu.pnum.B_L4S5I_IOT01A.build.cmsis_lib_gcc=arm_cortexM4lf_math
+
# DISCO-L072CZ-LRWAN1 board
Disco.menu.pnum.DISCO_L072CZ_LRWAN1=Discovery L072CZ-LRWAN1
Disco.menu.pnum.DISCO_L072CZ_LRWAN1.node="DIS_L072Z,NODE_L072CZ"
@@ -635,7 +734,6 @@ Disco.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
Eval.name=Eval
-Eval.build.vid=0x0483
Eval.build.core=arduino
Eval.build.board=Eval
Eval.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -668,14 +766,13 @@ Eval.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
STM32MP1.name=STM32MP1 series coprocessor
-STM32MP1.build.vid=0x0483
STM32MP1.build.core=arduino
STM32MP1.build.board=STM32MP1
STM32MP1.build.mcu=cortex-m4
STM32MP1.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
STM32MP1.build.series=STM32MP1xx
STM32MP1.build.cmsis_lib_gcc=arm_cortexM4l_math
-STM32MP1.build.extra_flags=-DCORE_CM4 -DUSE_FULL_LL_DRIVER -D{build.product_line} {build.xSerial}
+STM32MP1.build.extra_flags=-DCORE_CM4 -DUSE_FULL_LL_DRIVER -D{build.product_line} {build.enable_virtio} {build.xSerial}
# STM32MP157A-DK1 board
STM32MP1.menu.pnum.STM32MP157A_DK1=STM32MP157A-DK1
@@ -756,7 +853,6 @@ GenF0.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
# Generic F1
GenF1.name=Generic STM32F1 series
-GenF1.build.vid=0x0483
GenF1.build.core=arduino
GenF1.build.board=GenF1
GenF1.build.mcu=cortex-m3
@@ -780,12 +876,12 @@ GenF1.menu.pnum.BLUEPILL_F103C8.build.board=BLUEPILL_F103C8
GenF1.menu.pnum.BLUEPILL_F103C8.build.product_line=STM32F103xB
GenF1.menu.pnum.BLUEPILL_F103C8.build.variant=PILL_F103XX
-GenF1.menu.pnum.BLUEPILL_F103C8B=BluePill F103C8 (128k)
-GenF1.menu.pnum.BLUEPILL_F103C8B.upload.maximum_size=131072
-GenF1.menu.pnum.BLUEPILL_F103C8B.upload.maximum_data_size=20480
-GenF1.menu.pnum.BLUEPILL_F103C8B.build.board=BLUEPILL_F103C8
-GenF1.menu.pnum.BLUEPILL_F103C8B.build.product_line=STM32F103xB
-GenF1.menu.pnum.BLUEPILL_F103C8B.build.variant=PILL_F103XX
+GenF1.menu.pnum.BLUEPILL_F103CB=BluePill F103CB (or C8 with 128k)
+GenF1.menu.pnum.BLUEPILL_F103CB.upload.maximum_size=131072
+GenF1.menu.pnum.BLUEPILL_F103CB.upload.maximum_data_size=20480
+GenF1.menu.pnum.BLUEPILL_F103CB.build.board=BLUEPILL_F103CB
+GenF1.menu.pnum.BLUEPILL_F103CB.build.product_line=STM32F103xB
+GenF1.menu.pnum.BLUEPILL_F103CB.build.variant=PILL_F103XX
# BLACKPILL_F103C8 board
GenF1.menu.pnum.BLACKPILL_F103C8=BlackPill F103C8
@@ -795,41 +891,235 @@ GenF1.menu.pnum.BLACKPILL_F103C8.build.board=BLACKPILL_F103C8
GenF1.menu.pnum.BLACKPILL_F103C8.build.product_line=STM32F103xB
GenF1.menu.pnum.BLACKPILL_F103C8.build.variant=PILL_F103XX
-GenF1.menu.pnum.BLACKPILL_F103C8B=BlackPill F103C8 (128k)
-GenF1.menu.pnum.BLACKPILL_F103C8B.upload.maximum_size=131072
-GenF1.menu.pnum.BLACKPILL_F103C8B.upload.maximum_data_size=20480
-GenF1.menu.pnum.BLACKPILL_F103C8B.build.board=BLACKPILL_F103C8
-GenF1.menu.pnum.BLACKPILL_F103C8B.build.product_line=STM32F103xB
-GenF1.menu.pnum.BLACKPILL_F103C8B.build.variant=PILL_F103XX
-
-# Generic STM32F103Rx boards (Blue button)
-GenF1.menu.pnum.Generic_F103R8T6=Generic F103R8T6 (Blue Button)
-GenF1.menu.pnum.Generic_F103R8T6.upload.maximum_size=65536
-GenF1.menu.pnum.Generic_F103R8T6.upload.maximum_data_size=20480
-GenF1.menu.pnum.Generic_F103R8T6.build.board=GENERIC_F103R8T6
-GenF1.menu.pnum.Generic_F103R8T6.build.product_line=STM32F103xB
-GenF1.menu.pnum.Generic_F103R8T6.build.variant=Generic_F103Rx
-
-GenF1.menu.pnum.Generic_F103RBT6=Generic F103RBT6 (Blue Button)
-GenF1.menu.pnum.Generic_F103RBT6.upload.maximum_size=131072
-GenF1.menu.pnum.Generic_F103RBT6.upload.maximum_data_size=20480
-GenF1.menu.pnum.Generic_F103RBT6.build.board=GENERIC_F103RBT6
-GenF1.menu.pnum.Generic_F103RBT6.build.product_line=STM32F103xB
-GenF1.menu.pnum.Generic_F103RBT6.build.variant=Generic_F103Rx
-
-GenF1.menu.pnum.Generic_F103RCT6=Generic F103RCT6 (Blue Button)
-GenF1.menu.pnum.Generic_F103RCT6.upload.maximum_size=262144
-GenF1.menu.pnum.Generic_F103RCT6.upload.maximum_data_size=49152
-GenF1.menu.pnum.Generic_F103RCT6.build.board=GENERIC_F103RCT6
-GenF1.menu.pnum.Generic_F103RCT6.build.product_line=STM32F103xE
-GenF1.menu.pnum.Generic_F103RCT6.build.variant=Generic_F103Rx
-
-GenF1.menu.pnum.Generic_F103RET6=Generic F103RET6 (Blue Button)
-GenF1.menu.pnum.Generic_F103RET6.upload.maximum_size=524288
-GenF1.menu.pnum.Generic_F103RET6.upload.maximum_data_size=65536
-GenF1.menu.pnum.Generic_F103RET6.build.board=GENERIC_F103RET6
-GenF1.menu.pnum.Generic_F103RET6.build.product_line=STM32F103xE
-GenF1.menu.pnum.Generic_F103RET6.build.variant=Generic_F103Rx
+GenF1.menu.pnum.BLACKPILL_F103CB=BlackPill F103CB (or C8 with 128k)
+GenF1.menu.pnum.BLACKPILL_F103CB.upload.maximum_size=131072
+GenF1.menu.pnum.BLACKPILL_F103CB.upload.maximum_data_size=20480
+GenF1.menu.pnum.BLACKPILL_F103CB.build.board=BLACKPILL_F103CB
+GenF1.menu.pnum.BLACKPILL_F103CB.build.product_line=STM32F103xB
+GenF1.menu.pnum.BLACKPILL_F103CB.build.variant=PILL_F103XX
+
+# Generic STM32F103Cx boards
+GenF1.menu.pnum.Generic_F103C4=Generic F103C4
+GenF1.menu.pnum.Generic_F103C4.upload.maximum_size=16384
+GenF1.menu.pnum.Generic_F103C4.upload.maximum_data_size=6144
+GenF1.menu.pnum.Generic_F103C4.build.board=GENERIC_F103C4
+GenF1.menu.pnum.Generic_F103C4.build.product_line=STM32F103x6
+GenF1.menu.pnum.Generic_F103C4.build.variant=Generic_F103Cx
+
+GenF1.menu.pnum.Generic_F103C6=Generic F103C6
+GenF1.menu.pnum.Generic_F103C6.upload.maximum_size=32768
+GenF1.menu.pnum.Generic_F103C6.upload.maximum_data_size=10240
+GenF1.menu.pnum.Generic_F103C6.build.board=GENERIC_F103C6
+GenF1.menu.pnum.Generic_F103C6.build.product_line=STM32F103x6
+GenF1.menu.pnum.Generic_F103C6.build.variant=Generic_F103Cx
+
+GenF1.menu.pnum.Generic_F103C8=Generic F103C8
+GenF1.menu.pnum.Generic_F103C8.upload.maximum_size=65536
+GenF1.menu.pnum.Generic_F103C8.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103C8.build.board=GENERIC_F103C8
+GenF1.menu.pnum.Generic_F103C8.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103C8.build.variant=Generic_F103Cx
+
+GenF1.menu.pnum.Generic_F103CB=Generic F103CB
+GenF1.menu.pnum.Generic_F103CB.upload.maximum_size=131072
+GenF1.menu.pnum.Generic_F103CB.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103CB.build.board=GENERIC_F103CB
+GenF1.menu.pnum.Generic_F103CB.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103CB.build.variant=Generic_F103Cx
+
+# Generic STM32F103Rx boards
+GenF1.menu.pnum.Generic_F103R4=Generic F103R4
+GenF1.menu.pnum.Generic_F103R4.upload.maximum_size=16384
+GenF1.menu.pnum.Generic_F103R4.upload.maximum_data_size=6144
+GenF1.menu.pnum.Generic_F103R4.build.board=GENERIC_F103R4
+GenF1.menu.pnum.Generic_F103R4.build.product_line=STM32F103x6
+GenF1.menu.pnum.Generic_F103R4.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103R6=Generic F103R6
+GenF1.menu.pnum.Generic_F103R6.upload.maximum_size=32768
+GenF1.menu.pnum.Generic_F103R6.upload.maximum_data_size=10240
+GenF1.menu.pnum.Generic_F103R6.build.board=GENERIC_F103R6
+GenF1.menu.pnum.Generic_F103R6.build.product_line=STM32F103x6
+GenF1.menu.pnum.Generic_F103R6.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103R8=Generic F103R8
+GenF1.menu.pnum.Generic_F103R8.upload.maximum_size=65536
+GenF1.menu.pnum.Generic_F103R8.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103R8.build.board=GENERIC_F103R8
+GenF1.menu.pnum.Generic_F103R8.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103R8.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103RB=Generic F103RB
+GenF1.menu.pnum.Generic_F103RB.upload.maximum_size=131072
+GenF1.menu.pnum.Generic_F103RB.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103RB.build.board=GENERIC_F103RB
+GenF1.menu.pnum.Generic_F103RB.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103RB.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103RC=Generic F103RC
+GenF1.menu.pnum.Generic_F103RC.upload.maximum_size=262144
+GenF1.menu.pnum.Generic_F103RC.upload.maximum_data_size=49152
+GenF1.menu.pnum.Generic_F103RC.build.board=GENERIC_F103RC
+GenF1.menu.pnum.Generic_F103RC.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103RC.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103RD=Generic F103RD
+GenF1.menu.pnum.Generic_F103RD.upload.maximum_size=393216
+GenF1.menu.pnum.Generic_F103RD.upload.maximum_data_size=65536
+GenF1.menu.pnum.Generic_F103RD.build.board=GENERIC_F103RD
+GenF1.menu.pnum.Generic_F103RD.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103RD.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103RE=Generic F103RE
+GenF1.menu.pnum.Generic_F103RE.upload.maximum_size=524288
+GenF1.menu.pnum.Generic_F103RE.upload.maximum_data_size=65536
+GenF1.menu.pnum.Generic_F103RE.build.board=GENERIC_F103RE
+GenF1.menu.pnum.Generic_F103RE.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103RE.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103RF=Generic F103RF
+GenF1.menu.pnum.Generic_F103RF.upload.maximum_size=786432
+GenF1.menu.pnum.Generic_F103RF.upload.maximum_data_size=98304
+GenF1.menu.pnum.Generic_F103RF.build.board=GENERIC_F103RF
+GenF1.menu.pnum.Generic_F103RF.build.product_line=STM32F103xG
+GenF1.menu.pnum.Generic_F103RF.build.variant=Generic_F103Rx
+
+GenF1.menu.pnum.Generic_F103RG=Generic F103RG
+GenF1.menu.pnum.Generic_F103RG.upload.maximum_size=1048576
+GenF1.menu.pnum.Generic_F103RG.upload.maximum_data_size=98304
+GenF1.menu.pnum.Generic_F103RG.build.board=GENERIC_F103RG
+GenF1.menu.pnum.Generic_F103RG.build.product_line=STM32F103xG
+GenF1.menu.pnum.Generic_F103RG.build.variant=Generic_F103Rx
+
+# Generic STM32F103Tx boards
+GenF1.menu.pnum.Generic_F103T4=Generic F103T4
+GenF1.menu.pnum.Generic_F103T4.upload.maximum_size=16384
+GenF1.menu.pnum.Generic_F103T4.upload.maximum_data_size=6144
+GenF1.menu.pnum.Generic_F103T4.build.board=GENERIC_F103T4
+GenF1.menu.pnum.Generic_F103T4.build.product_line=STM32F103x6
+GenF1.menu.pnum.Generic_F103T4.build.variant=Generic_F103Tx
+
+GenF1.menu.pnum.Generic_F103T6=Generic F103T6
+GenF1.menu.pnum.Generic_F103T6.upload.maximum_size=32768
+GenF1.menu.pnum.Generic_F103T6.upload.maximum_data_size=10240
+GenF1.menu.pnum.Generic_F103T6.build.board=GENERIC_F103T6
+GenF1.menu.pnum.Generic_F103T6.build.product_line=STM32F103x6
+GenF1.menu.pnum.Generic_F103T6.build.variant=Generic_F103Tx
+
+GenF1.menu.pnum.Generic_F103T8=Generic F103T8
+GenF1.menu.pnum.Generic_F103T8.upload.maximum_size=65536
+GenF1.menu.pnum.Generic_F103T8.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103T8.build.board=GENERIC_F103T8
+GenF1.menu.pnum.Generic_F103T8.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103T8.build.variant=Generic_F103Tx
+
+GenF1.menu.pnum.Generic_F103TB=Generic F103TB
+GenF1.menu.pnum.Generic_F103TB.upload.maximum_size=131072
+GenF1.menu.pnum.Generic_F103TB.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103TB.build.board=GENERIC_F103TB
+GenF1.menu.pnum.Generic_F103TB.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103TB.build.variant=Generic_F103Tx
+
+# Generic STM32F103Vx boards
+GenF1.menu.pnum.Generic_F103V8=Generic F103V8
+GenF1.menu.pnum.Generic_F103V8.upload.maximum_size=65536
+GenF1.menu.pnum.Generic_F103V8.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103V8.build.board=GENERIC_F103V8
+GenF1.menu.pnum.Generic_F103V8.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103V8.build.variant=Generic_F103Vx
+
+GenF1.menu.pnum.Generic_F103VB=Generic F103VB
+GenF1.menu.pnum.Generic_F103VB.upload.maximum_size=131072
+GenF1.menu.pnum.Generic_F103VB.upload.maximum_data_size=20480
+GenF1.menu.pnum.Generic_F103VB.build.board=GENERIC_F103VB
+GenF1.menu.pnum.Generic_F103VB.build.product_line=STM32F103xB
+GenF1.menu.pnum.Generic_F103VB.build.variant=Generic_F103Vx
+
+GenF1.menu.pnum.Generic_F103VC=Generic F103VC
+GenF1.menu.pnum.Generic_F103VC.upload.maximum_size=262144
+GenF1.menu.pnum.Generic_F103VC.upload.maximum_data_size=49152
+GenF1.menu.pnum.Generic_F103VC.build.board=GENERIC_F103VC
+GenF1.menu.pnum.Generic_F103VC.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103VC.build.variant=Generic_F103Vx
+
+GenF1.menu.pnum.Generic_F103VD=Generic F103VD
+GenF1.menu.pnum.Generic_F103VD.upload.maximum_size=393216
+GenF1.menu.pnum.Generic_F103VD.upload.maximum_data_size=65536
+GenF1.menu.pnum.Generic_F103VD.build.board=GENERIC_F103VD
+GenF1.menu.pnum.Generic_F103VD.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103VD.build.variant=Generic_F103Vx
+
+GenF1.menu.pnum.Generic_F103VE=Generic F103VE
+GenF1.menu.pnum.Generic_F103VE.upload.maximum_size=524288
+GenF1.menu.pnum.Generic_F103VE.upload.maximum_data_size=65536
+GenF1.menu.pnum.Generic_F103VE.build.board=GENERIC_F103VE
+GenF1.menu.pnum.Generic_F103VE.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103VE.build.variant=Generic_F103Vx
+
+GenF1.menu.pnum.Generic_F103VF=Generic F103VF
+GenF1.menu.pnum.Generic_F103VF.upload.maximum_size=786432
+GenF1.menu.pnum.Generic_F103VF.upload.maximum_data_size=98304
+GenF1.menu.pnum.Generic_F103VF.build.board=GENERIC_F103VF
+GenF1.menu.pnum.Generic_F103VF.build.product_line=STM32F103xG
+GenF1.menu.pnum.Generic_F103VF.build.variant=Generic_F103Vx
+
+GenF1.menu.pnum.Generic_F103VG=Generic F103VG
+GenF1.menu.pnum.Generic_F103VG.upload.maximum_size=1048576
+GenF1.menu.pnum.Generic_F103VG.upload.maximum_data_size=98304
+GenF1.menu.pnum.Generic_F103VG.build.board=GENERIC_F103VG
+GenF1.menu.pnum.Generic_F103VG.build.product_line=STM32F103xG
+GenF1.menu.pnum.Generic_F103VG.build.variant=Generic_F103Vx
+
+# Generic STM32F103Zx boards
+GenF1.menu.pnum.Generic_F103ZC=Generic F103ZC
+GenF1.menu.pnum.Generic_F103ZC.upload.maximum_size=262144
+GenF1.menu.pnum.Generic_F103ZC.upload.maximum_data_size=49152
+GenF1.menu.pnum.Generic_F103ZC.build.board=Generic_F103ZC
+GenF1.menu.pnum.Generic_F103ZC.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103ZC.build.variant=Generic_F103Zx
+
+GenF1.menu.pnum.Generic_F103ZD=Generic F103ZD
+GenF1.menu.pnum.Generic_F103ZD.upload.maximum_size=393216
+GenF1.menu.pnum.Generic_F103ZD.upload.maximum_data_size=65536
+GenF1.menu.pnum.Generic_F103ZD.build.board=Generic_F103ZC
+GenF1.menu.pnum.Generic_F103ZD.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103ZD.build.variant=Generic_F103Zx
+
+GenF1.menu.pnum.Generic_F103ZE=Generic F103ZE
+GenF1.menu.pnum.Generic_F103ZE.upload.maximum_size=524288
+GenF1.menu.pnum.Generic_F103ZE.upload.maximum_data_size=65536
+GenF1.menu.pnum.Generic_F103ZE.build.board=Generic_F103ZE
+GenF1.menu.pnum.Generic_F103ZE.build.product_line=STM32F103xE
+GenF1.menu.pnum.Generic_F103ZE.build.variant=Generic_F103Zx
+
+GenF1.menu.pnum.Generic_F103ZF=Generic F103ZF
+GenF1.menu.pnum.Generic_F103ZF.upload.maximum_size=786432
+GenF1.menu.pnum.Generic_F103ZF.upload.maximum_data_size=98304
+GenF1.menu.pnum.Generic_F103ZF.build.board=Generic_F103ZF
+GenF1.menu.pnum.Generic_F103ZF.build.product_line=STM32F103xG
+GenF1.menu.pnum.Generic_F103ZF.build.variant=Generic_F103Zx
+
+GenF1.menu.pnum.Generic_F103ZG=Generic F103ZG
+GenF1.menu.pnum.Generic_F103ZG.upload.maximum_size=1048576
+GenF1.menu.pnum.Generic_F103ZG.upload.maximum_data_size=98304
+GenF1.menu.pnum.Generic_F103ZG.build.board=Generic_F103ZG
+GenF1.menu.pnum.Generic_F103ZG.build.product_line=STM32F103xG
+GenF1.menu.pnum.Generic_F103ZG.build.variant=Generic_F103Zx
+
+# VCCGND_F103ZET6 board
+GenF1.menu.pnum.VCCGND_F103ZET6Mini=VCCGND F103ZET6 Mini
+GenF1.menu.pnum.VCCGND_F103ZET6Mini.upload.maximum_size=524288
+GenF1.menu.pnum.VCCGND_F103ZET6Mini.upload.maximum_data_size=65536
+GenF1.menu.pnum.VCCGND_F103ZET6Mini.build.board=VCCGND_F103ZET6_MINI
+GenF1.menu.pnum.VCCGND_F103ZET6Mini.build.product_line=STM32F103xE
+GenF1.menu.pnum.VCCGND_F103ZET6Mini.build.variant=Generic_F103Zx
+
+GenF1.menu.pnum.VCCGND_F103ZET6=VCCGND F103ZET6
+GenF1.menu.pnum.VCCGND_F103ZET6.upload.maximum_size=524288
+GenF1.menu.pnum.VCCGND_F103ZET6.upload.maximum_data_size=65536
+GenF1.menu.pnum.VCCGND_F103ZET6.build.board=VCCGND_F103ZET6
+GenF1.menu.pnum.VCCGND_F103ZET6.build.product_line=STM32F103xE
+GenF1.menu.pnum.VCCGND_F103ZET6.build.variant=Generic_F103Zx
# HY-TinySTM103TB board
GenF1.menu.pnum.HY_TinySTM103TB=HY-TinySTM103TB
@@ -847,13 +1137,6 @@ GenF1.menu.pnum.MAPLEMINI_F103CB.build.board=MAPLEMINI_F103CB
GenF1.menu.pnum.MAPLEMINI_F103CB.build.product_line=STM32F103xB
GenF1.menu.pnum.MAPLEMINI_F103CB.build.variant=MAPLEMINI_F103CB
-# VCCGND_F103ZET6 board
-GenF1.menu.pnum.VCCGND_F103ZET6=VCCGND_F103ZET6
-GenF1.menu.pnum.VCCGND_F103ZET6.upload.maximum_size=524288
-GenF1.menu.pnum.VCCGND_F103ZET6.upload.maximum_data_size=65536
-GenF1.menu.pnum.VCCGND_F103ZET6.build.board=VCCGND_F103ZET6
-GenF1.menu.pnum.VCCGND_F103ZET6.build.product_line=STM32F103xE
-GenF1.menu.pnum.VCCGND_F103ZET6.build.variant=VCCGND_F103ZET6
# Upload menu
GenF1.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
@@ -902,7 +1185,6 @@ GenF1.menu.upload_method.dfuoMethod.build.bootloader_flags=-DBL_LEGACY_LEAF -DVE
GenF3.name=Generic STM32F3 series
-GenF3.build.vid=0x0483
GenF3.build.core=arduino
GenF3.build.board=GenF3
GenF3.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} {build.bootloader_flags}
@@ -944,7 +1226,6 @@ GenF3.menu.upload_method.bmpMethod.upload.tool=bmp_upload
GenF4.name=Generic STM32F4 series
-GenF4.build.vid=0x0483
GenF4.build.core=arduino
GenF4.build.board=GenF4
GenF4.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} {build.bootloader_flags}
@@ -954,6 +1235,7 @@ GenF4.build.series=STM32F4xx
GenF4.build.cmsis_lib_gcc=arm_cortexM4lf_math
# Black F407VE
+# https://github.com/mcauser/BLACK_F407VEZ
GenF4.menu.pnum.BLACK_F407VE=Black F407VE
GenF4.menu.pnum.BLACK_F407VE.upload.maximum_size=524288
GenF4.menu.pnum.BLACK_F407VE.upload.maximum_data_size=131072
@@ -962,6 +1244,7 @@ GenF4.menu.pnum.BLACK_F407VE.build.product_line=STM32F407xx
GenF4.menu.pnum.BLACK_F407VE.build.variant=BLACK_F407XX
# Black F407VG
+# https://github.com/mcauser/BLACK_F407VEZ with bigger chip
GenF4.menu.pnum.BLACK_F407VG=Black F407VG
GenF4.menu.pnum.BLACK_F407VG.upload.maximum_size=1048576
GenF4.menu.pnum.BLACK_F407VG.upload.maximum_data_size=131072
@@ -970,6 +1253,7 @@ GenF4.menu.pnum.BLACK_F407VG.build.product_line=STM32F407xx
GenF4.menu.pnum.BLACK_F407VG.build.variant=BLACK_F407XX
# Black F407ZE
+# https://github.com/mcauser/BLACK_F407ZE
GenF4.menu.pnum.BLACK_F407ZE=Black F407ZE
GenF4.menu.pnum.BLACK_F407ZE.upload.maximum_size=524288
GenF4.menu.pnum.BLACK_F407ZE.upload.maximum_data_size=131072
@@ -978,6 +1262,7 @@ GenF4.menu.pnum.BLACK_F407ZE.build.product_line=STM32F407xx
GenF4.menu.pnum.BLACK_F407ZE.build.variant=BLACK_F407XX
# Black F407ZG
+# https://github.com/mcauser/BLACK_F407ZG
GenF4.menu.pnum.BLACK_F407ZG=Black F407ZG
GenF4.menu.pnum.BLACK_F407ZG.upload.maximum_size=1048576
GenF4.menu.pnum.BLACK_F407ZG.upload.maximum_data_size=131072
@@ -1015,15 +1300,25 @@ GenF4.menu.pnum.BLACKPILL_F401CC.upload.maximum_size=262144
GenF4.menu.pnum.BLACKPILL_F401CC.upload.maximum_data_size=65536
GenF4.menu.pnum.BLACKPILL_F401CC.build.board=BLACKPILL_F401CC
GenF4.menu.pnum.BLACKPILL_F401CC.build.product_line=STM32F401xC
-GenF4.menu.pnum.BLACKPILL_F401CC.build.variant=PILL_F401XX
+GenF4.menu.pnum.BLACKPILL_F401CC.build.variant=Generic_F401Cx
+
+# BlackPill F411CE
+# https://github.com/mcauser/WEACT_F411CEU6
+GenF4.menu.pnum.BLACKPILL_F411CE=BlackPill F411CE
+GenF4.menu.pnum.BLACKPILL_F411CE.upload.maximum_size=524288
+GenF4.menu.pnum.BLACKPILL_F411CE.upload.maximum_data_size=131072
+GenF4.menu.pnum.BLACKPILL_F411CE.build.board=BLACKPILL_F411CE
+GenF4.menu.pnum.BLACKPILL_F411CE.build.product_line=STM32F411xE
+GenF4.menu.pnum.BLACKPILL_F411CE.build.variant=Generic_F411Cx
# Core board F401RCT6
+# https://stm32-base.org/boards/STM32F401RCT6-STM32F-Core-Board
GenF4.menu.pnum.CoreBoard_F401RC=Core board F401RCT6
GenF4.menu.pnum.CoreBoard_F401RC.upload.maximum_size=262144
GenF4.menu.pnum.CoreBoard_F401RC.upload.maximum_data_size=65536
GenF4.menu.pnum.CoreBoard_F401RC.build.board=CoreBoard_F401RC
GenF4.menu.pnum.CoreBoard_F401RC.build.product_line=STM32F401xC
-GenF4.menu.pnum.CoreBoard_F401RC.build.variant=CoreBoard_F401RC
+GenF4.menu.pnum.CoreBoard_F401RC.build.variant=Generic_F401Rx
# Adafruit Feather STM32F405 board
GenF4.menu.pnum.FEATHER_F405=Adafruit Feather STM32F405
@@ -1033,6 +1328,239 @@ GenF4.menu.pnum.FEATHER_F405.build.board=FEATHER_F405
GenF4.menu.pnum.FEATHER_F405.build.product_line=STM32F405xx
GenF4.menu.pnum.FEATHER_F405.build.variant=FEATHER_F405
+# ThunderPack F411xxE
+# https://github.com/jgillick/ThunderPack/tree/STM32F4
+GenF4.menu.pnum.THUNDERPACK_F411=ThunderPack v1.1+
+GenF4.menu.pnum.THUNDERPACK_F411.upload.maximum_size=524288
+GenF4.menu.pnum.THUNDERPACK_F411.upload.maximum_data_size=131072
+GenF4.menu.pnum.THUNDERPACK_F411.build.board=THUNDERPACK_F411
+GenF4.menu.pnum.THUNDERPACK_F411.build.product_line=STM32F411xE
+GenF4.menu.pnum.THUNDERPACK_F411.build.variant=THUNDERPACK
+
+# Generic F446RE
+GenF4.menu.pnum.Generic_F446RE=Generic F446RE
+GenF4.menu.pnum.Generic_F446RE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F446RE.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F446RE.build.board=GENERIC_F446RE
+GenF4.menu.pnum.Generic_F446RE.build.product_line=STM32F446xx
+GenF4.menu.pnum.Generic_F446RE.build.variant=Generic_F446Rx
+
+# Generic F446RC
+GenF4.menu.pnum.Generic_F446RC=Generic F446RC
+GenF4.menu.pnum.Generic_F446RC.upload.maximum_size=262144
+GenF4.menu.pnum.Generic_F446RC.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F446RC.build.board=GENERIC_F446RC
+GenF4.menu.pnum.Generic_F446RC.build.product_line=STM32F446xx
+GenF4.menu.pnum.Generic_F446RC.build.variant=Generic_F446Rx
+
+# Generic F423RH
+GenF4.menu.pnum.Generic_F423RH=Generic F423RH
+GenF4.menu.pnum.Generic_F423RH.upload.maximum_size=1572864
+GenF4.menu.pnum.Generic_F423RH.upload.maximum_data_size=327680
+GenF4.menu.pnum.Generic_F423RH.build.board=GENERIC_F423RH
+GenF4.menu.pnum.Generic_F423RH.build.product_line=STM32F423xx
+GenF4.menu.pnum.Generic_F423RH.build.variant=Generic_F4x3Rx
+
+# Generic F423CH
+GenF4.menu.pnum.Generic_F423CH=Generic F423CH
+GenF4.menu.pnum.Generic_F423CH.upload.maximum_size=1572864
+GenF4.menu.pnum.Generic_F423CH.upload.maximum_data_size=327680
+GenF4.menu.pnum.Generic_F423CH.build.board=GENERIC_F423CH
+GenF4.menu.pnum.Generic_F423CH.build.product_line=STM32F423xx
+GenF4.menu.pnum.Generic_F423CH.build.variant=Generic_F4x3Cx
+
+# Generic F417VG
+GenF4.menu.pnum.Generic_F417VG=Generic F417VG
+GenF4.menu.pnum.Generic_F417VG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F417VG.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F417VG.build.board=GENERIC_F417VG
+GenF4.menu.pnum.Generic_F417VG.build.product_line=STM32F417xx
+GenF4.menu.pnum.Generic_F417VG.build.variant=Generic_F4x7Vx
+
+# Generic F417VE
+GenF4.menu.pnum.Generic_F417VE=Generic F417VE
+GenF4.menu.pnum.Generic_F417VE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F417VE.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F417VE.build.board=GENERIC_F417VE
+GenF4.menu.pnum.Generic_F417VE.build.product_line=STM32F417xx
+GenF4.menu.pnum.Generic_F417VE.build.variant=Generic_F4x7Vx
+
+# Generic F415RG
+GenF4.menu.pnum.Generic_F415RG=Generic F415RG
+GenF4.menu.pnum.Generic_F415RG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F415RG.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F415RG.build.board=GENERIC_F415RG
+GenF4.menu.pnum.Generic_F415RG.build.product_line=STM32F415xx
+GenF4.menu.pnum.Generic_F415RG.build.variant=Generic_F4x5RG
+
+# Generic F413RH
+GenF4.menu.pnum.Generic_F413RH=Generic F413RH
+GenF4.menu.pnum.Generic_F413RH.upload.maximum_size=1572864
+GenF4.menu.pnum.Generic_F413RH.upload.maximum_data_size=327680
+GenF4.menu.pnum.Generic_F413RH.build.board=GENERIC_F413RH
+GenF4.menu.pnum.Generic_F413RH.build.product_line=STM32F413xx
+GenF4.menu.pnum.Generic_F413RH.build.variant=Generic_F4x3Rx
+
+# Generic F413RG
+GenF4.menu.pnum.Generic_F413RG=Generic F413RG
+GenF4.menu.pnum.Generic_F413RG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F413RG.upload.maximum_data_size=327680
+GenF4.menu.pnum.Generic_F413RG.build.board=GENERIC_F413RG
+GenF4.menu.pnum.Generic_F413RG.build.product_line=STM32F413xx
+GenF4.menu.pnum.Generic_F413RG.build.variant=Generic_F4x3Rx
+
+# Generic F413CH
+GenF4.menu.pnum.Generic_F413CH=Generic F413CH
+GenF4.menu.pnum.Generic_F413CH.upload.maximum_size=1572864
+GenF4.menu.pnum.Generic_F413CH.upload.maximum_data_size=327680
+GenF4.menu.pnum.Generic_F413CH.build.board=GENERIC_F413CH
+GenF4.menu.pnum.Generic_F413CH.build.product_line=STM32F413xx
+GenF4.menu.pnum.Generic_F413CH.build.variant=Generic_F4x3Cx
+
+# Generic F413CG
+GenF4.menu.pnum.Generic_F413CG=Generic F413CG
+GenF4.menu.pnum.Generic_F413CG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F413CG.upload.maximum_data_size=327680
+GenF4.menu.pnum.Generic_F413CG.build.board=GENERIC_F413CG
+GenF4.menu.pnum.Generic_F413CG.build.product_line=STM32F413xx
+GenF4.menu.pnum.Generic_F413CG.build.variant=Generic_F4x3Cx
+
+# Generic F412RG
+GenF4.menu.pnum.Generic_F412RG=Generic F412RG
+GenF4.menu.pnum.Generic_F412RG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F412RG.upload.maximum_data_size=262144
+GenF4.menu.pnum.Generic_F412RG.build.board=GENERIC_F412RG
+GenF4.menu.pnum.Generic_F412RG.build.product_line=STM32F412Rx
+GenF4.menu.pnum.Generic_F412RG.build.variant=Generic_F412Rx
+
+# Generic F412RE
+GenF4.menu.pnum.Generic_F412RE=Generic F412RE
+GenF4.menu.pnum.Generic_F412RE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F412RE.upload.maximum_data_size=262144
+GenF4.menu.pnum.Generic_F412RE.build.board=GENERIC_F412RE
+GenF4.menu.pnum.Generic_F412RE.build.product_line=STM32F412Rx
+GenF4.menu.pnum.Generic_F412RE.build.variant=Generic_F412Rx
+
+# Generic F412CG
+GenF4.menu.pnum.Generic_F412CG=Generic F412CG
+GenF4.menu.pnum.Generic_F412CG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F412CG.upload.maximum_data_size=262144
+GenF4.menu.pnum.Generic_F412CG.build.board=GENERIC_F412CG
+GenF4.menu.pnum.Generic_F412CG.build.product_line=STM32F412Cx
+GenF4.menu.pnum.Generic_F412CG.build.variant=Generic_F412Cx
+
+# Generic F412CE
+GenF4.menu.pnum.Generic_F412CE=Generic F412CE
+GenF4.menu.pnum.Generic_F412CE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F412CE.upload.maximum_data_size=262144
+GenF4.menu.pnum.Generic_F412CE.build.board=GENERIC_F412CE
+GenF4.menu.pnum.Generic_F412CE.build.product_line=STM32F412Cx
+GenF4.menu.pnum.Generic_F412CE.build.variant=Generic_F412Cx
+
+# Generic F411RE
+GenF4.menu.pnum.Generic_F411RE=Generic F411RE
+GenF4.menu.pnum.Generic_F411RE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F411RE.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F411RE.build.board=GENERIC_F411RE
+GenF4.menu.pnum.Generic_F411RE.build.product_line=STM32F411xE
+GenF4.menu.pnum.Generic_F411RE.build.variant=Generic_F411Rx
+
+# Generic F411RC
+GenF4.menu.pnum.Generic_F411RC=Generic F411RC
+GenF4.menu.pnum.Generic_F411RC.upload.maximum_size=262144
+GenF4.menu.pnum.Generic_F411RC.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F411RC.build.board=GENERIC_F411RC
+GenF4.menu.pnum.Generic_F411RC.build.product_line=STM32F411xE
+GenF4.menu.pnum.Generic_F411RC.build.variant=Generic_F411Rx
+
+# Generic F411CE
+GenF4.menu.pnum.Generic_F411CE=Generic F411CE
+GenF4.menu.pnum.Generic_F411CE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F411CE.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F411CE.build.board=GENERIC_F411CE
+GenF4.menu.pnum.Generic_F411CE.build.product_line=STM32F411xE
+GenF4.menu.pnum.Generic_F411CE.build.variant=Generic_F411Cx
+
+# Generic F411CC
+GenF4.menu.pnum.Generic_F411CC=Generic F411CC
+GenF4.menu.pnum.Generic_F411CC.upload.maximum_size=262144
+GenF4.menu.pnum.Generic_F411CC.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F411CC.build.board=GENERIC_F411CC
+GenF4.menu.pnum.Generic_F411CC.build.product_line=STM32F411xE
+GenF4.menu.pnum.Generic_F411CC.build.variant=Generic_F411Cx
+
+# Generic F410RB
+GenF4.menu.pnum.Generic_F410RB=Generic F410RB
+GenF4.menu.pnum.Generic_F410RB.upload.maximum_size=131072
+GenF4.menu.pnum.Generic_F410RB.upload.maximum_data_size=32768
+GenF4.menu.pnum.Generic_F410RB.build.board=GENERIC_F410RB
+GenF4.menu.pnum.Generic_F410RB.build.product_line=STM32F410Rx
+GenF4.menu.pnum.Generic_F410RB.build.variant=Generic_F410Rx
+
+# Generic F410R8
+GenF4.menu.pnum.Generic_F410R8=Generic F410R8
+GenF4.menu.pnum.Generic_F410R8.upload.maximum_size=65536
+GenF4.menu.pnum.Generic_F410R8.upload.maximum_data_size=32768
+GenF4.menu.pnum.Generic_F410R8.build.board=GENERIC_F410R8
+GenF4.menu.pnum.Generic_F410R8.build.product_line=STM32F410Rx
+GenF4.menu.pnum.Generic_F410R8.build.variant=Generic_F410Rx
+
+# Generic F410CB
+GenF4.menu.pnum.Generic_F410CB=Generic F410CB
+GenF4.menu.pnum.Generic_F410CB.upload.maximum_size=131072
+GenF4.menu.pnum.Generic_F410CB.upload.maximum_data_size=32768
+GenF4.menu.pnum.Generic_F410CB.build.board=GENERIC_F410CB
+GenF4.menu.pnum.Generic_F410CB.build.product_line=STM32F410Cx
+GenF4.menu.pnum.Generic_F410CB.build.variant=Generic_F410Cx
+
+# Generic F410C8
+GenF4.menu.pnum.Generic_F410C8=Generic F410C8
+GenF4.menu.pnum.Generic_F410C8.upload.maximum_size=65536
+GenF4.menu.pnum.Generic_F410C8.upload.maximum_data_size=32768
+GenF4.menu.pnum.Generic_F410C8.build.board=GENERIC_F410C8
+GenF4.menu.pnum.Generic_F410C8.build.product_line=STM32F410Cx
+GenF4.menu.pnum.Generic_F410C8.build.variant=Generic_F410Cx
+
+# Generic F407VG
+GenF4.menu.pnum.Generic_F407VG=Generic F407VG
+GenF4.menu.pnum.Generic_F407VG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F407VG.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F407VG.build.board=GENERIC_F407VG
+GenF4.menu.pnum.Generic_F407VG.build.product_line=STM32F407xx
+GenF4.menu.pnum.Generic_F407VG.build.variant=Generic_F4x7Vx
+
+# Generic F407VE
+GenF4.menu.pnum.Generic_F407VE=Generic F407VE
+GenF4.menu.pnum.Generic_F407VE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F407VE.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F407VE.build.board=GENERIC_F407VE
+GenF4.menu.pnum.Generic_F407VE.build.product_line=STM32F407xx
+GenF4.menu.pnum.Generic_F407VE.build.variant=Generic_F4x7Vx
+
+# Generic F407ZG
+GenF4.menu.pnum.Generic_F407ZG=Generic F407ZG
+GenF4.menu.pnum.Generic_F407ZG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F407ZG.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F407ZG.build.board=Generic_F407ZG
+GenF4.menu.pnum.Generic_F407ZG.build.product_line=STM32F407xx
+GenF4.menu.pnum.Generic_F407ZG.build.variant=Generic_F407Zx
+
+# VCCGND_F407ZGT6 board
+GenF4.menu.pnum.VCCGND_F407ZGT6Mini=VCCGND F407ZGT6 Mini
+GenF4.menu.pnum.VCCGND_F407ZGT6Mini.upload.maximum_size=1048576
+GenF4.menu.pnum.VCCGND_F407ZGT6Mini.upload.maximum_data_size=131072
+GenF4.menu.pnum.VCCGND_F407ZGT6Mini.build.board=VCCGND_F407ZGT6_MINI
+GenF4.menu.pnum.VCCGND_F407ZGT6Mini.build.product_line=STM32F407xx
+GenF4.menu.pnum.VCCGND_F407ZGT6Mini.build.variant=Generic_F407Zx
+
+# Generic F405RG
+GenF4.menu.pnum.Generic_F405RG=Generic F405RG
+GenF4.menu.pnum.Generic_F405RG.upload.maximum_size=1048576
+GenF4.menu.pnum.Generic_F405RG.upload.maximum_data_size=131072
+GenF4.menu.pnum.Generic_F405RG.build.board=GENERIC_F405RG
+GenF4.menu.pnum.Generic_F405RG.build.product_line=STM32F405xx
+GenF4.menu.pnum.Generic_F405RG.build.variant=Generic_F4x5RG
+
# Generic F401RE
GenF4.menu.pnum.Generic_F401RE=Generic F401RE
GenF4.menu.pnum.Generic_F401RE.upload.maximum_size=524288
@@ -1040,7 +1568,6 @@ GenF4.menu.pnum.Generic_F401RE.upload.maximum_data_size=98304
GenF4.menu.pnum.Generic_F401RE.build.board=GENERIC_F401RE
GenF4.menu.pnum.Generic_F401RE.build.product_line=STM32F401xE
GenF4.menu.pnum.Generic_F401RE.build.variant=Generic_F401Rx
-GenF4.menu.pnum.Generic_F401RE.node=NODE_F401RE
# Generic F401RD
GenF4.menu.pnum.Generic_F401RD=Generic F401RD
@@ -1049,7 +1576,6 @@ GenF4.menu.pnum.Generic_F401RD.upload.maximum_data_size=98304
GenF4.menu.pnum.Generic_F401RD.build.board=GENERIC_F401RD
GenF4.menu.pnum.Generic_F401RD.build.product_line=STM32F401xE
GenF4.menu.pnum.Generic_F401RD.build.variant=Generic_F401Rx
-GenF4.menu.pnum.Generic_F401RD.node=NODE_F401RE
# Generic F401RC
GenF4.menu.pnum.Generic_F401RC=Generic F401RC
@@ -1058,7 +1584,6 @@ GenF4.menu.pnum.Generic_F401RC.upload.maximum_data_size=65536
GenF4.menu.pnum.Generic_F401RC.build.board=GENERIC_F401RC
GenF4.menu.pnum.Generic_F401RC.build.product_line=STM32F401xC
GenF4.menu.pnum.Generic_F401RC.build.variant=Generic_F401Rx
-GenF4.menu.pnum.Generic_F401RC.node=NODE_F401RE
# Generic F401RB
GenF4.menu.pnum.Generic_F401RB=Generic F401RB
@@ -1067,7 +1592,38 @@ GenF4.menu.pnum.Generic_F401RB.upload.maximum_data_size=65536
GenF4.menu.pnum.Generic_F401RB.build.board=GENERIC_F401RB
GenF4.menu.pnum.Generic_F401RB.build.product_line=STM32F401xC
GenF4.menu.pnum.Generic_F401RB.build.variant=Generic_F401Rx
-GenF4.menu.pnum.Generic_F401RB.node=NODE_F401RE
+
+# Generic F401CE
+GenF4.menu.pnum.Generic_F401CE=Generic F401CE
+GenF4.menu.pnum.Generic_F401CE.upload.maximum_size=524288
+GenF4.menu.pnum.Generic_F401CE.upload.maximum_data_size=98304
+GenF4.menu.pnum.Generic_F401CE.build.board=GENERIC_F401CE
+GenF4.menu.pnum.Generic_F401CE.build.product_line=STM32F401xE
+GenF4.menu.pnum.Generic_F401CE.build.variant=Generic_F401Cx
+
+# Generic F401CD
+GenF4.menu.pnum.Generic_F401CD=Generic F401CD
+GenF4.menu.pnum.Generic_F401CD.upload.maximum_size=393216
+GenF4.menu.pnum.Generic_F401CD.upload.maximum_data_size=98304
+GenF4.menu.pnum.Generic_F401CD.build.board=GENERIC_F401CD
+GenF4.menu.pnum.Generic_F401CD.build.product_line=STM32F401xE
+GenF4.menu.pnum.Generic_F401CD.build.variant=Generic_F401Cx
+
+# Generic F401CC
+GenF4.menu.pnum.Generic_F401CC=Generic F401CC
+GenF4.menu.pnum.Generic_F401CC.upload.maximum_size=262144
+GenF4.menu.pnum.Generic_F401CC.upload.maximum_data_size=65536
+GenF4.menu.pnum.Generic_F401CC.build.board=GENERIC_F401CC
+GenF4.menu.pnum.Generic_F401CC.build.product_line=STM32F401xC
+GenF4.menu.pnum.Generic_F401CC.build.variant=Generic_F401Cx
+
+# Generic F401CB
+GenF4.menu.pnum.Generic_F401CB=Generic F401CB
+GenF4.menu.pnum.Generic_F401CB.upload.maximum_size=131072
+GenF4.menu.pnum.Generic_F401CB.upload.maximum_data_size=65536
+GenF4.menu.pnum.Generic_F401CB.build.board=GENERIC_F401CB
+GenF4.menu.pnum.Generic_F401CB.build.product_line=STM32F401xC
+GenF4.menu.pnum.Generic_F401CB.build.variant=Generic_F401Cx
# Upload menu
GenF4.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
@@ -1095,11 +1651,46 @@ GenF4.menu.upload_method.hidMethod.upload.tool=hid_upload
GenF4.menu.upload_method.hidMethod.build.flash_offset=0x4000
GenF4.menu.upload_method.hidMethod.build.bootloader_flags=-DBL_HID -DVECT_TAB_OFFSET={build.flash_offset}
+################################################################################
+# Generic H7
+GenH7.name=Generic STM32H7 Series
+
+GenH7.build.core=arduino
+GenH7.build.board=GenH7
+GenH7.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
+GenH7.build.cmsis_lib_gcc=arm_cortexM7lfsp_math
+GenH7.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+GenH7.build.series=STM32H7xx
+GenH7.build.mcu=cortex-m7
+
+# Daisy Seed board
+GenH7.menu.pnum.DAISY_SEED=Daisy Seed
+GenH7.menu.pnum.DAISY_SEED.upload.maximum_size=131072
+GenH7.menu.pnum.DAISY_SEED.upload.maximum_data_size=524288
+GenH7.menu.pnum.DAISY_SEED.build.board=DAISY_SEED
+GenH7.menu.pnum.DAISY_SEED.build.product_line=STM32H750xx
+GenH7.menu.pnum.DAISY_SEED.build.variant=DAISY_SEED
+
+# Upload menu
+GenH7.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
+GenH7.menu.upload_method.swdMethod.upload.protocol=0
+GenH7.menu.upload_method.swdMethod.upload.options=-g
+GenH7.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
+
+GenH7.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
+GenH7.menu.upload_method.serialMethod.upload.protocol=1
+GenH7.menu.upload_method.serialMethod.upload.options={serial.port.file} -s
+GenH7.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
+
+GenH7.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
+GenH7.menu.upload_method.dfuMethod.upload.protocol=2
+GenH7.menu.upload_method.dfuMethod.upload.options=-g
+GenH7.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
+
################################################################################
# Generic L0
GenL0.name=Generic STM32L0 series
-GenL0.build.vid=0x0483
GenL0.build.core=arduino
GenL0.build.board=GenL0
GenL0.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
@@ -1108,12 +1699,12 @@ GenL0.build.series=STM32L0xx
GenL0.build.cmsis_lib_gcc=arm_cortexM0l_math
# ThunderPack
-GenL0.menu.pnum.THUNDER_PACK=ThunderPack
-GenL0.menu.pnum.THUNDER_PACK.upload.maximum_size=196608
-GenL0.menu.pnum.THUNDER_PACK.upload.maximum_data_size=20480
-GenL0.menu.pnum.THUNDER_PACK.build.board=THUNDER_PACK
-GenL0.menu.pnum.THUNDER_PACK.build.product_line=STM32L072xx
-GenL0.menu.pnum.THUNDER_PACK.build.variant=THUNDER_PACK
+GenL0.menu.pnum.THUNDERPACK_L072=ThunderPack v1.0
+GenL0.menu.pnum.THUNDERPACK_L072.upload.maximum_size=196608
+GenL0.menu.pnum.THUNDERPACK_L072.upload.maximum_data_size=20480
+GenL0.menu.pnum.THUNDERPACK_L072.build.board=THUNDERPACK_L072
+GenL0.menu.pnum.THUNDERPACK_L072.build.product_line=STM32L072xx
+GenL0.menu.pnum.THUNDERPACK_L072.build.variant=THUNDERPACK
# Piconomix PX-HER0 board
GenL0.menu.pnum.PX_HER0=PX-HER0
@@ -1148,7 +1739,6 @@ GenL0.menu.upload_method.bmpMethod.upload.tool=bmp_upload
ESC_board.name=Electronic speed controllers
-ESC_board.build.vid=0x0483
ESC_board.build.core=arduino
ESC_board.build.board=FCE_board
ESC_board.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -1185,7 +1775,6 @@ ESC_board.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
LoRa.name=LoRa boards
-LoRa.build.vid=0x0483
LoRa.build.core=arduino
LoRa.build.board=LoRa
LoRa.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -1224,17 +1813,29 @@ LoRa.menu.pnum.RHF76_052.build.cmsis_lib_gcc=arm_cortexM0l_math
LoRa.menu.pnum.RHF76_052.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
# ELEKTOR_F072C8
-LoRa.menu.pnum.ELEKTOR_F072C8=Elektor LoRa Node Core F072
+LoRa.menu.pnum.ELEKTOR_F072C8=Elektor LoRa Node Core F072C8 (64kB)
LoRa.menu.pnum.ELEKTOR_F072C8.upload.maximum_data_size=16384
-LoRa.menu.pnum.ELEKTOR_F072C8.upload.maximum_size=131072
+LoRa.menu.pnum.ELEKTOR_F072C8.upload.maximum_size=65536
LoRa.menu.pnum.ELEKTOR_F072C8.build.mcu=cortex-m0
LoRa.menu.pnum.ELEKTOR_F072C8.build.board=ELEKTOR_F072C8
LoRa.menu.pnum.ELEKTOR_F072C8.build.series=STM32F0xx
LoRa.menu.pnum.ELEKTOR_F072C8.build.product_line=STM32F072xB
-LoRa.menu.pnum.ELEKTOR_F072C8.build.variant=ELEKTOR_F072C8
+LoRa.menu.pnum.ELEKTOR_F072C8.build.variant=ELEKTOR_F072Cx
LoRa.menu.pnum.ELEKTOR_F072C8.build.cmsis_lib_gcc=arm_cortexM0l_math
LoRa.menu.pnum.ELEKTOR_F072C8.build.extra_flags=-D{build.product_line} {build.xSerial}
+# ELEKTOR_F072CB
+LoRa.menu.pnum.ELEKTOR_F072CB=Elektor LoRa Node Core F072CB (128kB)
+LoRa.menu.pnum.ELEKTOR_F072CB.upload.maximum_data_size=16384
+LoRa.menu.pnum.ELEKTOR_F072CB.upload.maximum_size=131072
+LoRa.menu.pnum.ELEKTOR_F072CB.build.mcu=cortex-m0
+LoRa.menu.pnum.ELEKTOR_F072CB.build.board=ELEKTOR_F072CB
+LoRa.menu.pnum.ELEKTOR_F072CB.build.series=STM32F0xx
+LoRa.menu.pnum.ELEKTOR_F072CB.build.product_line=STM32F072xB
+LoRa.menu.pnum.ELEKTOR_F072CB.build.variant=ELEKTOR_F072Cx
+LoRa.menu.pnum.ELEKTOR_F072CB.build.cmsis_lib_gcc=arm_cortexM0l_math
+LoRa.menu.pnum.ELEKTOR_F072CB.build.extra_flags=-D{build.product_line} {build.xSerial}
+
# Upload menu
LoRa.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
LoRa.menu.upload_method.swdMethod.upload.protocol=0
@@ -1256,15 +1857,14 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
3dprinter.name=3D printer boards
-3dprinter.build.vid=0x0483
3dprinter.build.core=arduino
3dprinter.build.board=3dprinter
3dprinter.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
# ARMED_V1 board
3dprinter.menu.pnum.ARMED_V1=Armed V1
-3dprinter.menu.pnum.ARMED_V1.upload.maximum_size=1048576
-3dprinter.menu.pnum.ARMED_V1.upload.maximum_data_size=196608
+3dprinter.menu.pnum.ARMED_V1.upload.maximum_size=524288
+3dprinter.menu.pnum.ARMED_V1.upload.maximum_data_size=131072
3dprinter.menu.pnum.ARMED_V1.build.mcu=cortex-m4
3dprinter.menu.pnum.ARMED_V1.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
3dprinter.menu.pnum.ARMED_V1.build.board=ARMED_V1
@@ -1272,8 +1872,6 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
3dprinter.menu.pnum.ARMED_V1.build.product_line=STM32F407xx
3dprinter.menu.pnum.ARMED_V1.build.variant=ARMED_V1
3dprinter.menu.pnum.ARMED_V1.build.cmsis_lib_gcc=arm_cortexM4lf_math
-3dprinter.menu.pnum.ARMED_V1.build.vid=0x0483
-3dprinter.menu.pnum.ARMED_V1.build.pid=0x5740
# REMRAM_V1 board
3dprinter.menu.pnum.REMRAM_V1=RemRam v1
@@ -1314,7 +1912,7 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
# PRNTR_F407_V1 board
3dprinter.menu.pnum.PRNTR_F407_V1=PRNTR F407 v1
3dprinter.menu.pnum.PRNTR_F407_V1.upload.maximum_size=524288
-3dprinter.menu.pnum.PRNTR_F407_V1.upload.maximum_data_size=196608
+3dprinter.menu.pnum.PRNTR_F407_V1.upload.maximum_data_size=131072
3dprinter.menu.pnum.PRNTR_F407_V1.build.mcu=cortex-m4
3dprinter.menu.pnum.PRNTR_F407_V1.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
3dprinter.menu.pnum.PRNTR_F407_V1.build.board=PRNTR_F407_V1
@@ -1326,7 +1924,7 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
# PRNTR_V2 board
3dprinter.menu.pnum.PRNTR_V2=PRNTR v2
3dprinter.menu.pnum.PRNTR_V2.upload.maximum_size=524288
-3dprinter.menu.pnum.PRNTR_V2.upload.maximum_data_size=196608
+3dprinter.menu.pnum.PRNTR_V2.upload.maximum_data_size=131072
3dprinter.menu.pnum.PRNTR_V2.build.mcu=cortex-m4
3dprinter.menu.pnum.PRNTR_V2.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
3dprinter.menu.pnum.PRNTR_V2.build.board=PRNTR_V2
@@ -1400,6 +1998,20 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
3dprinter.menu.pnum.VAKE_F446VE.build.variant=VAKE_F446VE
3dprinter.menu.pnum.VAKE_F446VE.build.cmsis_lib_gcc=arm_cortexM4lf_math
+# FYSETC_S6 board
+3dprinter.menu.pnum.FYSETC_S6=FYSETC_S6
+3dprinter.menu.pnum.FYSETC_S6.upload.maximum_size=458752
+3dprinter.menu.pnum.FYSETC_S6.upload.maximum_data_size=131072
+3dprinter.menu.pnum.FYSETC_S6.build.mcu=cortex-m4
+3dprinter.menu.pnum.FYSETC_S6.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+3dprinter.menu.pnum.FYSETC_S6.build.board=FYSETC_S6
+3dprinter.menu.pnum.FYSETC_S6.build.series=STM32F4xx
+3dprinter.menu.pnum.FYSETC_S6.build.product_line=STM32F446xx
+3dprinter.menu.pnum.FYSETC_S6.build.variant=FYSETC_S6
+3dprinter.menu.pnum.FYSETC_S6.build.cmsis_lib_gcc=arm_cortexM4lf_math
+3dprinter.menu.pnum.FYSETC_S6.build.flash_offset=0x10000
+3dprinter.menu.pnum.FYSETC_S6.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset}
+
# Upload menu
3dprinter.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
3dprinter.menu.upload_method.swdMethod.upload.protocol=0
@@ -1422,7 +2034,6 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
Genericflight.name=Generic flight controllers
-Genericflight.build.vid=0x0483
Genericflight.build.core=arduino
Genericflight.build.board=Genericflight
Genericflight.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} {build.bootloader_flags}
@@ -1502,12 +2113,73 @@ Genericflight.menu.upload_method.dfuoMethod.upload.altID=1
Genericflight.menu.upload_method.dfuoMethod.build.flash_offset=0x5000
Genericflight.menu.upload_method.dfuoMethod.build.bootloader_flags=-DBL_LEGACY_LEAF -DVECT_TAB_OFFSET={build.flash_offset}
+################################################################################
+# Garatronic-McHobby STM32 boards
+
+Garatronic.name=Garatronic/McHobby
+
+Garatronic.build.core=arduino
+Garatronic.build.board=Garatronic
+Garatronic.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
+
+# PYBSTICK26(DUINO) board with F072RB
+Garatronic.menu.pnum.PYBSTICK26_DUINO=PYBSTICK26 Duino
+Garatronic.menu.pnum.PYBSTICK26_DUINO.upload.maximum_size=131072
+Garatronic.menu.pnum.PYBSTICK26_DUINO.upload.maximum_data_size=16384
+Garatronic.menu.pnum.PYBSTICK26_DUINO.build.mcu=cortex-m0
+Garatronic.menu.pnum.PYBSTICK26_DUINO.build.board=PYBSTICK26_DUINO
+Garatronic.menu.pnum.PYBSTICK26_DUINO.build.series=STM32F0xx
+Garatronic.menu.pnum.PYBSTICK26_DUINO.build.product_line=STM32F072xB
+Garatronic.menu.pnum.PYBSTICK26_DUINO.build.variant=PYBSTICK26_DUINO
+Garatronic.menu.pnum.PYBSTICK26_DUINO.build.cmsis_lib_gcc=arm_cortexM0l_math
+
+# PYBSTICK26(LITE) board with F401CE
+Garatronic.menu.pnum.PYBSTICK26_LITE=PYBSTICK26 Lite
+Garatronic.menu.pnum.PYBSTICK26_LITE.upload.maximum_size=524288
+Garatronic.menu.pnum.PYBSTICK26_LITE.upload.maximum_data_size=98304
+Garatronic.menu.pnum.PYBSTICK26_LITE.build.mcu=cortex-m4
+Garatronic.menu.pnum.PYBSTICK26_LITE.build.board=PYBSTICK26_LITE
+Garatronic.menu.pnum.PYBSTICK26_LITE.build.series=STM32F4xx
+Garatronic.menu.pnum.PYBSTICK26_LITE.build.product_line=STM32F401xE
+Garatronic.menu.pnum.PYBSTICK26_LITE.build.variant=PYBSTICK26_LITE
+Garatronic.menu.pnum.PYBSTICK26_LITE.build.cmsis_lib_gcc=arm_cortexM4lf_math
+Garatronic.menu.pnum.PYBSTICK26_LITE.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+
+# PYBSTICK26(STD/Programmez!) board with F411RE
+Garatronic.menu.pnum.PYBSTICK26_STD=PYBSTICK26 STD-Programmez
+Garatronic.menu.pnum.PYBSTICK26_STD.upload.maximum_size=524288
+Garatronic.menu.pnum.PYBSTICK26_STD.upload.maximum_data_size=131072
+Garatronic.menu.pnum.PYBSTICK26_STD.build.mcu=cortex-m4
+Garatronic.menu.pnum.PYBSTICK26_STD.build.board=PYBSTICK26_STD
+Garatronic.menu.pnum.PYBSTICK26_STD.build.series=STM32F4xx
+Garatronic.menu.pnum.PYBSTICK26_STD.build.product_line=STM32F411xE
+Garatronic.menu.pnum.PYBSTICK26_STD.build.variant=PYBSTICK26_STD
+Garatronic.menu.pnum.PYBSTICK26_STD.build.cmsis_lib_gcc=arm_cortexM4lf_math
+Garatronic.menu.pnum.PYBSTICK26_STD.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+
+# PYBSTICK26(PRO) board with F412RE
+Garatronic.menu.pnum.PYBSTICK26_PRO=PYBSTICK26 Pro
+Garatronic.menu.pnum.PYBSTICK26_PRO.upload.maximum_size=524288
+Garatronic.menu.pnum.PYBSTICK26_PRO.upload.maximum_data_size=262144
+Garatronic.menu.pnum.PYBSTICK26_PRO.build.mcu=cortex-m4
+Garatronic.menu.pnum.PYBSTICK26_PRO.build.board=PYBSTICK26_PRO
+Garatronic.menu.pnum.PYBSTICK26_PRO.build.series=STM32F4xx
+Garatronic.menu.pnum.PYBSTICK26_PRO.build.product_line=STM32F412Rx
+Garatronic.menu.pnum.PYBSTICK26_PRO.build.variant=PYBSTICK26_PRO
+Garatronic.menu.pnum.PYBSTICK26_PRO.build.cmsis_lib_gcc=arm_cortexM4lf_math
+Garatronic.menu.pnum.PYBSTICK26_PRO.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
+
+# PYBSTICK26 boards upload method
+Garatronic.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
+Garatronic.menu.upload_method.dfuMethod.upload.protocol=2
+Garatronic.menu.upload_method.dfuMethod.upload.options=-g
+Garatronic.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
+
################################################################################
# Midatronics boards
Midatronics.name=Midatronics boards
-Midatronics.build.vid=0x0483
Midatronics.build.core=arduino
Midatronics.build.board=Midatronics
Midatronics.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -1577,6 +2249,13 @@ Eval.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
Eval.menu.xserial.disabled=Disabled (no Serial support)
Eval.menu.xserial.disabled.build.xSerial=
+STM32MP1.menu.virtio.disable=Disabled (no SerialVirtIO nor /dev/ttyRPMSG0 available)
+STM32MP1.menu.virtio.disable.build.enable_virtio=
+STM32MP1.menu.virtio.generic=SerialVirtIO (= generic 'Serial') <=> /dev/ttyRPMSG0
+STM32MP1.menu.virtio.generic.build.enable_virtio={build.virtio_flags}
+STM32MP1.menu.virtio.enabled=SerialVirtIO <=> /dev/ttyRPMSG0
+STM32MP1.menu.virtio.enabled.build.enable_virtio={build.virtio_flags} -DDISABLE_GENERIC_SERIALVIRTIO
+
STM32MP1.menu.xserial.generic=UART only (generic 'Serial')
STM32MP1.menu.xserial.generic.build.xSerial=-DHAL_UART_MODULE_ENABLED
STM32MP1.menu.xserial.none=UART only (no generic 'Serial')
@@ -1608,6 +2287,12 @@ GenF4.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
GenF4.menu.xserial.disabled=Disabled (no Serial support)
GenF4.menu.xserial.disabled.build.xSerial=
+GenH7.menu.xserial.generic=Enabled (generic 'Serial')
+GenH7.menu.xserial.none=Enabled (no generic 'Serial')
+GenH7.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
+GenH7.menu.xserial.disabled=Disabled (No Serial support)
+GenH7.menu.xserial.disabled.build.xSerial=
+
GenL0.menu.xserial.generic=Enabled (generic 'Serial')
GenL0.menu.xserial.none=Enabled (no generic 'Serial')
GenL0.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
@@ -1638,6 +2323,12 @@ Genericflight.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERI
Genericflight.menu.xserial.disabled=Disabled (no Serial support)
Genericflight.menu.xserial.disabled.build.xSerial=
+Garatronic.menu.xserial.generic=Enabled (generic 'Serial')
+Garatronic.menu.xserial.none=Enabled (no generic 'Serial')
+Garatronic.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
+Garatronic.menu.xserial.disabled=Disabled (no Serial support)
+Garatronic.menu.xserial.disabled.build.xSerial=
+
Midatronics.menu.xserial.generic=Enabled (generic 'Serial')
Midatronics.menu.xserial.none=Enabled (no generic 'Serial')
Midatronics.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
@@ -1749,6 +2440,17 @@ GenF4.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
GenF4.menu.xusb.HSFS=High Speed in Full Speed mode
GenF4.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
+GenH7.menu.usb.none=None
+GenH7.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
+GenH7.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
+GenH7.menu.usb.CDC=CDC (no generic 'Serial')
+GenH7.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
+GenH7.menu.usb.HID=HID (keyboard and mouse)
+GenH7.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
+GenH7.menu.xusb.FS=Low/Full Speed
+GenH7.menu.xusb.HSFS=High Speed in Full Speed mode
+GenH7.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
+
GenL0.menu.usb.none=None
GenL0.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
GenL0.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
@@ -1781,6 +2483,14 @@ Genericflight.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
Genericflight.menu.xusb.HSFS=High Speed in Full Speed mode
Genericflight.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
+Garatronic.menu.usb.none=None
+Garatronic.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
+Garatronic.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
+Garatronic.menu.usb.CDC=CDC (no generic 'Serial')
+Garatronic.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
+Garatronic.menu.usb.HID=HID (keyboard and mouse)
+Garatronic.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
+
Midatronics.menu.usb.none=None
Midatronics.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
Midatronics.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
@@ -1977,6 +2687,24 @@ GenF4.menu.opt.o3lto.build.flags.optimize=-O3 -flto
GenF4.menu.opt.ogstd=Debug (-g)
GenF4.menu.opt.ogstd.build.flags.optimize=-g -Og
+GenH7.menu.opt.osstd=Smallest (-Os default)
+GenH7.menu.opt.oslto=Smallest (-Os) with LTO
+GenH7.menu.opt.oslto.build.flags.optimize=-Os -flto
+GenH7.menu.opt.o1std=Fast (-O1)
+GenH7.menu.opt.o1std.build.flags.optimize=-O1
+GenH7.menu.opt.o1lto=Fast (-O1) with LTO
+GenH7.menu.opt.o1lto.build.flags.optimize=-O1 -flto
+GenH7.menu.opt.o2std=Faster (-O2)
+GenH7.menu.opt.o2std.build.flags.optimize=-O2
+GenH7.menu.opt.o2lto=Faster (-O2) with LTO
+GenH7.menu.opt.o2lto.build.flags.optimize=-O2 -flto
+GenH7.menu.opt.o3std=Fastest (-O3)
+GenH7.menu.opt.o3std.build.flags.optimize=-O3
+GenH7.menu.opt.o3lto=Fastest (-O3) with LTO
+GenH7.menu.opt.o3lto.build.flags.optimize=-O3 -flto
+GenH7.menu.opt.ogstd=Debug (-g)
+GenH7.menu.opt.ogstd.build.flags.optimize=-g -Og
+
GenL0.menu.opt.osstd=Smallest (-Os default)
GenL0.menu.opt.oslto=Smallest (-Os) with LTO
GenL0.menu.opt.oslto.build.flags.optimize=-Os -flto
@@ -2067,6 +2795,24 @@ Genericflight.menu.opt.o3lto.build.flags.optimize=-O3 -flto
Genericflight.menu.opt.ogstd=Debug (-g)
Genericflight.menu.opt.ogstd.build.flags.optimize=-g -Og
+Garatronic.menu.opt.osstd=Smallest (-Os default)
+Garatronic.menu.opt.oslto=Smallest (-Os) with LTO
+Garatronic.menu.opt.oslto.build.flags.optimize=-Os -flto
+Garatronic.menu.opt.o1std=Fast (-O1)
+Garatronic.menu.opt.o1std.build.flags.optimize=-O1
+Garatronic.menu.opt.o1lto=Fast (-O1) with LTO
+Garatronic.menu.opt.o1lto.build.flags.optimize=-O1 -flto
+Garatronic.menu.opt.o2std=Faster (-O2)
+Garatronic.menu.opt.o2std.build.flags.optimize=-O2
+Garatronic.menu.opt.o2lto=Faster (-O2) with LTO
+Garatronic.menu.opt.o2lto.build.flags.optimize=-O2 -flto
+Garatronic.menu.opt.o3std=Fastest (-O3)
+Garatronic.menu.opt.o3std.build.flags.optimize=-O3
+Garatronic.menu.opt.o3lto=Fastest (-O3) with LTO
+Garatronic.menu.opt.o3lto.build.flags.optimize=-O3 -flto
+Garatronic.menu.opt.ogstd=Debug (-g)
+Garatronic.menu.opt.ogstd.build.flags.optimize=-g -Og
+
Midatronics.menu.opt.osstd=Smallest (-Os default)
Midatronics.menu.opt.oslto=Smallest (-Os) with LTO
Midatronics.menu.opt.oslto.build.flags.optimize=-Os -flto
@@ -2186,6 +2932,16 @@ GenF4.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float
GenF4.menu.rtlib.full=Newlib Standard
GenF4.menu.rtlib.full.build.flags.ldspecs=
+GenH7.menu.rtlib.nano=Newlib Nano (default)
+GenH7.menu.rtlib.nanofp=Newlib Nano + Float Printf
+GenH7.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
+GenH7.menu.rtlib.nanofs=Newlib Nano + Float Scanf
+GenH7.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
+GenH7.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
+GenH7.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
+GenH7.menu.rtlib.full=Newlib Standard
+GenH7.menu.rtlib.full.build.flags.ldspecs=
+
GenL0.menu.rtlib.nano=Newlib Nano (default)
GenL0.menu.rtlib.nanofp=Newlib Nano + Float Printf
GenL0.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
@@ -2236,6 +2992,16 @@ Genericflight.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _prin
Genericflight.menu.rtlib.full=Newlib Standard
Genericflight.menu.rtlib.full.build.flags.ldspecs=
+Garatronic.menu.rtlib.nano=Newlib Nano (default)
+Garatronic.menu.rtlib.nanofp=Newlib Nano + Float Printf
+Garatronic.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
+Garatronic.menu.rtlib.nanofs=Newlib Nano + Float Scanf
+Garatronic.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
+Garatronic.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
+Garatronic.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
+Garatronic.menu.rtlib.full=Newlib Standard
+Garatronic.menu.rtlib.full.build.flags.ldspecs=
+
Midatronics.menu.rtlib.nano=Newlib Nano (default)
Midatronics.menu.rtlib.nanofp=Newlib Nano + Float Printf
Midatronics.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
From f183630475bacdf26a96c44df6f60475ba448c58 Mon Sep 17 00:00:00 2001
From: dds90 <40141422+dds90@users.noreply.github.com>
Date: Wed, 22 Jul 2020 21:04:20 +0200
Subject: [PATCH 5/5] [New variant] STM32F407ZGT6 Mini
https://github.com/stm32duino/Arduino_Core_STM32/issues/635
---
variants/Generic_F407Zx/PeripheralPins.c | 419 +++++++++++++++++++++++
variants/Generic_F407Zx/PinNamesVar.h | 50 +++
variants/Generic_F407Zx/ldscript.ld | 209 +++++++++++
variants/Generic_F407Zx/variant.cpp | 222 ++++++++++++
variants/Generic_F407Zx/variant.h | 223 ++++++++++++
5 files changed, 1123 insertions(+)
create mode 100644 variants/Generic_F407Zx/PeripheralPins.c
create mode 100644 variants/Generic_F407Zx/PinNamesVar.h
create mode 100644 variants/Generic_F407Zx/ldscript.ld
create mode 100644 variants/Generic_F407Zx/variant.cpp
create mode 100644 variants/Generic_F407Zx/variant.h
diff --git a/variants/Generic_F407Zx/PeripheralPins.c b/variants/Generic_F407Zx/PeripheralPins.c
new file mode 100644
index 0000000000..e83fb12e3c
--- /dev/null
+++ b/variants/Generic_F407Zx/PeripheralPins.c
@@ -0,0 +1,419 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2020, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ * Automatically generated from STM32F407Z(E-G)Tx.xml
+ */
+#include "Arduino.h"
+#include "PeripheralPins.h"
+
+/* =====
+ * Note: Commented lines are alternative possibilities which are not used per default.
+ * If you change them, you will have to know what you do
+ * =====
+ */
+
+//*** ADC ***
+
+#ifdef HAL_ADC_MODULE_ENABLED
+WEAK const PinMap PinMap_ADC[] = {
+ {PA_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0
+ // {PA_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC2_IN0
+ // {PA_0, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC3_IN0
+ {PA_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1
+ // {PA_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_IN1
+ // {PA_1, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC3_IN1
+ // {PA_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2
+ {PA_2, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_IN2
+ // {PA_2, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC3_IN2
+ // {PA_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3
+ // {PA_3, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_IN3
+ {PA_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC3_IN3
+ {PA_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4
+ // {PA_4, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_IN4
+ // {PA_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5
+ {PA_5, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
+ {PA_6, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6
+ // {PA_6, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC2_IN6
+ {PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7
+ // {PA_7, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC2_IN7
+ // {PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8
+ {PB_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC2_IN8
+ {PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9
+ // {PB_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC2_IN9
+ // {PC_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10
+ // {PC_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10
+ {PC_0, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC3_IN10
+ // {PC_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11
+ // {PC_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11
+ {PC_1, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC3_IN11
+ // {PC_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12
+ {PC_2, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_IN12
+ // {PC_2, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC3_IN12
+ // {PC_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13
+ // {PC_3, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC2_IN13
+ {PC_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC3_IN13
+ // {PC_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14
+ {PC_4, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_IN14
+ // {PC_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15
+ {PC_5, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_IN15
+ // {PF_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC3_IN9
+ // {PF_4, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC3_IN14
+ // {PF_5, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC3_IN15
+ {PF_6, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_IN4
+ {PF_7, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_IN5
+ {PF_8, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_IN6
+ {PF_9, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC3_IN7
+ // {PF_10, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC3_IN8
+ {NC, NP, 0}
+};
+#endif
+
+//*** DAC ***
+
+#ifdef HAL_DAC_MODULE_ENABLED
+WEAK const PinMap PinMap_DAC[] = {
+ {PA_4, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
+ {PA_5, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2
+ {NC, NP, 0}
+};
+#endif
+
+//*** I2C ***
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SDA[] = {
+ {PB_7, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
+ {PB_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
+ {PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+ // {PC_9, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
+ // {PF_0, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SCL[] = {
+ // {PA_8, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
+ {PB_6, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
+ {PB_8, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
+ {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+ // {PF_1, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** PWM ***
+
+#ifdef HAL_TIM_MODULE_ENABLED
+WEAK const PinMap PinMap_PWM[] = {
+ {PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
+ // {PA_0, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
+ // {PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
+ {PA_1, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
+ {PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
+ // {PA_2, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3
+ // {PA_2, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1
+ {PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
+ // {PA_3, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4
+ // {PA_3, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2
+ {PA_5, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
+ // {PA_5, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
+ {PA_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
+ // {PA_6, TIM13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
+ // {PA_7, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
+ // {PA_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
+ {PA_7, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
+ // {PA_7, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
+ {PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
+ {PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
+ {PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
+ {PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
+ {PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
+ // {PB_0, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
+ // {PB_0, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
+ {PB_0, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
+ {PB_1, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
+ // {PB_1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
+ // {PB_1, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
+ {PB_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
+ {PB_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
+ {PB_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
+ {PB_6, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
+ {PB_7, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
+ {PB_8, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
+ // {PB_8, TIM10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
+ {PB_9, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
+ // {PB_9, TIM11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
+ {PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
+ // {PB_11, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
+ {PB_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
+ // {PB_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
+ // {PB_14, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
+ // {PB_14, TIM12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1
+ // {PB_15, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
+ // {PB_15, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
+ // {PB_15, TIM12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 2, 0)}, // TIM12_CH2
+ // {PC_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
+ {PC_6, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1
+ // {PC_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
+ {PC_7, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2
+ {PC_8, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
+ // {PC_8, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3
+ {PC_9, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
+ // {PC_9, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4
+ {PD_12, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
+ {PD_13, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
+ {PD_14, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
+ {PD_15, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
+ {PE_5, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1
+ {PE_6, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2
+ {PE_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
+ {PE_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
+ {PE_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
+ {PE_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
+ {PE_12, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
+ {PE_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
+ {PE_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
+ {PF_6, TIM10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
+ {PF_7, TIM11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
+ {PF_8, TIM13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
+ {PF_9, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
+ {NC, NP, 0}
+};
+#endif
+
+//*** SERIAL ***
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_TX[] = {
+ // {PA_0, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
+ {PA_2, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PA_9, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+ {PB_6, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+ {PB_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ // {PC_6, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {PC_10, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
+ // {PC_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ {PC_12, UART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
+ {PD_5, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PD_8, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ // {PG_14, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RX[] = {
+ // {PA_1, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
+ {PA_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PA_10, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+ {PB_7, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+ {PB_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ // {PC_7, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {PC_11, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
+ // {PC_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ {PD_2, UART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
+ {PD_6, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PD_9, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ // {PG_9, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RTS[] = {
+ {PA_1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PA_12, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+ {PB_14, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ // {PD_4, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ // {PD_12, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ {PG_8, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {PG_12, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_CTS[] = {
+ {PA_0, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PA_11, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+ {PB_13, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ {PD_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PD_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+ {PG_13, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ // {PG_15, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** SPI ***
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MOSI[] = {
+ {PA_7, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ // {PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ {PB_5, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ // {PC_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ // {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MISO[] = {
+ {PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ // {PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ {PB_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ // {PC_2, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ // {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SCLK[] = {
+ {PA_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ // {PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ {PB_3, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ // {PB_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ // {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SSEL[] = {
+ {PA_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ // {PA_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ // {PA_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
+ {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
+ // {PB_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** CAN ***
+
+#ifdef HAL_CAN_MODULE_ENABLED
+WEAK const PinMap PinMap_CAN_RD[] = {
+ {PA_11, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)},
+ // {PB_5, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)},
+ {PB_8, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)},
+ // {PB_12, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)},
+ {PD_0, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_CAN_MODULE_ENABLED
+WEAK const PinMap PinMap_CAN_TD[] = {
+ {PA_12, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)},
+ // {PB_6, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)},
+ {PB_9, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)},
+ // {PB_13, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)},
+ {PD_1, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** ETHERNET ***
+
+#ifdef HAL_ETH_MODULE_ENABLED
+WEAK const PinMap PinMap_Ethernet[] = {
+ // {PA_0, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_CRS
+ // {PA_1, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_REF_CLK|ETH_RX_CLK
+ // {PA_2, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_MDIO
+ // {PA_3, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_COL
+ // {PA_7, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_CRS_DV|ETH_RX_DV
+ // {PB_0, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_RXD2
+ // {PB_1, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_RXD3
+ // {PB_5, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_PPS_OUT
+ // {PB_8, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TXD3
+ // {PB_10, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_RX_ER
+ // {PB_11, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TX_EN
+ // {PB_12, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TXD0
+ // {PB_13, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TXD1
+ // {PC_1, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_MDC
+ // {PC_2, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TXD2
+ // {PC_3, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TX_CLK
+ // {PC_4, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_RXD0
+ // {PC_5, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_RXD1
+ // {PE_2, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TXD3
+ // {PG_8, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_PPS_OUT
+ // {PG_11, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TX_EN
+ // {PG_13, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TXD0
+ // {PG_14, ETH, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_ETH)}, // ETH_TXD1
+ // {NC, NP, 0}
+};
+#endif
+
+//*** No QUADSPI ***
+
+//*** USB ***
+
+#ifdef HAL_PCD_MODULE_ENABLED
+WEAK const PinMap PinMap_USB_OTG_FS[] = {
+ // {PA_8, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_SOF
+ // {PA_9, USB_OTG_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_FS_VBUS
+ // {PA_10, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_ID
+ // {PA_11, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DM
+ {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_PCD_MODULE_ENABLED
+WEAK const PinMap PinMap_USB_OTG_HS[] = {
+#ifdef USE_USB_HS_IN_FS
+ // {PA_4, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_SOF
+ // {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_ID
+ // {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS
+ // {PB_14, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DM
+ // {PB_15, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DP
+#else
+ // {PA_3, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D0
+ // {PA_5, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_CK
+ // {PB_0, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D1
+ // {PB_1, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D2
+ // {PB_5, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D7
+ // {PB_10, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D3
+ // {PB_11, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D4
+ // {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D5
+ // {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D6
+ // {PC_0, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_STP
+ // {PC_2, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_DIR
+ // {PC_3, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_NXT
+#endif /* USE_USB_HS_IN_FS */
+ {NC, NP, 0}
+};
+#endif
+
+//*** SD ***
+
+#ifdef HAL_SD_MODULE_ENABLED
+WEAK const PinMap PinMap_SD[] = {
+ // {PB_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D4
+ // {PB_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D5
+ // {PC_6, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D6
+ // {PC_7, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D7
+ {PC_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D0
+ {PC_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D1
+ {PC_10, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D2
+ {PC_11, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D3
+ {PC_12, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CK
+ {PD_2, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CMD
+ {NC, NP, 0}
+};
+#endif
\ No newline at end of file
diff --git a/variants/Generic_F407Zx/PinNamesVar.h b/variants/Generic_F407Zx/PinNamesVar.h
new file mode 100644
index 0000000000..82ce190792
--- /dev/null
+++ b/variants/Generic_F407Zx/PinNamesVar.h
@@ -0,0 +1,50 @@
+/* SYS_WKUP */
+#ifdef PWR_WAKEUP_PIN1
+ SYS_WKUP1 = PA_0,
+#endif
+#ifdef PWR_WAKEUP_PIN2
+ SYS_WKUP2 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN3
+ SYS_WKUP3 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN4
+ SYS_WKUP4 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN5
+ SYS_WKUP5 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN6
+ SYS_WKUP6 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN7
+ SYS_WKUP7 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN8
+ SYS_WKUP8 = NC,
+#endif
+/* USB */
+#ifdef USBCON
+ USB_OTG_FS_SOF = PA_8,
+ USB_OTG_FS_VBUS = PA_9,
+ USB_OTG_FS_ID = PA_10,
+ USB_OTG_FS_DM = PA_11,
+ USB_OTG_FS_DP = PA_12,
+ USB_OTG_HS_ULPI_D0 = PA_3,
+ USB_OTG_HS_SOF = PA_4,
+ USB_OTG_HS_ULPI_CK = PA_5,
+ USB_OTG_HS_ULPI_D1 = PB_0,
+ USB_OTG_HS_ULPI_D2 = PB_1,
+ USB_OTG_HS_ULPI_D7 = PB_5,
+ USB_OTG_HS_ULPI_D3 = PB_10,
+ USB_OTG_HS_ULPI_D4 = PB_11,
+ USB_OTG_HS_ID = PB_12,
+ USB_OTG_HS_ULPI_D5 = PB_12,
+ USB_OTG_HS_ULPI_D6 = PB_13,
+ USB_OTG_HS_VBUS = PB_13,
+ USB_OTG_HS_DM = PB_14,
+ USB_OTG_HS_DP = PB_15,
+ USB_OTG_HS_ULPI_STP = PC_0,
+ USB_OTG_HS_ULPI_DIR = PC_2,
+ USB_OTG_HS_ULPI_NXT = PC_3,
+#endif
\ No newline at end of file
diff --git a/variants/Generic_F407Zx/ldscript.ld b/variants/Generic_F407Zx/ldscript.ld
new file mode 100644
index 0000000000..96092c7948
--- /dev/null
+++ b/variants/Generic_F407Zx/ldscript.ld
@@ -0,0 +1,209 @@
+/*
+******************************************************************************
+**
+
+** File : LinkerScript.ld
+**
+** Author : Auto-generated by System Workbench for STM32
+**
+** Abstract : Linker script for STM32F407ZGTx series
+** 1024Kbytes FLASH and 192Kbytes RAM
+**
+** Set heap size, stack size and stack location according
+** to application requirements.
+**
+** Set memory bank area and size if external memory is used.
+**
+** Target : STMicroelectronics STM32
+**
+** Distribution: The file is distributed “as is,” without any warranty
+** of any kind.
+**
+*****************************************************************************
+** @attention
+**
+** © COPYRIGHT(c) 2019 STMicroelectronics
+**
+** Redistribution and use in source and binary forms, with or without modification,
+** are permitted provided that the following conditions are met:
+** 1. Redistributions of source code must retain the above copyright notice,
+** this list of conditions and the following disclaimer.
+** 2. Redistributions in binary form must reproduce the above copyright notice,
+** this list of conditions and the following disclaimer in the documentation
+** and/or other materials provided with the distribution.
+** 3. Neither the name of STMicroelectronics nor the names of its contributors
+** may be used to endorse or promote products derived from this software
+** without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**
+*****************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = 0x20020000; /* end of RAM */
+/* Generate a link error if heap and stack don't fit into RAM */
+_Min_Heap_Size = 0x200; /* required amount of heap */
+_Min_Stack_Size = 0x400; /* required amount of stack */
+
+/* Specify the memory areas */
+MEMORY
+{
+RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
+CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
+FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
+}
+
+/* Define output sections */
+SECTIONS
+{
+ /* The startup code goes first into FLASH */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >FLASH
+
+ /* The program code and other data goes into FLASH */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >FLASH
+
+ /* Constant data goes into FLASH */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
+ .ARM : {
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ } >FLASH
+
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } >FLASH
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } >FLASH
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } >FLASH
+
+ /* used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections goes into RAM, load LMA copy after code */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+ } >RAM AT> FLASH
+
+ _siccmram = LOADADDR(.ccmram);
+
+ /* CCM-RAM section
+ *
+ * IMPORTANT NOTE!
+ * If initialized variables will be placed in this section,
+ * the startup code needs to be modified to copy the init-values.
+ */
+ .ccmram :
+ {
+ . = ALIGN(4);
+ _sccmram = .; /* create a global symbol at ccmram start */
+ *(.ccmram)
+ *(.ccmram*)
+
+ . = ALIGN(4);
+ _eccmram = .; /* create a global symbol at ccmram end */
+ } >CCMRAM AT> FLASH
+
+
+ /* Uninitialized data section */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss secion */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM
+
+ /* User_heap_stack section, used to check that there is enough RAM left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM
+
+
+
+ /* Remove information from the standard libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
+
+
diff --git a/variants/Generic_F407Zx/variant.cpp b/variants/Generic_F407Zx/variant.cpp
new file mode 100644
index 0000000000..65d3e356c9
--- /dev/null
+++ b/variants/Generic_F407Zx/variant.cpp
@@ -0,0 +1,222 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ */
+
+#include "pins_arduino.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Digital PinName array
+const PinName digitalPin[] = {
+ PA_0, //D0
+ PA_1, //D1
+ PA_2, //D2
+ PA_3, //D3
+ PA_4, //D4
+ PA_5, //D5
+ PA_6, //D6
+ PA_7, //D7
+ PA_8, //D8
+ PA_9, //D9
+ PA_10, //D10
+ PA_11, //D11
+ PA_12, //D12
+ PA_13, //D13
+ PA_14, //D14
+ PA_15, //D15
+
+ PB_0, //D16
+ PB_1, //D17
+ PB_2, //D18
+ PB_3, //D19
+ PB_4, //D20
+ PB_5, //D21
+ PB_6, //D22
+ PB_7, //D23
+ PB_8, //D24
+ PB_9, //D25
+ PB_10, //D26
+ PB_11, //D27
+ PB_12, //D28
+ PB_13, //D29
+ PB_14, //D30
+ PB_15, //D31
+
+ PC_0, //D32
+ PC_1, //D33
+ PC_2, //D34
+ PC_3, //D35
+ PC_4, //D36
+ PC_5, //D37
+ PC_6, //D38
+ PC_7, //D39
+ PC_8, //D40
+ PC_9, //D41
+ PC_10, //D42
+ PC_11, //D43
+ PC_12, //D44
+ PC_13, //D45
+ PC_14, //D46
+ PC_15, //D47
+
+ PD_0, //D48
+ PD_1, //D49
+ PD_2, //D50
+ PD_3, //D51
+ PD_4, //D52
+ PD_5, //D53
+ PD_6, //D54
+ PD_7, //D55
+ PD_8, //D56
+ PD_9, //D57
+ PD_10, //D58
+ PD_11, //D59
+ PD_12, //D60
+ PD_13, //D61
+ PD_14, //D62
+ PD_15, //D63
+
+ PE_0, //D64
+ PE_1, //D65
+ PE_2, //D66
+ PE_3, //D67
+ PE_4, //D68
+ PE_5, //D69
+ PE_6, //D70
+ PE_7, //D71
+ PE_8, //D72
+ PE_9, //D73
+ PE_10, //D74
+ PE_11, //D75
+ PE_12, //D76
+ PE_13, //D77
+ PE_14, //D78
+ PE_15, //D79
+
+ PF_0, //D80
+ PF_1, //D81
+ PF_2, //D82
+ PF_3, //D83
+ PF_4, //D84
+ PF_5, //D85
+ PF_6, //D86
+ PF_7, //D87
+ PF_8, //D88
+ PF_9, //D89
+ PF_10, //D90
+ PF_11, //D91
+ PF_12, //D92
+ PF_13, //D93
+ PF_14, //D94
+ PF_15, //D95
+
+ PG_0, //D96
+ PG_1, //D97
+ PG_2, //D98
+ PG_3, //D99
+ PG_4, //D100
+ PG_5, //D101
+ PG_6, //D102
+ PG_7, //D103
+ PG_8, //D104
+ PG_9, //D105
+ PG_10, //D106
+ PG_11, //D107
+ PG_12, //D108
+ PG_13, //D109
+ PG_14, //D110
+ PG_15 //D111
+};
+
+// Analog (Ax) pin number array
+const uint32_t analogInputPin[] = {
+ 0, // A0, PA0
+ 1, // A1, PA1
+ 2, // A2, PA2
+ 3, // A3, PA3
+ 4, // A4, PA4
+ 5, // A5, PA5
+ 6, // A6, PA6
+ 7, // A7, PA7
+ 16, // A8, PB0
+ 17, // A9, PB1
+ 32, // A10, PC0
+ 33, // A11, PC1
+ 34, // A12, PC2
+ 35, // A13, PC3
+ 36, // A14, PC4
+ 37, // A15, PC5
+ 86, // A16, PF6
+ 87, // A17, PF7
+ 88, // A18, PF8
+ 89, // A19, PF9
+ 90 // A20, PF10
+};
+
+/******************************************************************************/
+/* PLL (clocked by HSE) used as System clock source */
+/******************************************************************************/
+/**
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+
+ /** Configure the main internal regulator output voltage
+ */
+ __HAL_RCC_PWR_CLK_ENABLE();
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+ /** Initializes the CPU, AHB and APB busses clocks
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.LSEState = RCC_LSE_ON;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLM = 25;
+ RCC_OscInitStruct.PLL.PLLN = 336;
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ RCC_OscInitStruct.PLL.PLLQ = 7;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Initializes the CPU, AHB and APB busses clocks
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
+ PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/variants/Generic_F407Zx/variant.h b/variants/Generic_F407Zx/variant.h
new file mode 100644
index 0000000000..5a7d02302a
--- /dev/null
+++ b/variants/Generic_F407Zx/variant.h
@@ -0,0 +1,223 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ */
+
+#ifndef _VARIANT_ARDUINO_STM32_
+#define _VARIANT_ARDUINO_STM32_
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*----------------------------------------------------------------------------
+ * Pins
+ *----------------------------------------------------------------------------*/
+#define PA0 A0
+#define PA1 A1
+#define PA2 A2
+#define PA3 A3
+#define PA4 A4
+#define PA5 A5
+#define PA6 A6
+#define PA7 A7
+#define PA8 8
+#define PA9 9
+#define PA10 10
+#define PA11 11
+#define PA12 12
+#define PA13 13
+#define PA14 14
+#define PA15 15
+
+#define PB0 A8
+#define PB1 A9
+#define PB2 18
+#define PB3 19
+#define PB4 20
+#define PB5 21
+#define PB6 22
+#define PB7 23
+#define PB8 24
+#define PB9 25
+#define PB10 26
+#define PB11 27
+#define PB12 28
+#define PB13 29
+#define PB14 30
+#define PB15 31
+
+#define PC0 A10
+#define PC1 A11
+#define PC2 A12
+#define PC3 A13
+#define PC4 A14
+#define PC5 A15
+#define PC6 38
+#define PC7 39
+#define PC8 40
+#define PC9 41
+#define PC10 42
+#define PC11 43
+#define PC12 44
+#define PC13 45
+#define PC14 46
+#define PC15 47
+
+#define PD0 48
+#define PD1 49
+#define PD2 50
+#define PD3 51
+#define PD4 52
+#define PD5 53
+#define PD6 54
+#define PD7 55
+#define PD8 56
+#define PD9 57
+#define PD10 58
+#define PD11 59
+#define PD12 60
+#define PD13 61
+#define PD14 62
+#define PD15 63
+
+#define PE0 64
+#define PE1 65
+#define PE2 66
+#define PE3 67
+#define PE4 68
+#define PE5 69
+#define PE6 70
+#define PE7 71
+#define PE8 72
+#define PE9 73
+#define PE10 74
+#define PE11 75
+#define PE12 76
+#define PE13 77
+#define PE14 78
+#define PE15 79
+
+#define PF0 80
+#define PF1 81
+#define PF2 82
+#define PF3 83
+#define PF4 84
+#define PF5 85
+#define PF6 A16
+#define PF7 A17
+#define PF8 A18
+#define PF9 A19
+#define PF10 A20
+#define PF11 91
+#define PF12 92
+#define PF13 93
+#define PF14 94
+#define PF15 95
+
+#define PG0 96
+#define PG1 97
+#define PG2 98
+#define PG3 99
+#define PG4 100
+#define PG5 101
+#define PG6 102
+#define PG7 103
+#define PG8 104
+#define PG9 105
+#define PG10 106
+#define PG11 107
+#define PG12 108
+#define PG13 109
+#define PG14 110
+#define PG15 111
+
+// This must be a literal
+#define NUM_DIGITAL_PINS 112
+#define NUM_ANALOG_INPUTS 21
+
+// On-board LED pin number
+//#ifdef ARDUINO_VCCGND_F407ZGT6_MINI
+#define LED_BUILTIN PG15
+//#endif
+
+// SPI Definitions
+#define PIN_SPI_SS PC4
+#define PIN_SPI_MOSI PA7
+#define PIN_SPI_MISO PA6
+#define PIN_SPI_SCK PA5
+
+// I2C Definitions
+#define PIN_WIRE_SDA PB7
+#define PIN_WIRE_SCL PB6
+
+// Timer Definitions (optional)
+// Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin
+#define TIMER_TONE TIM6
+#define TIMER_SERVO TIM7
+
+// UART Definitions
+// Define here Serial instance number to map on Serial generic name
+#define SERIAL_UART_INSTANCE 1
+
+// Default pin used for 'Serial' instance (ex: ST-Link)
+// Mandatory for Firmata
+#define PIN_SERIAL_RX PA10
+#define PIN_SERIAL_TX PA9
+
+// Default pin used for 'Serial2' instance
+#define PIN_SERIAL2_RX PA3
+#define PIN_SERIAL2_TX PA2
+
+// Default pin used for 'Serial3' instance
+#define PIN_SERIAL3_RX PB11
+#define PIN_SERIAL3_TX PB10
+
+/* Extra HAL modules */
+//#define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#define HSE_VALUE 25000000U
+#define HAL_DAC_MODULE_ENABLED
+
+//#ifdef ARDUINO_VCCGND_F407ZGT6_MINI
+#define HAL_SD_MODULE_ENABLED
+// SD card slot Definitions
+// SD detect signal can be defined if required
+#define SD_DETECT_PIN PF10
+//#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+/*----------------------------------------------------------------------------
+ * Arduino objects - C++ only
+ *----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+// These serial port names are intended to allow libraries and architecture-neutral
+// sketches to automatically default to the correct port name for a particular type
+// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
+// the first hardware serial port whose RX/TX pins are not dedicated to another use.
+//
+// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
+//
+// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
+//
+// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
+//
+// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
+//
+// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
+// pins are NOT connected to anything by default.
+#define SERIAL_PORT_MONITOR Serial
+#define SERIAL_PORT_HARDWARE Serial1
+#endif
+
+#endif /* _VARIANT_ARDUINO_STM32_ */