diff --git a/.github/workflows/test-builds.yml b/.github/workflows/test-builds.yml
index 97a6534f8..5429f3eb9 100644
--- a/.github/workflows/test-builds.yml
+++ b/.github/workflows/test-builds.yml
@@ -56,29 +56,31 @@ jobs:
# STM32F1 (Maple) Environments
- - STM32F103RC_btt
- - STM32F103RC_btt_USB
- - STM32F103RE_btt
- - STM32F103RE_btt_USB
+ #- STM32F103RC_btt_maple
+ - STM32F103RC_btt_USB_maple
- STM32F103RC_fysetc
- STM32F103RC_meeb
- jgaurora_a5s_a1
- STM32F103VE_longer
- - mks_robin
+ #- mks_robin_maple
- mks_robin_lite
- mks_robin_pro
- - STM32F103RET6_creality
- - mks_robin_nano35
+ #- mks_robin_nano35_maple
+ #- STM32F103RET6_creality_maple
# STM32 (ST) Environments
- - STM32F103RC_btt_stm32
+ - STM32F103RC_btt
+ #- STM32F103RC_btt_USB
+ - STM32F103RE_btt
+ - STM32F103RE_btt_USB
+ - STM32F103RET6_creality
- STM32F407VE_black
- STM32F401VE_STEVAL
- BIGTREE_BTT002
- BIGTREE_SKR_PRO
- BIGTREE_GTR_V1_0
- - mks_robin_stm32
+ - mks_robin
- ARMED
- FYSETC_S6
- STM32F070CB_malyan
@@ -88,7 +90,7 @@ jobs:
- rumba32
- LERDGEX
- LERDGEK
- - mks_robin_nano35_stm32
+ - mks_robin_nano35
- NUCLEO_F767ZI
- REMRAM_V1
- BTT_SKR_SE_BX
diff --git a/Marlin/src/HAL/STM32/eeprom_bl24cxx.cpp b/Marlin/src/HAL/STM32/eeprom_bl24cxx.cpp
new file mode 100644
index 000000000..165b3c6ba
--- /dev/null
+++ b/Marlin/src/HAL/STM32/eeprom_bl24cxx.cpp
@@ -0,0 +1,82 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#ifdef STM32F1
+
+/**
+ * PersistentStore for Arduino-style EEPROM interface
+ * with simple implementations supplied by Marlin.
+ */
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(IIC_BL24CXX_EEPROM)
+
+#include "../shared/eeprom_if.h"
+#include "../shared/eeprom_api.h"
+
+//
+// PersistentStore
+//
+
+#ifndef MARLIN_EEPROM_SIZE
+ #error "MARLIN_EEPROM_SIZE is required for IIC_BL24CXX_EEPROM."
+#endif
+
+size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
+
+bool PersistentStore::access_start() { eeprom_init(); return true; }
+bool PersistentStore::access_finish() { return true; }
+
+bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
+ uint16_t written = 0;
+ while (size--) {
+ uint8_t v = *value;
+ uint8_t * const p = (uint8_t * const)pos;
+ if (v != eeprom_read_byte(p)) { // EEPROM has only ~100,000 write cycles, so only write bytes that have changed!
+ eeprom_write_byte(p, v);
+ if (++written & 0x7F) delay(2); else safe_delay(2); // Avoid triggering watchdog during long EEPROM writes
+ if (eeprom_read_byte(p) != v) {
+ SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
+ return true;
+ }
+ }
+ crc16(crc, &v, 1);
+ pos++;
+ value++;
+ }
+ return false;
+}
+
+bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
+ do {
+ uint8_t * const p = (uint8_t * const)pos;
+ uint8_t c = eeprom_read_byte(p);
+ if (writing) *value = c;
+ crc16(crc, &c, 1);
+ pos++;
+ value++;
+ } while (--size);
+ return false;
+}
+
+#endif // IIC_BL24CXX_EEPROM
+#endif // STM32F1
diff --git a/Marlin/src/HAL/STM32/eeprom_if_iic.cpp b/Marlin/src/HAL/STM32/eeprom_if_iic.cpp
new file mode 100644
index 000000000..5c6cc802a
--- /dev/null
+++ b/Marlin/src/HAL/STM32/eeprom_if_iic.cpp
@@ -0,0 +1,54 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+/**
+ * Platform-independent Arduino functions for I2C EEPROM.
+ * Enable USE_SHARED_EEPROM if not supplied by the framework.
+ */
+
+#ifdef STM32F1
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(IIC_BL24CXX_EEPROM)
+
+#include "../../libs/BL24CXX.h"
+#include "../shared/eeprom_if.h"
+
+void eeprom_init() { BL24CXX::init(); }
+
+// ------------------------
+// Public functions
+// ------------------------
+
+void eeprom_write_byte(uint8_t *pos, uint8_t value) {
+ const unsigned eeprom_address = (unsigned)pos;
+ return BL24CXX::writeOneByte(eeprom_address, value);
+}
+
+uint8_t eeprom_read_byte(uint8_t *pos) {
+ const unsigned eeprom_address = (unsigned)pos;
+ return BL24CXX::readOneByte(eeprom_address);
+}
+
+#endif // IIC_BL24CXX_EEPROM
+#endif // STM32F1
diff --git a/Marlin/src/libs/BL24CXX.cpp b/Marlin/src/libs/BL24CXX.cpp
index 8de320d57..adcd5ed89 100644
--- a/Marlin/src/libs/BL24CXX.cpp
+++ b/Marlin/src/libs/BL24CXX.cpp
@@ -27,7 +27,12 @@
*/
#include "BL24CXX.h"
-#include
+#ifdef __STM32F1__
+ #include
+#else
+ #include "../HAL/shared/Delay.h"
+ #define delay_us(n) DELAY_US(n)
+#endif
#ifndef EEPROM_WRITE_DELAY
#define EEPROM_WRITE_DELAY 10
@@ -37,8 +42,13 @@
#endif
// IO direction setting
-#define SDA_IN() do{ PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH &= 0XFFFF0FFF; PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH |= 8 << 12; }while(0)
-#define SDA_OUT() do{ PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH &= 0XFFFF0FFF; PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH |= 3 << 12; }while(0)
+#ifdef __STM32F1__
+ #define SDA_IN() do{ PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH &= 0XFFFF0FFF; PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH |= 8 << 12; }while(0)
+ #define SDA_OUT() do{ PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH &= 0XFFFF0FFF; PIN_MAP[IIC_EEPROM_SDA].gpio_device->regs->CRH |= 3 << 12; }while(0)
+#elif STM32F1
+ #define SDA_IN() SET_INPUT(IIC_EEPROM_SDA)
+ #define SDA_OUT() SET_OUTPUT(IIC_EEPROM_SDA)
+#endif
// IO ops
#define IIC_SCL_0() WRITE(IIC_EEPROM_SCL, LOW)
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index 3176b5e83..b4c79b322 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -489,13 +489,13 @@
#elif MB(CHITU3D)
#include "stm32f1/pins_CHITU3D.h" // STM32F1 env:STM32F103RE
#elif MB(MKS_ROBIN)
- #include "stm32f1/pins_MKS_ROBIN.h" // STM32F1 env:mks_robin env:mks_robin_stm32
+ #include "stm32f1/pins_MKS_ROBIN.h" // STM32F1 env:mks_robin env:mks_robin_maple
#elif MB(MKS_ROBIN_MINI)
#include "stm32f1/pins_MKS_ROBIN_MINI.h" // STM32F1 env:mks_robin_mini
#elif MB(MKS_ROBIN_NANO)
- #include "stm32f1/pins_MKS_ROBIN_NANO.h" // STM32F1 env:mks_robin_nano35 env:mks_robin_nano35_stm32
+ #include "stm32f1/pins_MKS_ROBIN_NANO.h" // STM32F1 env:mks_robin_nano35 env:mks_robin_nano35_maple
#elif MB(MKS_ROBIN_NANO_V2)
- #include "stm32f1/pins_MKS_ROBIN_NANO_V2.h" // STM32F1 env:mks_robin_nano35 env:mks_robin_nano35_stm32
+ #include "stm32f1/pins_MKS_ROBIN_NANO_V2.h" // STM32F1 env:mks_robin_nano35 env:mks_robin_nano35_maple
#elif MB(MKS_ROBIN_LITE)
#include "stm32f1/pins_MKS_ROBIN_LITE.h" // STM32F1 env:mks_robin_lite
#elif MB(MKS_ROBIN_LITE3)
@@ -513,17 +513,17 @@
#elif MB(MKS_ROBIN_E3P)
#include "stm32f1/pins_MKS_ROBIN_E3P.h" // STM32F1 env:mks_robin_e3p
#elif MB(BTT_SKR_MINI_V1_1)
- #include "stm32f1/pins_BTT_SKR_MINI_V1_1.h" // STM32F1 env:STM32F103RC_btt_stm32 env:STM32F103RC_btt_512K_stm32 env:STM32F103RC_btt_USB_stm32 env:STM32F103RC_btt_512K_USB_stm32 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_USB env:STM32F103RC_btt_512K_USB
+ #include "stm32f1/pins_BTT_SKR_MINI_V1_1.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_maple env:STM32F103RC_btt_512K_maple env:STM32F103RC_btt_USB_maple env:STM32F103RC_btt_512K_USB_maple
#elif MB(BTT_SKR_MINI_E3_V1_0)
- #include "stm32f1/pins_BTT_SKR_MINI_E3_V1_0.h" // STM32F1 env:STM32F103RC_btt_stm32 env:STM32F103RC_btt_512K_stm32 env:STM32F103RC_btt_USB_stm32 env:STM32F103RC_btt_512K_USB_stm32 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_USB env:STM32F103RC_btt_512K_USB
+ #include "stm32f1/pins_BTT_SKR_MINI_E3_V1_0.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_maple env:STM32F103RC_btt_512K_maple env:STM32F103RC_btt_USB_maple env:STM32F103RC_btt_512K_USB_maple
#elif MB(BTT_SKR_MINI_E3_V1_2)
- #include "stm32f1/pins_BTT_SKR_MINI_E3_V1_2.h" // STM32F1 env:STM32F103RC_btt_stm32 env:STM32F103RC_btt_512K_stm32 env:STM32F103RC_btt_USB_stm32 env:STM32F103RC_btt_512K_USB_stm32 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_USB env:STM32F103RC_btt_512K_USB
+ #include "stm32f1/pins_BTT_SKR_MINI_E3_V1_2.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_maple env:STM32F103RC_btt_512K_maple env:STM32F103RC_btt_USB_maple env:STM32F103RC_btt_512K_USB_maple
#elif MB(BTT_SKR_MINI_E3_V2_0)
- #include "stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h" // STM32F1 env:STM32F103RC_btt_stm32 env:STM32F103RC_btt_512K_stm32 env:STM32F103RC_btt_USB_stm32 env:STM32F103RC_btt_512K_USB_stm32 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_USB env:STM32F103RC_btt_512K_USB
+ #include "stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_maple env:STM32F103RC_btt_512K_maple env:STM32F103RC_btt_USB_maple env:STM32F103RC_btt_512K_USB_maple
#elif MB(BTT_SKR_MINI_MZ_V1_0)
- #include "stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h" // STM32F1 env:STM32F103RC_btt_stm32 env:STM32F103RC_btt_512K_stm32 env:STM32F103RC_btt_USB_stm32 env:STM32F103RC_btt_512K_USB_stm32 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_USB env:STM32F103RC_btt_512K_USB
+ #include "stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_maple env:STM32F103RC_btt_512K_maple env:STM32F103RC_btt_USB_maple env:STM32F103RC_btt_512K_USB_maple
#elif MB(BTT_SKR_E3_DIP)
- #include "stm32f1/pins_BTT_SKR_E3_DIP.h" // STM32F1 env:STM32F103RE_btt env:STM32F103RE_btt_USB env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_USB env:STM32F103RC_btt_512K_USB
+ #include "stm32f1/pins_BTT_SKR_E3_DIP.h" // STM32F1 env:STM32F103RE_btt env:STM32F103RE_btt_USB env:STM32F103RC_btt env:STM32F103RC_btt_512K
#elif MB(BTT_SKR_CR6)
#include "stm32f1/pins_BTT_SKR_CR6.h" // STM32F1 env:STM32F103RE_btt env:STM32F103RE_btt_USB
#elif MB(JGAURORA_A5S_A1)
@@ -543,17 +543,17 @@
#elif MB(CHITU3D_V6)
#include "stm32f1/pins_CHITU3D_V6.h" // STM32F1 env:chitu_f103
#elif MB(CREALITY_V4)
- #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality
+ #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple
#elif MB(CREALITY_V4210)
- #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RET6_creality
+ #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple
#elif MB(CREALITY_V427)
- #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RET6_creality
+ #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple
#elif MB(CREALITY_V431)
- #include "stm32f1/pins_CREALITY_V431.h" // STM32F1 env:STM32F103RET6_creality
+ #include "stm32f1/pins_CREALITY_V431.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple
#elif MB(CREALITY_V452)
- #include "stm32f1/pins_CREALITY_V452.h" // STM32F1 env:STM32F103RET6_creality
+ #include "stm32f1/pins_CREALITY_V452.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple
#elif MB(CREALITY_V453)
- #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RET6_creality
+ #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple
#elif MB(TRIGORILLA_PRO)
#include "stm32f1/pins_TRIGORILLA_PRO.h" // STM32F1 env:trigorilla_pro
#elif MB(FLY_MINI)
diff --git a/Marlin/src/pins/stm32f1/env_validate.h b/Marlin/src/pins/stm32f1/env_validate.h
index 62ccf7edc..2e7b78517 100644
--- a/Marlin/src/pins/stm32f1/env_validate.h
+++ b/Marlin/src/pins/stm32f1/env_validate.h
@@ -21,6 +21,6 @@
*/
#pragma once
-#if NOT_TARGET(__STM32F1__)
+#if NOT_TARGET(__STM32F1__, STM32F1)
#error "Oops! Select an STM32F1 board in 'Tools > Board.'"
#endif
diff --git a/buildroot/share/PlatformIO/scripts/mks_encrypt.py b/buildroot/share/PlatformIO/scripts/mks_encrypt.py
index 0c622704e..59322a638 100644
--- a/buildroot/share/PlatformIO/scripts/mks_encrypt.py
+++ b/buildroot/share/PlatformIO/scripts/mks_encrypt.py
@@ -2,9 +2,9 @@
# buildroot/share/PlatformIO/scripts/mks_encrypt.py
#
# Apply encryption and save as 'build.firmware' for these environments:
-# - env:mks_robin_stm32
+# - env:mks_robin
# - env:flsun_hispeedv1
-# - env:mks_robin_nano35_stm32
+# - env:mks_robin_nano35
#
Import("env")
diff --git a/buildroot/tests/STM32F103RC_btt_USB b/buildroot/tests/STM32F103RC_btt_USB
index fb0f2f5bd..8381de0ea 100755
--- a/buildroot/tests/STM32F103RC_btt_USB
+++ b/buildroot/tests/STM32F103RC_btt_USB
@@ -10,7 +10,7 @@ set -e
# Build with the default configurations
#
restore_configs
-opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1 BAUDRATE_2 115200
+opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1
exec_test $1 $2 "BigTreeTech SKR Mini v1.1 - Basic Configuration" "$3"
# clean up
diff --git a/buildroot/tests/STM32F103RC_btt_USB_stm32 b/buildroot/tests/STM32F103RC_btt_USB_maple
similarity index 71%
rename from buildroot/tests/STM32F103RC_btt_USB_stm32
rename to buildroot/tests/STM32F103RC_btt_USB_maple
index 8381de0ea..eeb460911 100755
--- a/buildroot/tests/STM32F103RC_btt_USB_stm32
+++ b/buildroot/tests/STM32F103RC_btt_USB_maple
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# Build tests for STM32F103RC BigTreeTech (SKR Mini v1.1)
+# Build tests for STM32F103RC BigTreeTech (SKR Mini v1.1) with LibMaple STM32F1 HAL
#
# exit on first failure
@@ -10,7 +10,7 @@ set -e
# Build with the default configurations
#
restore_configs
-opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1
+opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1 BAUDRATE_2 115200
exec_test $1 $2 "BigTreeTech SKR Mini v1.1 - Basic Configuration" "$3"
# clean up
diff --git a/buildroot/tests/STM32F103RC_btt_stm32 b/buildroot/tests/STM32F103RC_btt_maple
similarity index 84%
rename from buildroot/tests/STM32F103RC_btt_stm32
rename to buildroot/tests/STM32F103RC_btt_maple
index e76060aee..e74e59021 100755
--- a/buildroot/tests/STM32F103RC_btt_stm32
+++ b/buildroot/tests/STM32F103RC_btt_maple
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# Build tests for STM32F103RC BigTreeTech (SKR Mini E3)
+# Build tests for STM32F103RC BigTreeTech (SKR Mini E3) with LibMaple STM32F1 HAL
#
# exit on first failure
diff --git a/buildroot/tests/mks_robin b/buildroot/tests/mks_robin
index 652147f86..e250dceca 100755
--- a/buildroot/tests/mks_robin
+++ b/buildroot/tests/mks_robin
@@ -1,22 +1,13 @@
#!/usr/bin/env bash
#
-# Build tests for MKS Robin
-# (STM32F1 genericSTM32F103ZE)
+# Build tests for MKS Robin (HAL/STM32)
#
# exit on first failure
set -e
use_example_configs Mks/Robin
-exec_test $1 $2 "MKS Robin config (FSMC Color UI)" "$3"
-
-#
-# MKS Robin LVGL FSMC
-#
-use_example_configs Mks/Robin
-opt_disable TFT_CLASSIC_UI TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
-opt_enable TFT_LVGL_UI TFT_RES_480x320
-exec_test $1 $2 "MKS Robin nano v1.2 LVGL FSMC" "$3"
+exec_test $1 $2 "MKS Robin base configuration" "$3"
# cleanup
restore_configs
diff --git a/buildroot/tests/mks_robin_maple b/buildroot/tests/mks_robin_maple
new file mode 100755
index 000000000..fcb511830
--- /dev/null
+++ b/buildroot/tests/mks_robin_maple
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+#
+# Build tests for MKS Robin with LibMaple STM32F1 HAL
+# (STM32F1 genericSTM32F103ZE)
+#
+
+# exit on first failure
+set -e
+
+use_example_configs Mks/Robin
+exec_test $1 $2 "MKS Robin config (FSMC Color UI)" "$3"
+
+#
+# MKS Robin LVGL FSMC
+#
+use_example_configs Mks/Robin
+opt_disable TFT_CLASSIC_UI TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
+opt_enable TFT_LVGL_UI TFT_RES_480x320
+exec_test $1 $2 "MKS Robin nano v1.2 LVGL FSMC" "$3"
+
+# cleanup
+restore_configs
diff --git a/buildroot/tests/mks_robin_nano35 b/buildroot/tests/mks_robin_nano35
index c54cd3665..089174469 100755
--- a/buildroot/tests/mks_robin_nano35
+++ b/buildroot/tests/mks_robin_nano35
@@ -24,15 +24,24 @@ opt_disable TFT_INTERFACE_FSMC
opt_enable TFT_INTERFACE_SPI
exec_test $1 $2 "MKS Robin v2 nano Emulated DOGM SPI" "$3"
+#
+# MKS Robin nano v1.2 LVGL FSMC
+#
+# use_example_configs Mks/Robin
+# opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO
+# opt_disable TFT_CLASSIC_UI TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
+# opt_enable TFT_LVGL_UI TFT_RES_480x320
+# exec_test $1 $2 "MKS Robin nano v1.2 LVGL FSMC" "$3"
+
#
# MKS Robin v2 nano LVGL SPI
# (Robin v2 nano has no FSMC interface)
#
-use_example_configs Mks/Robin
-opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
-opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240 SERIAL_PORT_2
-opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320 MKS_WIFI_MODULE
-exec_test $1 $2 "MKS Robin v2 nano LVGL SPI w/ WiFi" "$3"
+# use_example_configs Mks/Robin
+# opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
+# opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
+# opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320
+# exec_test $1 $2 "MKS Robin v2 nano LVGL SPI" "$3"
#
# MKS Robin v2 nano New Color UI 480x320 SPI
@@ -42,27 +51,17 @@ use_example_configs Mks/Robin
opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
opt_disable TFT_INTERFACE_FSMC TFT_RES_320x240
opt_enable TFT_INTERFACE_SPI TFT_RES_480x320
-opt_enable BINARY_FILE_TRANSFER
-exec_test $1 $2 "MKS Robin v2 nano New Color UI 480x320 SPI + BINARY_FILE_TRANSFER" "$3"
+exec_test $1 $2 "MKS Robin v2 nano New Color UI 480x320 SPI" "$3"
#
# MKS Robin v2 nano LVGL SPI + TMC
# (Robin v2 nano has no FSMC interface)
#
-use_example_configs Mks/Robin
-opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2 X_DRIVER_TYPE TMC2209 Y_DRIVER_TYPE TMC2209
-opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
-opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320
-exec_test $1 $2 "MKS Robin v2 nano LVGL SPI + TMC" "$3"
-
-#
-# MKS Robin v2 nano New Color UI 480x320 SPI Without Touch Screen
-#
-use_example_configs Mks/Robin
-opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
-opt_disable TFT_INTERFACE_FSMC TFT_RES_320x240 TOUCH_SCREEN
-opt_enable TFT_INTERFACE_SPI TFT_RES_480x320 TFT_COLOR_UI
-exec_test $1 $2 "MKS Robin v2 nano New Color UI 480x320 SPI without TOUCH_SCREEN" "$3"
+# use_example_configs Mks/Robin
+# opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2 X_DRIVER_TYPE TMC2209 Y_DRIVER_TYPE TMC2209
+# opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
+# opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320
+# exec_test $1 $2 "MKS Robin v2 nano LVGL SPI + TMC" "$3"
# cleanup
restore_configs
diff --git a/buildroot/tests/mks_robin_nano35_maple b/buildroot/tests/mks_robin_nano35_maple
new file mode 100755
index 000000000..f1549a810
--- /dev/null
+++ b/buildroot/tests/mks_robin_nano35_maple
@@ -0,0 +1,68 @@
+#!/usr/bin/env bash
+#
+# Build tests for MKS Robin nano with LibMaple STM32F1 HAL
+# (STM32F1 genericSTM32F103VE)
+#
+
+# exit on first failure
+set -e
+
+#
+# MKS Robin nano v1.2 Emulated DOGM FSMC
+#
+use_example_configs Mks/Robin
+opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO
+exec_test $1 $2 "MKS Robin nano v1.2 Emulated DOGM FSMC" "$3"
+
+#
+# MKS Robin v2 nano Emulated DOGM SPI
+# (Robin v2 nano has no FSMC interface)
+#
+use_example_configs Mks/Robin
+opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
+opt_disable TFT_INTERFACE_FSMC
+opt_enable TFT_INTERFACE_SPI
+exec_test $1 $2 "MKS Robin v2 nano Emulated DOGM SPI" "$3"
+
+#
+# MKS Robin v2 nano LVGL SPI
+# (Robin v2 nano has no FSMC interface)
+#
+use_example_configs Mks/Robin
+opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
+opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240 SERIAL_PORT_2
+opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320 MKS_WIFI_MODULE
+exec_test $1 $2 "MKS Robin v2 nano LVGL SPI w/ WiFi" "$3"
+
+#
+# MKS Robin v2 nano New Color UI 480x320 SPI
+# (Robin v2 nano has no FSMC interface)
+#
+use_example_configs Mks/Robin
+opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
+opt_disable TFT_INTERFACE_FSMC TFT_RES_320x240
+opt_enable TFT_INTERFACE_SPI TFT_RES_480x320
+opt_enable BINARY_FILE_TRANSFER
+exec_test $1 $2 "MKS Robin v2 nano New Color UI 480x320 SPI + BINARY_FILE_TRANSFER" "$3"
+
+#
+# MKS Robin v2 nano LVGL SPI + TMC
+# (Robin v2 nano has no FSMC interface)
+#
+use_example_configs Mks/Robin
+opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2 X_DRIVER_TYPE TMC2209 Y_DRIVER_TYPE TMC2209
+opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
+opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320
+exec_test $1 $2 "MKS Robin v2 nano LVGL SPI + TMC" "$3"
+
+#
+# MKS Robin v2 nano New Color UI 480x320 SPI Without Touch Screen
+#
+use_example_configs Mks/Robin
+opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
+opt_disable TFT_INTERFACE_FSMC TFT_RES_320x240 TOUCH_SCREEN
+opt_enable TFT_INTERFACE_SPI TFT_RES_480x320 TFT_COLOR_UI
+exec_test $1 $2 "MKS Robin v2 nano New Color UI 480x320 SPI without TOUCH_SCREEN" "$3"
+
+# cleanup
+restore_configs
diff --git a/buildroot/tests/mks_robin_nano35_stm32 b/buildroot/tests/mks_robin_nano35_stm32
deleted file mode 100755
index 089174469..000000000
--- a/buildroot/tests/mks_robin_nano35_stm32
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env bash
-#
-# Build tests for MKS Robin nano
-# (STM32F1 genericSTM32F103VE)
-#
-
-# exit on first failure
-set -e
-
-#
-# MKS Robin nano v1.2 Emulated DOGM FSMC
-#
-use_example_configs Mks/Robin
-opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO
-exec_test $1 $2 "MKS Robin nano v1.2 Emulated DOGM FSMC" "$3"
-
-#
-# MKS Robin v2 nano Emulated DOGM SPI
-# (Robin v2 nano has no FSMC interface)
-#
-use_example_configs Mks/Robin
-opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
-opt_disable TFT_INTERFACE_FSMC
-opt_enable TFT_INTERFACE_SPI
-exec_test $1 $2 "MKS Robin v2 nano Emulated DOGM SPI" "$3"
-
-#
-# MKS Robin nano v1.2 LVGL FSMC
-#
-# use_example_configs Mks/Robin
-# opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO
-# opt_disable TFT_CLASSIC_UI TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
-# opt_enable TFT_LVGL_UI TFT_RES_480x320
-# exec_test $1 $2 "MKS Robin nano v1.2 LVGL FSMC" "$3"
-
-#
-# MKS Robin v2 nano LVGL SPI
-# (Robin v2 nano has no FSMC interface)
-#
-# use_example_configs Mks/Robin
-# opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
-# opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
-# opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320
-# exec_test $1 $2 "MKS Robin v2 nano LVGL SPI" "$3"
-
-#
-# MKS Robin v2 nano New Color UI 480x320 SPI
-# (Robin v2 nano has no FSMC interface)
-#
-use_example_configs Mks/Robin
-opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
-opt_disable TFT_INTERFACE_FSMC TFT_RES_320x240
-opt_enable TFT_INTERFACE_SPI TFT_RES_480x320
-exec_test $1 $2 "MKS Robin v2 nano New Color UI 480x320 SPI" "$3"
-
-#
-# MKS Robin v2 nano LVGL SPI + TMC
-# (Robin v2 nano has no FSMC interface)
-#
-# use_example_configs Mks/Robin
-# opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2 X_DRIVER_TYPE TMC2209 Y_DRIVER_TYPE TMC2209
-# opt_disable TFT_INTERFACE_FSMC TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
-# opt_enable TFT_INTERFACE_SPI TFT_LVGL_UI TFT_RES_480x320
-# exec_test $1 $2 "MKS Robin v2 nano LVGL SPI + TMC" "$3"
-
-# cleanup
-restore_configs
diff --git a/buildroot/tests/mks_robin_stm32 b/buildroot/tests/mks_robin_stm32
deleted file mode 100755
index e250dceca..000000000
--- a/buildroot/tests/mks_robin_stm32
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env bash
-#
-# Build tests for MKS Robin (HAL/STM32)
-#
-
-# exit on first failure
-set -e
-
-use_example_configs Mks/Robin
-exec_test $1 $2 "MKS Robin base configuration" "$3"
-
-# cleanup
-restore_configs
diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini
new file mode 100644
index 000000000..cc9942fd7
--- /dev/null
+++ b/ini/stm32f1-maple.ini
@@ -0,0 +1,363 @@
+#
+# Marlin Firmware
+# PlatformIO Configuration File
+#
+
+#################################
+#
+# STM32F1 Architecture with LibMaple STM32F1 HAL
+#
+# Naming Example: STM32F103RCT6
+#
+# F : Foundation (sometimes High Performance F2/F4)
+# 1 : Cortex M1 core
+# 03 : Line/Features
+# R : 64 or 66 pins (V:100, Z:144, I:176)
+# C : 256KB Flash-memory (D:384KB, E:512KB, G:1024KB)
+# T : LQFP package
+# 6 : -40...85°C (7: ...105°C)
+#
+#################################
+
+#
+# HAL/STM32F1 Common Environment values
+#
+[common_stm32f1]
+platform = ststm32@~12.1
+board_build.core = maple
+build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
+ ${common.build_flags}
+ -DARDUINO_ARCH_STM32
+build_unflags = -std=gnu11 -std=gnu++11
+src_filter = ${common.default_src_filter} +
+lib_ignore = SPI, FreeRTOS701, FreeRTOS821
+lib_deps = ${common.lib_deps}
+ SoftwareSerialM
+platform_packages = tool-stm32duino
+extra_scripts = ${common.extra_scripts}
+ pre:buildroot/share/PlatformIO/scripts/fix_framework_weakness.py
+
+#
+# STM32F103RC
+#
+[common_STM32F103RC_maple]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103RC
+monitor_speed = 115200
+
+#
+# MEEB_3DP (STM32F103RCT6 with 512K)
+#
+[env:STM32F103RC_meeb]
+platform = ${common_stm32f1.platform}
+extends = common_STM32F103RC_maple
+board = marlin_MEEB_3DP
+build_flags = ${common_stm32f1.build_flags}
+ -DDEBUG_LEVEL=0
+ -DSS_TIMER=4
+ -DSTM32_FLASH_SIZE=512
+ -DHSE_VALUE=12000000U
+ -DUSE_USB_COMPOSITE
+ -DVECT_TAB_OFFSET=0x2000
+ -DGENERIC_BOOTLOADER
+extra_scripts = ${common_stm32f1.extra_scripts}
+ pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
+ buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py
+lib_deps = ${common.lib_deps}
+ SoftwareSerialM
+ USBComposite for STM32F1@0.91
+custom_marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use
+debug_tool = stlink
+upload_protocol = dfu
+
+#
+# FYSETC STM32F103RC
+#
+[env:STM32F103RC_fysetc]
+platform = ${common_stm32f1.platform}
+extends = common_STM32F103RC_maple
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py
+build_flags = ${common_stm32f1.build_flags} -DDEBUG_LEVEL=0
+lib_ldf_mode = chain
+debug_tool = stlink
+upload_protocol = serial
+
+#
+# BigTree SKR Mini V1.1 / SKR mini E3 / SKR E3 DIP (STM32F103RCT6 ARM Cortex-M3)
+#
+# STM32F103RC_btt_maple ............. RCT6 with 256K
+# STM32F103RC_btt_USB_maple ......... RCT6 with 256K (USB mass storage)
+# STM32F103RC_btt_512K_maple ........ RCT6 with 512K
+# STM32F103RC_btt_512K_USB_maple .... RCT6 with 512K (USB mass storage)
+#
+# WARNING! If you have an SKR Mini v1.1 or an SKR Mini E3 1.0 / 1.2 / 2.0 / DIP
+# and experience a printer freeze, re-flash Marlin using the regular (non-512K)
+# build option. 256K chips may be re-branded 512K chips, but this means the
+# upper 256K is sketchy, and failure is very likely.
+#
+
+[env:STM32F103RC_btt_maple]
+platform = ${common_stm32f1.platform}
+extends = common_STM32F103RC_maple
+board_build.address = 0x08007000
+board_build.ldscript = STM32F103RC_SKR_MINI_256K.ld
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/custom_board.py
+build_flags = ${common_stm32f1.build_flags}
+ -DDEBUG_LEVEL=0 -DSS_TIMER=4
+monitor_speed = 115200
+
+[env:STM32F103RC_btt_USB_maple]
+platform = ${common_stm32f1.platform}
+extends = env:STM32F103RC_btt_maple
+build_flags = ${env:STM32F103RC_btt_maple.build_flags} -DUSE_USB_COMPOSITE
+lib_deps = ${env:STM32F103RC_btt_maple.lib_deps}
+ USBComposite for STM32F1@0.91
+
+[env:STM32F103RC_btt_512K_maple]
+platform = ${common_stm32f1.platform}
+extends = env:STM32F103RC_btt_maple
+board_build.ldscript = STM32F103RC_SKR_MINI_512K.ld
+board_upload.maximum_size = 524288
+build_flags = ${env:STM32F103RC_btt_maple.build_flags} -DSTM32_FLASH_SIZE=512
+
+[env:STM32F103RC_btt_512K_USB_maple]
+platform = ${common_stm32f1.platform}
+extends = env:STM32F103RC_btt_512K_maple
+build_flags = ${env:STM32F103RC_btt_512K_maple.build_flags} -DUSE_USB_COMPOSITE
+lib_deps = ${env:STM32F103RC_btt_512K_maple.lib_deps}
+ USBComposite for STM32F1@0.91
+
+#
+# STM32F103RE with Unified STM32F1 HAL
+#
+[common_STM32F103RE]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103RE
+monitor_speed = 115200
+
+#
+# Creality (STM32F103RET6)
+#
+[env:STM32F103RET6_creality_maple]
+platform = ${common_stm32f1.platform}
+extends = common_STM32F103RE
+build_flags = ${common_stm32f1.build_flags} -DTEMP_TIMER_CHAN=4
+board_build.address = 0x08007000
+board_build.ldscript = creality.ld
+extra_scripts = ${common_stm32f1.extra_scripts}
+ pre:buildroot/share/PlatformIO/scripts/random-bin.py
+ buildroot/share/PlatformIO/scripts/custom_board.py
+debug_tool = jlink
+upload_protocol = jlink
+
+#
+# STM32F103RE_btt ............. RET6
+# STM32F103RE_btt_USB ......... RET6 (USB mass storage)
+#
+[env:STM32F103RE_btt]
+platform = ${common_stm32f1.platform}
+extends = common_STM32F103RE
+board_build.address = 0x08007000
+board_build.ldscript = STM32F103RE_SKR_E3_DIP.ld
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/custom_board.py
+build_flags = ${common_stm32f1.build_flags} -DDEBUG_LEVEL=0 -DSS_TIMER=4
+debug_tool = stlink
+upload_protocol = stlink
+
+[env:STM32F103RE_btt_USB]
+platform = ${common_stm32f1.platform}
+extends = env:STM32F103RE_btt
+build_flags = ${env:STM32F103RE_btt.build_flags} -DUSE_USB_COMPOSITE
+lib_deps = ${common_stm32f1.lib_deps}
+ USBComposite for STM32F1@0.91
+
+#
+# Geeetech GTM32 (STM32F103VET6)
+#
+[env:STM32F103VE_GTM32]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103VE
+build_flags = ${common_stm32f1.build_flags}
+ -ffunction-sections -fdata-sections -nostdlib -MMD
+ -DMCU_STM32F103VE -DARDUINO_GENERIC_STM32F103V -DARDUINO_ARCH_STM32F1 -DBOARD_generic_stm32f103v
+ -DDEBUG_LEVEL=DEBUG_NONE -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DVECT_TAB_ADDR=0x8000000
+ -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
+upload_protocol = serial
+
+#
+# Longer 3D board in Alfawise U20 (STM32F103VET6)
+#
+[env:STM32F103VE_longer]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103VE
+board_build.address = 0x08010000
+board_build.ldscript = STM32F103VE_longer.ld
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/custom_board.py
+ buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py
+build_flags = ${common_stm32f1.build_flags}
+ -DMCU_STM32F103VE -DSTM32F1xx -USERIAL_USB -DU20 -DTS_V12
+build_unflags = ${common_stm32f1.build_unflags}
+ -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
+
+#
+# MKS Robin Mini (STM32F103VET6)
+#
+[env:mks_robin_mini]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103VE
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_mini.py
+build_flags = ${common_stm32f1.build_flags}
+ -DMCU_STM32F103VE
+
+#
+# MKS Robin Nano (STM32F103VET6)
+#
+[env:mks_robin_nano35_maple]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103VE
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_nano35.py
+build_flags = ${common_stm32f1.build_flags}
+ -DMCU_STM32F103VE -DSS_TIMER=4
+debug_tool = jlink
+upload_protocol = jlink
+
+#
+# MKS Robin (STM32F103ZET6)
+#
+[env:mks_robin_maple]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103ZE
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin.py
+build_flags = ${common_stm32f1.build_flags}
+ -DSS_TIMER=4 -DSTM32_XL_DENSITY
+
+#
+# MKS Robin Pro (STM32F103ZET6)
+#
+[env:mks_robin_pro]
+platform = ${common_stm32f1.platform}
+extends = env:mks_robin_maple
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_pro.py
+
+#
+# TRIGORILLA PRO (STM32F103ZET6)
+#
+[env:trigorilla_pro]
+platform = ${common_stm32f1.platform}
+extends = env:mks_robin_maple
+extra_scripts = ${common_stm32f1.extra_scripts}
+
+#
+# MKS Robin E3D (STM32F103RCT6) and
+# MKS Robin E3 with TMC2209
+#
+[env:mks_robin_e3]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103RC
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_e3.py
+build_flags = ${common_stm32f1.build_flags}
+ -DDEBUG_LEVEL=0 -DSS_TIMER=4
+
+#
+# MKS Robin E3p (STM32F103VET6)
+# - LVGL UI
+#
+[env:mks_robin_e3p]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103VE
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
+build_flags = ${common_stm32f1.build_flags}
+ -DMCU_STM32F103VE -DSS_TIMER=4
+debug_tool = jlink
+upload_protocol = jlink
+
+#
+# MKS Robin Lite/Lite2 (STM32F103RCT6)
+#
+[env:mks_robin_lite]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103RC
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_lite.py
+
+#
+# MKS ROBIN LITE3 (STM32F103RCT6)
+#
+[env:mks_robin_lite3]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103RC
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_lite3.py
+
+#
+# JGAurora A5S A1 (STM32F103ZET6)
+#
+[env:jgaurora_a5s_a1]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103ZE
+board_build.address = 0x0800A000
+board_build.ldscript = jgaurora_a5s_a1.ld
+extra_scripts = ${common_stm32f1.extra_scripts}
+ buildroot/share/PlatformIO/scripts/custom_board.py
+ buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py
+build_flags = ${common_stm32f1.build_flags}
+ -DSTM32F1xx -DSTM32_XL_DENSITY
+
+#
+# Malyan M200 (STM32F103CB)
+#
+[env:STM32F103CB_malyan]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = marlin_malyanM200
+build_flags = ${common_stm32f1.build_flags}
+ -DMCU_STM32F103CB -D__STM32F1__=1 -std=c++1y -DSERIAL_USB -ffunction-sections -fdata-sections
+ -Wl,--gc-sections -DDEBUG_LEVEL=0 -D__MARLIN_FIRMWARE__
+lib_ignore = ${common_stm32f1.lib_ignore}
+ SoftwareSerialM
+
+#
+# Chitu boards like Tronxy X5s (STM32F103ZET6)
+#
+[env:chitu_f103]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = marlin_CHITU_F103
+extra_scripts = pre:buildroot/share/PlatformIO/scripts/common-dependencies.py
+ pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
+ buildroot/share/PlatformIO/scripts/chitu_crypt.py
+build_flags = ${common_stm32f1.build_flags}
+ -DSTM32F1xx -DSTM32_XL_DENSITY
+build_unflags = ${common_stm32f1.build_unflags}
+ -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG= -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
+
+#
+# Some Chitu V5 boards have a problem with GPIO init.
+# Use this target if G28 or G29 are always failing.
+#
+[env:chitu_v5_gpio_init]
+platform = ${common_stm32f1.platform}
+extends = env:chitu_f103
+build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX
diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini
index d21db3d83..c6aa46497 100644
--- a/ini/stm32f1.ini
+++ b/ini/stm32f1.ini
@@ -5,7 +5,7 @@
#################################
#
-# STM32F1 Architecture
+# STM32F1 Architecture with unified STM32 HAL
#
# Naming Example: STM32F103RCT6
#
@@ -32,71 +32,6 @@ build_flags = ${common.build_flags}
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} + +
-#
-# HAL/STM32F1 Common Environment values
-#
-[common_stm32f1]
-platform = ststm32@~12.1
-board_build.core = maple
-build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
- ${common.build_flags}
- -DARDUINO_ARCH_STM32
-build_unflags = -std=gnu11 -std=gnu++11
-src_filter = ${common.default_src_filter} +
-lib_ignore = SPI, FreeRTOS701, FreeRTOS821
-lib_deps = ${common.lib_deps}
- SoftwareSerialM
-platform_packages = tool-stm32duino
-extra_scripts = ${common.extra_scripts}
- pre:buildroot/share/PlatformIO/scripts/fix_framework_weakness.py
-
-#
-# STM32F103RC
-#
-[env:STM32F103RC]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103RC
-monitor_speed = 115200
-
-#
-# MEEB_3DP (STM32F103RCT6 with 512K)
-#
-[env:STM32F103RC_meeb]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = marlin_MEEB_3DP
-build_flags = ${common_stm32f1.build_flags}
- -DDEBUG_LEVEL=0
- -DSS_TIMER=4
- -DSTM32_FLASH_SIZE=512
- -DHSE_VALUE=12000000U
- -DUSE_USB_COMPOSITE
- -DVECT_TAB_OFFSET=0x2000
- -DGENERIC_BOOTLOADER
-extra_scripts = ${common_stm32f1.extra_scripts}
- pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
- buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py
-lib_deps = ${common.lib_deps}
- SoftwareSerialM
- USBComposite for STM32F1@0.91
-custom_marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use
-debug_tool = stlink
-upload_protocol = dfu
-
-#
-# STM32F103RC_fysetc
-#
-[env:STM32F103RC_fysetc]
-platform = ${common_stm32f1.platform}
-extends = env:STM32F103RC
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py
-build_flags = ${common_stm32f1.build_flags} -DDEBUG_LEVEL=0
-lib_ldf_mode = chain
-debug_tool = stlink
-upload_protocol = serial
-
#
# BigTree SKR Mini V1.1 / SKR mini E3 / SKR E3 DIP (STM32F103RCT6 ARM Cortex-M3)
#
@@ -110,44 +45,7 @@ upload_protocol = serial
# build option. 256K chips may be re-branded 512K chips, but this means the
# upper 256K is sketchy, and failure is very likely.
#
-
-[env:STM32F103RC_btt]
-platform = ${common_stm32f1.platform}
-extends = env:STM32F103RC
-board_build.address = 0x08007000
-board_build.ldscript = STM32F103RC_SKR_MINI_256K.ld
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/custom_board.py
-build_flags = ${common_stm32f1.build_flags}
- -DDEBUG_LEVEL=0 -DSS_TIMER=4
-monitor_speed = 115200
-
-[env:STM32F103RC_btt_USB]
-platform = ${common_stm32f1.platform}
-extends = env:STM32F103RC_btt
-build_flags = ${env:STM32F103RC_btt.build_flags} -DUSE_USB_COMPOSITE
-lib_deps = ${env:STM32F103RC_btt.lib_deps}
- USBComposite for STM32F1@0.91
-
-[env:STM32F103RC_btt_512K]
-platform = ${common_stm32f1.platform}
-extends = env:STM32F103RC_btt
-board_build.ldscript = STM32F103RC_SKR_MINI_512K.ld
-board_upload.maximum_size=524288
-build_flags = ${env:STM32F103RC_btt.build_flags} -DSTM32_FLASH_SIZE=512
-
-[env:STM32F103RC_btt_512K_USB]
-platform = ${common_stm32f1.platform}
-extends = env:STM32F103RC_btt_512K
-build_flags = ${env:STM32F103RC_btt_512K.build_flags} -DUSE_USB_COMPOSITE
-lib_deps = ${env:STM32F103RC_btt_512K.lib_deps}
- USBComposite for STM32F1@0.91
-
-#
-# STM32 HAL version of STM32F103RC_btt envs
-#
-
-[env:STM32F103RC_stm32]
+[common_STM32F103RC]
platform = ${common_stm32.platform}
extends = common_stm32
board = genericSTM32F103RC
@@ -159,21 +57,21 @@ extra_scripts = ${common.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/stm32_bootloader.py
-[env:STM32F103RC_btt_stm32]
+[env:STM32F103RC_btt]
platform = ${common_stm32.platform}
-extends = env:STM32F103RC_stm32
+extends = common_STM32F103RC
build_flags = ${common_stm32.build_flags} -DDEBUG_LEVEL=0 -DTIMER_SERVO=TIM5
board_build.offset = 0x7000
board_build.encrypt = No
board_build.firmware = firmware.bin
board_upload.offset_address = 0x08007000
-[env:STM32F103RC_btt_USB_stm32]
-extends = env:STM32F103RC_btt_stm32
+[env:STM32F103RC_btt_USB]
+extends = env:STM32F103RC_btt
platform = ${common_stm32.platform}
platform_packages = framework-arduinoststm32@https://github.com/rhapsodyv/Arduino_Core_STM32/archive/usb-host-msc-cdc-msc-2.zip
build_unflags = ${common_stm32.build_unflags} -DUSBD_USE_CDC
-build_flags = ${env:STM32F103RC_btt_stm32.build_flags} ${env:stm32_flash_drive.build_flags}
+build_flags = ${env:STM32F103RC_btt.build_flags} ${env:stm32_flash_drive.build_flags}
-DUSBCON
-DUSE_USBHOST_HS
-DUSBD_IRQ_PRIO=5
@@ -181,122 +79,23 @@ build_flags = ${env:STM32F103RC_btt_stm32.build_flags} ${env:stm32_flash_d
-DUSE_USB_HS_IN_FS
-DUSBD_USE_CDC_MSC
-[env:STM32F103RC_btt_512K_stm32]
+[env:STM32F103RC_btt_512K]
platform = ${common_stm32.platform}
-extends = env:STM32F103RC_btt_stm32
+extends = env:STM32F103RC_btt
board_upload.maximum_size = 524288
-build_flags = ${env:STM32F103RC_btt_stm32.build_flags} -DLD_MAX_DATA_SIZE=524288 -DSTM32_FLASH_SIZE=512
+build_flags = ${env:STM32F103RC_btt.build_flags} -DLD_MAX_DATA_SIZE=524288 -DSTM32_FLASH_SIZE=512
-[env:STM32F103RC_btt_512K_USB_stm32]
+[env:STM32F103RC_btt_512K_USB]
platform = ${common_stm32.platform}
-extends = env:STM32F103RC_btt_USB_stm32
+extends = env:STM32F103RC_btt_USB
board_upload.maximum_size = 524288
-build_flags = ${env:STM32F103RC_btt_USB_stm32.build_flags} -DLD_MAX_DATA_SIZE=524288 -DSTM32_FLASH_SIZE=512
+build_flags = ${env:STM32F103RC_btt_USB.build_flags} -DLD_MAX_DATA_SIZE=524288 -DSTM32_FLASH_SIZE=512
#
-# STM32F103RE
-#
-[env:STM32F103RE]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103RE
-monitor_speed = 115200
-
-#
-# STM32F103RE_btt ............. RET6
-# STM32F103RE_btt_USB ......... RET6 (USB mass storage)
-#
-[env:STM32F103RE_btt]
-platform = ${common_stm32f1.platform}
-extends = env:STM32F103RE
-board_build.address = 0x08007000
-board_build.ldscript = STM32F103RE_SKR_E3_DIP.ld
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/custom_board.py
-build_flags = ${common_stm32f1.build_flags} -DDEBUG_LEVEL=0 -DSS_TIMER=4
-debug_tool = stlink
-upload_protocol = stlink
-
-[env:STM32F103RE_btt_USB]
-platform = ${common_stm32f1.platform}
-extends = env:STM32F103RE_btt
-build_flags = ${env:STM32F103RE_btt.build_flags} -DUSE_USB_COMPOSITE
-lib_deps = ${common_stm32f1.lib_deps}
- USBComposite for STM32F1@0.91
-
-#
-# Geeetech GTM32 (STM32F103VET6)
-#
-[env:STM32F103VE_GTM32]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103VE
-build_flags = ${common_stm32f1.build_flags}
- -ffunction-sections -fdata-sections -nostdlib -MMD
- -DMCU_STM32F103VE -DARDUINO_GENERIC_STM32F103V -DARDUINO_ARCH_STM32F1 -DBOARD_generic_stm32f103v
- -DDEBUG_LEVEL=DEBUG_NONE -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DVECT_TAB_ADDR=0x8000000
- -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
-upload_protocol = serial
-
-#
-# Longer 3D board in Alfawise U20 (STM32F103VET6)
-#
-[env:STM32F103VE_longer]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103VE
-board_build.address = 0x08010000
-board_build.ldscript = STM32F103VE_longer.ld
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/custom_board.py
- buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py
-build_flags = ${common_stm32f1.build_flags}
- -DMCU_STM32F103VE -DSTM32F1xx -USERIAL_USB -DU20 -DTS_V12
-build_unflags = ${common_stm32f1.build_unflags}
- -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
-
-#
-# MKS Robin Mini (STM32F103VET6)
-#
-[env:mks_robin_mini]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103VE
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin_mini.py
-build_flags = ${common_stm32f1.build_flags}
- -DMCU_STM32F103VE
-
-#
-# MKS Robin Nano (STM32F103VET6)
-#
-[env:mks_robin_nano35]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103VE
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin_nano35.py
-build_flags = ${common_stm32f1.build_flags}
- -DMCU_STM32F103VE -DSS_TIMER=4
-debug_tool = jlink
-upload_protocol = jlink
-
-#
-# MKS Robin (STM32F103ZET6)
-#
-[env:mks_robin]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103ZE
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin.py
-build_flags = ${common_stm32f1.build_flags}
- -DSS_TIMER=4 -DSTM32_XL_DENSITY
-
# MKS Robin (STM32F103ZET6)
# Uses HAL STM32 to support Marlin UI for TFT screen with optional touch panel
#
-[env:mks_robin_stm32]
+[env:mks_robin]
platform = ${common_stm32.platform}
extends = common_stm32
board = genericSTM32F103ZE
@@ -316,154 +115,30 @@ extra_scripts = ${common.extra_scripts}
buildroot/share/PlatformIO/scripts/mks_encrypt.py
lib_deps =
-#
-# MKS Robin Pro (STM32F103ZET6)
-#
-[env:mks_robin_pro]
-platform = ${common_stm32f1.platform}
-extends = env:mks_robin
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin_pro.py
-
-#
-# TRIGORILLA PRO (STM32F103ZET6)
-#
-[env:trigorilla_pro]
-platform = ${common_stm32f1.platform}
-extends = env:mks_robin
-extra_scripts = ${common_stm32f1.extra_scripts}
-
-#
-# MKS Robin E3D (STM32F103RCT6) and
-# MKS Robin E3 with TMC2209
-#
-[env:mks_robin_e3]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103RC
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin_e3.py
-build_flags = ${common_stm32f1.build_flags}
- -DDEBUG_LEVEL=0 -DSS_TIMER=4
-
-#
-# MKS Robin E3p (STM32F103VET6)
-# - LVGL UI
-#
-[env:mks_robin_e3p]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103VE
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
-build_flags = ${common_stm32f1.build_flags}
- -DMCU_STM32F103VE -DSS_TIMER=4
-debug_tool = jlink
-upload_protocol = jlink
-
-#
-# MKS Robin Lite/Lite2 (STM32F103RCT6)
-#
-[env:mks_robin_lite]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103RC
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin_lite.py
-
-#
-# MKS ROBIN LITE3 (STM32F103RCT6)
-#
-[env:mks_robin_lite3]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103RC
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/mks_robin_lite3.py
-
-#
-# FLY MINI (STM32F103RCT6)
-#
-[env:FLY_MINI]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103RC
-board_build.address = 0x08005000
-board_build.ldscript = fly_mini.ld
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/custom_board.py
-build_flags = ${common_stm32f1.build_flags}
- -DDEBUG_LEVEL=0 -DSS_TIMER=4
-
-#
-# JGAurora A5S A1 (STM32F103ZET6)
-#
-[env:jgaurora_a5s_a1]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = genericSTM32F103ZE
-board_build.address = 0x0800A000
-board_build.ldscript = jgaurora_a5s_a1.ld
-extra_scripts = ${common_stm32f1.extra_scripts}
- buildroot/share/PlatformIO/scripts/custom_board.py
- buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py
-build_flags = ${common_stm32f1.build_flags}
- -DSTM32F1xx -DSTM32_XL_DENSITY
-
-#
-# Malyan M200 (STM32F103CB)
-#
-[env:STM32F103CB_malyan]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = marlin_malyanM200
-build_flags = ${common_stm32f1.build_flags}
- -DMCU_STM32F103CB -D__STM32F1__=1 -std=c++1y -DSERIAL_USB -ffunction-sections -fdata-sections
- -Wl,--gc-sections -DDEBUG_LEVEL=0 -D__MARLIN_FIRMWARE__
-lib_ignore = ${common_stm32f1.lib_ignore}
- SoftwareSerialM
-
-#
-# Chitu boards like Tronxy X5s (STM32F103ZET6)
-#
-[env:chitu_f103]
-platform = ${common_stm32f1.platform}
-extends = common_stm32f1
-board = marlin_CHITU_F103
-extra_scripts = pre:buildroot/share/PlatformIO/scripts/common-dependencies.py
- pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
- buildroot/share/PlatformIO/scripts/chitu_crypt.py
-build_flags = ${common_stm32f1.build_flags}
- -DSTM32F1xx -DSTM32_XL_DENSITY
-build_unflags = ${common_stm32f1.build_unflags}
- -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG= -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
-
-#
-# Some Chitu V5 boards have a problem with GPIO init.
-# Use this target if G28 or G29 are always failing.
-#
-[env:chitu_v5_gpio_init]
-platform = ${common_stm32f1.platform}
-extends = env:chitu_f103
-build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX
-
#
# Creality (STM32F103RET6)
#
[env:STM32F103RET6_creality]
-platform = ${env:STM32F103RE.platform}
-extends = env:STM32F103RE
-build_flags = ${env:STM32F103RE.build_flags} -DTEMP_TIMER_CHAN=4
-board_build.address = 0x08007000
-board_build.ldscript = creality.ld
-extra_scripts = ${env:STM32F103RE.extra_scripts}
+platform = ${common_stm32.platform}
+extends = common_stm32
+build_flags = ${common_stm32.build_flags} -DMCU_STM32F103RE -DHAL_SD_MODULE_ENABLED -DSS_TIMER=4 -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8
+board = genericSTM32F103RE
+monitor_speed = 115200
+board_build.core = stm32
+board_build.variant = MARLIN_F103Rx
+board_build.offset = 0x7000
+board_build.ldscript = ldscript.ld
+board_upload.offset_address = 0x08007000
+build_unflags = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
+extra_scripts = ${common.extra_scripts}
+ pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
pre:buildroot/share/PlatformIO/scripts/random-bin.py
- buildroot/share/PlatformIO/scripts/custom_board.py
-debug_tool = jlink
-upload_protocol = jlink
+ buildroot/share/PlatformIO/scripts/stm32_bootloader.py
+debug_tool = jlink
+upload_protocol = jlink
#
-# FLSUN QQS Pro (STM32F103VET6) using hal STM32
+# FLSUN QQS Pro (STM32F103VET6)
# board Hispeedv1
#
[env:flsun_hispeedv1]
@@ -485,9 +160,9 @@ extra_scripts = ${common.extra_scripts}
buildroot/share/PlatformIO/scripts/mks_encrypt.py
#
-# MKS Robin Nano V1.2 and V2 using hal STM32
+# MKS Robin Nano V1.2 and V2
#
-[env:mks_robin_nano35_stm32]
+[env:mks_robin_nano35]
platform = ${common_stm32.platform}
extends = common_stm32
build_flags = ${common_stm32.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4 -DENABLE_HWSERIAL3
diff --git a/platformio.ini b/platformio.ini
index b552eda81..f55f5f5a9 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -24,6 +24,7 @@ extra_configs =
ini/native.ini
ini/samd51.ini
ini/stm32f0.ini
+ ini/stm32f1-maple.ini
ini/stm32f1.ini
ini/stm32f4.ini
ini/stm32f7.ini