From e679fafaaf6f59b4252b8abcf260e7d879cc1db5 Mon Sep 17 00:00:00 2001
From: mks-viva <1224833100@qq.com>
Date: Sun, 12 Sep 2021 21:30:09 -0500
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20MKS=20Robin=20Nano=20V1.3=20(STM32F?=
=?UTF-8?q?407VET6)=20(#22749)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/core/boards.h | 1 +
Marlin/src/lcd/extui/mks_ui/draw_ui.cpp | 9 +-
.../extui/mks_ui/tft_lvgl_configuration.cpp | 4 +-
Marlin/src/pins/pins.h | 2 +
Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h | 184 +--------------
.../pins/stm32f1/pins_MKS_ROBIN_NANO_common.h | 210 ++++++++++++++++++
.../stm32f4/pins_MKS_ROBIN_NANO_V1_3_F4.h | 45 ++++
.../src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h | 9 +-
ini/stm32f4.ini | 24 ++
9 files changed, 292 insertions(+), 196 deletions(-)
create mode 100644 Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h
create mode 100644 Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V1_3_F4.h
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index 879d02de61..46b2e5cf0c 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -401,6 +401,7 @@
#define BOARD_FYSETC_CHEETAH_V20 4231 // FYSETC Cheetah V2.0
#define BOARD_TH3D_EZBOARD_LITE_V2 4232 // TH3D EZBoard Lite v2.0
#define BOARD_INDEX_REV03 4233 // Index PnP Controller REV03 (STM32F407VET6/VGT6)
+#define BOARD_MKS_ROBIN_NANO_V1_3_F4 4234 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VET6)
//
// ARM Cortex M7
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp
index e324c32def..68430fe517 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp
@@ -347,13 +347,8 @@ void tft_style_init() {
style_num_key_rel.body.grad_color = LV_COLOR_KEY_BACKGROUND;
style_num_key_rel.text.color = LV_COLOR_TEXT;
style_num_key_rel.text.sel_color = LV_COLOR_TEXT;
- #if HAS_SPI_FLASH_FONT
- style_num_key_pre.text.font = &gb2312_puhui32;
- style_num_key_rel.text.font = &gb2312_puhui32;
- #else
- style_num_key_pre.text.font = LV_FONT_DEFAULT;
- style_num_key_rel.text.font = LV_FONT_DEFAULT;
- #endif
+ style_num_key_pre.text.font = TERN(HAS_SPI_FLASH_FONT, &gb2312_puhui32, LV_FONT_DEFAULT);
+ style_num_key_rel.text.font = TERN(HAS_SPI_FLASH_FONT, &gb2312_puhui32, LV_FONT_DEFAULT);
style_num_key_pre.line.width = 0;
style_num_key_rel.line.width = 0;
diff --git a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
index cfd6db15fd..79990ea42a 100644
--- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
@@ -192,9 +192,7 @@ void tft_lvgl_init() {
systick_attach_callback(SysTick_Callback);
- #if HAS_SPI_FLASH_FONT
- init_gb2312_font();
- #endif
+ TERN_(HAS_SPI_FLASH_FONT, init_gb2312_font());
tft_style_init();
filament_pin_setup();
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index fa64bc7fbc..0293da1dba 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -649,6 +649,8 @@
#include "stm32f4/pins_TH3D_EZBOARD_LITE_V2.h" // STM32F4 env:TH3D_EZBoard_Lite_V2
#elif MB(INDEX_REV03)
#include "stm32f4/pins_INDEX_REV03.h" // STM32F4 env:Index_Mobo_Rev03
+#elif MB(MKS_ROBIN_NANO_V1_3_F4)
+ #include "stm32f4/pins_MKS_ROBIN_NANO_V1_3_F4.h" // STM32F4 env:mks_robin_nano_v1_3_f4
//
// ARM Cortex M7
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h
index 975ecb8bd5..c729274c54 100644
--- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h
@@ -26,200 +26,22 @@
* https://github.com/makerbase-mks/MKS-Robin-Nano-V1.X/tree/master/hardware
*/
-#if NOT_TARGET(STM32F1, STM32F1xx)
- #error "Oops! Select an STM32F1 board in 'Tools > Board.'"
-#elif HOTENDS > 2 || E_STEPPERS > 2
- #error "MKS Robin nano supports up to 2 hotends / E-steppers. Comment out this line to continue."
-#endif
+#define ALLOW_STM32DUINO
+#include "env_validate.h"
#define BOARD_INFO_NAME "MKS Robin Nano"
-#define BOARD_NO_NATIVE_USB
-
-// Avoid conflict with TIMER_SERVO when using the STM32 HAL
-#define TEMP_TIMER 5
-
//
// Release PB4 (Y_ENABLE_PIN) from JTAG NRST role
//
#define DISABLE_JTAG
-//
-// EEPROM
-//
-#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION)
- #define FLASH_EEPROM_EMULATION
- #define EEPROM_PAGE_SIZE (0x800U) // 2KB
- #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL)
- #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB
-#endif
-
-#define SPI_DEVICE 2
-
-//
-// Servos
-//
-#define SERVO0_PIN PA8 // Enable BLTOUCH
-
-//
-// Limit Switches
-//
-#define X_STOP_PIN PA15
-#define Y_STOP_PIN PA12
-#define Z_MIN_PIN PA11
-#define Z_MAX_PIN PC4
-
-//
-// Steppers
-//
-#define X_ENABLE_PIN PE4
-#define X_STEP_PIN PE3
-#define X_DIR_PIN PE2
-
-#define Y_ENABLE_PIN PE1
-#define Y_STEP_PIN PE0
-#define Y_DIR_PIN PB9
-
-#define Z_ENABLE_PIN PB8
-#define Z_STEP_PIN PB5
-#define Z_DIR_PIN PB4
-
-#define E0_ENABLE_PIN PB3
-#define E0_STEP_PIN PD6
-#define E0_DIR_PIN PD3
-
-#define E1_ENABLE_PIN PA3
-#define E1_STEP_PIN PA6
-#define E1_DIR_PIN PA1
-
-//
-// Temperature Sensors
-//
-#define TEMP_0_PIN PC1 // TH1
-#define TEMP_1_PIN PC2 // TH2
-#define TEMP_BED_PIN PC0 // TB1
-
-//
-// Heaters / Fans
-//
-#ifndef HEATER_0_PIN
- #define HEATER_0_PIN PC3
-#endif
-#if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL)
- #ifndef FAN1_PIN
- #define FAN1_PIN PB0
- #endif
-#else
- #ifndef HEATER_1_PIN
- #define HEATER_1_PIN PB0
- #endif
-#endif
-#ifndef FAN_PIN
- #define FAN_PIN PB1 // FAN
-#endif
-#ifndef HEATER_BED_PIN
- #define HEATER_BED_PIN PA0
-#endif
-
//
// Thermocouples
//
//#define TEMP_0_CS_PIN PE5 // TC1 - CS1
//#define TEMP_0_CS_PIN PE6 // TC2 - CS2
-//
-// Power Supply Control
-//
-#if ENABLED(MKS_PWC)
- #if ENABLED(TFT_LVGL_UI)
- #undef PSU_CONTROL
- #undef MKS_PWC
- #define SUICIDE_PIN PB2
- #define SUICIDE_PIN_STATE LOW
- #else
- #define PS_ON_PIN PB2 // PW_OFF
- #endif
- #define KILL_PIN PA2
- #define KILL_PIN_STATE HIGH
-#endif
-
-//
-// Misc. Functions
-//
-#if HAS_TFT_LVGL_UI
- #define MT_DET_1_PIN PA4
- #define MT_DET_2_PIN PE6
- #define MT_DET_PIN_STATE LOW
-
- #define WIFI_IO0_PIN PC13
- #define WIFI_IO1_PIN PC7
- #define WIFI_RESET_PIN PA5
-#else
- //#define POWER_LOSS_PIN PA2 // PW_DET
- //#define PS_ON_PIN PB2 // PW_OFF
- #define FIL_RUNOUT_PIN PA4
- #define FIL_RUNOUT2_PIN PE6
-#endif
-
//#define LED_PIN PB2
-//
-// SD Card
-//
-#ifndef SDCARD_CONNECTION
- #define SDCARD_CONNECTION ONBOARD
-#endif
-
-#define SDIO_SUPPORT
-#define SDIO_CLOCK 4500000 // 4.5 MHz
-#define SD_DETECT_PIN PD12
-#define ONBOARD_SD_CS_PIN PC11
-
-//
-// LCD / Controller
-//
-#define BEEPER_PIN PC5
-
-//
-// TFT with FSMC interface
-//
-#if HAS_FSMC_TFT
- /**
- * Note: MKS Robin TFT screens use various TFT controllers.
- * If the screen stays white, disable 'TFT_RESET_PIN'
- * to let the bootloader init the screen.
- */
- #define TFT_RESET_PIN PC6 // FSMC_RST
- #define TFT_BACKLIGHT_PIN PD13
-
- #define DOGLCD_MOSI -1 // Prevent auto-define by Conditionals_post.h
- #define DOGLCD_SCK -1
-
- #define TOUCH_CS_PIN PA7 // SPI2_NSS
- #define TOUCH_SCK_PIN PB13 // SPI2_SCK
- #define TOUCH_MISO_PIN PB14 // SPI2_MISO
- #define TOUCH_MOSI_PIN PB15 // SPI2_MOSI
-
- #define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT
- #define FSMC_CS_PIN PD7
- #define FSMC_RS_PIN PD11
- #define FSMC_DMA_DEV DMA2
- #define FSMC_DMA_CHANNEL DMA_CH5
-
- #define TFT_CS_PIN FSMC_CS_PIN
- #define TFT_RS_PIN FSMC_RS_PIN
-
- #define TOUCH_BUTTONS_HW_SPI
- #define TOUCH_BUTTONS_HW_SPI_DEVICE 2
-
- #define TFT_BUFFER_SIZE 14400
-#endif
-
-#define HAS_SPI_FLASH 1
-#if HAS_SPI_FLASH
- #define SPI_FLASH_SIZE 0x1000000 // 16MB
- #define SPI_FLASH_CS_PIN PB12
- #define SPI_FLASH_MOSI_PIN PB15
- #define SPI_FLASH_MISO_PIN PB14
- #define SPI_FLASH_SCK_PIN PB13
-#endif
+#include "pins_MKS_ROBIN_NANO_common.h"
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h
new file mode 100644
index 0000000000..c76175a35c
--- /dev/null
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h
@@ -0,0 +1,210 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 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 .
+ *
+ */
+#pragma once
+
+/**
+ * MKS Robin Nano board common pin assignments
+ */
+
+#if HOTENDS > 2 || E_STEPPERS > 2
+ #error "MKS Robin nano supports up to 2 hotends / E-steppers. Comment out this line to continue."
+#endif
+
+#define BOARD_NO_NATIVE_USB
+
+// Avoid conflict with TIMER_SERVO when using the STM32 HAL
+#define TEMP_TIMER 5
+
+//
+// EEPROM
+//
+#if ENABLED(SRAM_EEPROM_EMULATION)
+ #undef NO_EEPROM_SELECTED
+#endif
+#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION)
+ #define FLASH_EEPROM_EMULATION
+ #define EEPROM_PAGE_SIZE (0x800U) // 2KB
+ #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL)
+ #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB
+#endif
+
+#define SPI_DEVICE 2
+
+//
+// Servos
+//
+#define SERVO0_PIN PA8 // Enable BLTOUCH
+
+//
+// Limit Switches
+//
+#define X_STOP_PIN PA15
+#define Y_STOP_PIN PA12
+#define Z_MIN_PIN PA11
+#define Z_MAX_PIN PC4
+
+//
+// Steppers
+//
+#define X_ENABLE_PIN PE4
+#define X_STEP_PIN PE3
+#define X_DIR_PIN PE2
+
+#define Y_ENABLE_PIN PE1
+#define Y_STEP_PIN PE0
+#define Y_DIR_PIN PB9
+
+#define Z_ENABLE_PIN PB8
+#define Z_STEP_PIN PB5
+#define Z_DIR_PIN PB4
+
+#define E0_ENABLE_PIN PB3
+#define E0_STEP_PIN PD6
+#define E0_DIR_PIN PD3
+
+#define E1_ENABLE_PIN PA3
+#define E1_STEP_PIN PA6
+#define E1_DIR_PIN PA1
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN PC1 // TH1
+#define TEMP_1_PIN PC2 // TH2
+#define TEMP_BED_PIN PC0 // TB1
+
+//
+// Heaters / Fans
+//
+#ifndef HEATER_0_PIN
+ #define HEATER_0_PIN PC3
+#endif
+#if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL)
+ #ifndef FAN1_PIN
+ #define FAN1_PIN PB0
+ #endif
+#else
+ #ifndef HEATER_1_PIN
+ #define HEATER_1_PIN PB0
+ #endif
+#endif
+#ifndef FAN_PIN
+ #define FAN_PIN PB1 // FAN
+#endif
+#ifndef HEATER_BED_PIN
+ #define HEATER_BED_PIN PA0
+#endif
+
+//
+// Power Supply Control
+//
+#if ENABLED(MKS_PWC)
+ #if ENABLED(TFT_LVGL_UI)
+ #undef PSU_CONTROL
+ #undef MKS_PWC
+ #define SUICIDE_PIN PB2
+ #define SUICIDE_PIN_STATE LOW
+ #else
+ #define PS_ON_PIN PB2 // PW_OFF
+ #endif
+ #define KILL_PIN PA2
+ #define KILL_PIN_STATE HIGH
+#endif
+
+//
+// Misc. Functions
+//
+#if HAS_TFT_LVGL_UI
+ #define MT_DET_1_PIN PA4
+ #define MT_DET_2_PIN PE6
+ #define MT_DET_PIN_STATE LOW
+
+ #define WIFI_IO0_PIN PC13
+ #define WIFI_IO1_PIN PC7
+ #define WIFI_RESET_PIN PA5
+#else
+ //#define POWER_LOSS_PIN PA2 // PW_DET
+ //#define PS_ON_PIN PB2 // PW_OFF
+ #define FIL_RUNOUT_PIN PA4
+ #define FIL_RUNOUT2_PIN PE6
+#endif
+
+//
+// SD Card
+//
+#ifndef SDCARD_CONNECTION
+ #define SDCARD_CONNECTION ONBOARD
+#endif
+
+#define SDIO_SUPPORT
+#define SDIO_CLOCK 4500000 // 4.5 MHz
+#define SD_DETECT_PIN PD12
+#define ONBOARD_SD_CS_PIN PC11
+
+//
+// LCD / Controller
+//
+#define BEEPER_PIN PC5
+
+//
+// TFT with FSMC interface
+//
+#if HAS_FSMC_TFT
+ /**
+ * Note: MKS Robin TFT screens use various TFT controllers.
+ * If the screen stays white, disable 'TFT_RESET_PIN'
+ * to let the bootloader init the screen.
+ */
+ #define TFT_RESET_PIN PC6 // FSMC_RST
+ #define TFT_BACKLIGHT_PIN PD13
+
+ #define DOGLCD_MOSI -1 // Prevent auto-define by Conditionals_post.h
+ #define DOGLCD_SCK -1
+
+ #define TOUCH_CS_PIN PA7 // SPI2_NSS
+ #define TOUCH_SCK_PIN PB13 // SPI2_SCK
+ #define TOUCH_MISO_PIN PB14 // SPI2_MISO
+ #define TOUCH_MOSI_PIN PB15 // SPI2_MOSI
+
+ #define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT
+ #define FSMC_CS_PIN PD7
+ #define FSMC_RS_PIN PD11
+ #define FSMC_DMA_DEV DMA2
+ #define FSMC_DMA_CHANNEL DMA_CH5
+
+ #define TFT_CS_PIN FSMC_CS_PIN
+ #define TFT_RS_PIN FSMC_RS_PIN
+
+ #define TOUCH_BUTTONS_HW_SPI
+ #define TOUCH_BUTTONS_HW_SPI_DEVICE 2
+
+ #define TFT_BUFFER_SIZE 14400
+#endif
+
+#define HAS_SPI_FLASH 1
+#if HAS_SPI_FLASH
+ #define SPI_FLASH_SIZE 0x1000000 // 16MB
+ #define SPI_FLASH_CS_PIN PB12
+ #define SPI_FLASH_MOSI_PIN PB15
+ #define SPI_FLASH_MISO_PIN PB14
+ #define SPI_FLASH_SCK_PIN PB13
+#endif
diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V1_3_F4.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V1_3_F4.h
new file mode 100644
index 0000000000..3cba69a7b3
--- /dev/null
+++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V1_3_F4.h
@@ -0,0 +1,45 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 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 .
+ *
+ */
+#pragma once
+
+/**
+ * MKS Robin nano V1.3 (STM32F407VET6) board pin assignments
+ * https://github.com/makerbase-mks/MKS-Robin-Nano-V1.X/tree/master/hardware
+ */
+
+#define ALLOW_STM32DUINO
+#include "env_validate.h"
+
+#define BOARD_INFO_NAME "MKS Robin Nano V1.3"
+
+//
+// EEPROM
+// Use one of these or SDCard-based Emulation will be used
+//
+#if NO_EEPROM_SELECTED
+ //#define SRAM_EEPROM_EMULATION // Use BackSRAM-based EEPROM emulation
+ //#define FLASH_EEPROM_EMULATION // Use Flash-based EEPROM emulation
+#endif
+
+#define LED_PIN PB1
+
+#include "../stm32f1/pins_MKS_ROBIN_NANO_common.h"
diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h
index 5387052d40..6877fee803 100644
--- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h
+++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h
@@ -67,11 +67,10 @@
#define E0_DIAG_PIN PC4
#define E1_DIAG_PIN PE7
-//
-#define X_STOP_PIN PA15
-#define Y_STOP_PIN PD2
-#define Z_MIN_PIN PC8
-#define Z_MAX_PIN PC4
+#define X_STOP_PIN X_DIAG_PIN
+#define Y_STOP_PIN Y_DIAG_PIN
+#define Z_MIN_PIN Z_DIAG_PIN
+#define Z_MAX_PIN E0_DIAG_PIN
//
// Steppers
diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini
index 84256d3be9..c8f8676b68 100644
--- a/ini/stm32f4.ini
+++ b/ini/stm32f4.ini
@@ -464,3 +464,27 @@ board_upload.offset_address = 0x0800C000
build_flags = ${stm32_variant.build_flags} -DHSE_VALUE=12000000U -O0
debug_tool = stlink
upload_protocol = stlink
+
+#
+# BOARD_MKS_ROBIN_NANO_V1_3_F4
+# - MKS Robin Nano V1.3 (STM32F407VET6) 5 Pololu Plug
+# - MKS Robin Nano-S V1.3 (STM32F407VET6) 4 TMC2225 + 1 Pololu Plug
+#
+[env:mks_robin_nano_v1_3_f4]
+platform = ${common_stm32.platform}
+extends = stm32_variant
+board = marlin_STM32F407VGT6_CCM
+board_build.variant = MARLIN_F4x7Vx
+board_build.offset = 0x8000
+board_upload.offset_address = 0x08008000
+board_build.rename = Robin_nano35.bin
+build_flags = ${stm32_variant.build_flags}
+ -DMCU_STM32F407VE -DSS_TIMER=4 -DENABLE_HWSERIAL3
+ -DSTM32_FLASH_SIZE=512
+ -DTIMER_TONE=TIM3 -DTIMER_SERVO=TIM2
+ -DHAL_SD_MODULE_ENABLED
+ -DHAL_SRAM_MODULE_ENABLED
+build_unflags = ${stm32_variant.build_unflags}
+ -DUSBCON -DUSBD_USE_CDC
+debug_tool = jlink
+upload_protocol = jlink