#
# Marlin Firmware
# PlatformIO Configuration File
#

#################################
#
# STM32F1 Architecture
#
# 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/STM32 Base Environment values
#
[common_stm32]
platform      = ststm32@~12.1
build_flags   = ${common.build_flags}
  -std=gnu++14
  -DUSBCON -DUSBD_USE_CDC
  -DTIM_IRQ_PRIO=13
  -DADC_RESOLUTION=12
  -O0
  -g
  -Wall
build_unflags = -std=gnu++11
src_filter    = ${common.default_src_filter} +<src/HAL/STM32> +<src/HAL/shared/backtrace>

#
# 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} +<src/HAL/STM32F1>
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)
#
#   STM32F103RC_btt ............. RCT6 with 256K
#   STM32F103RC_btt_USB ......... RCT6 with 256K (USB mass storage)
#   STM32F103RC_btt_512K ........ RCT6 with 512K
#   STM32F103RC_btt_512K_USB .... 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]
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]
platform             = ${common_stm32.platform}
extends              = common_stm32
board                = genericSTM32F103RC
monitor_speed        = 115200
board_build.core     = stm32
board_build.variant  = MARLIN_F103Rx
board_build.ldscript = ldscript.ld
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]
platform             = ${common_stm32.platform}
extends              = env:STM32F103RC_stm32
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
platform          = ${common_stm32.platform}
platform_packages = framework-arduinoststm32@https://github.com/rhapsodyv/Arduino_Core_STM32/archive/usb-host-msc-cdc-msc.zip
build_unflags     = ${common_stm32.build_unflags} -DUSBD_USE_CDC
build_flags       = ${env:STM32F103RC_btt_stm32.build_flags} ${env:stm32_flash_drive.build_flags}
  -DUSBCON
  -DUSE_USBHOST_HS
  -DUSBD_IRQ_PRIO=5
  -DUSBD_IRQ_SUBPRIO=6
  -DUSE_USB_HS_IN_FS
  -DUSBD_USE_CDC_MSC

[env:STM32F103RC_btt_512K_stm32]
platform          = ${common_stm32.platform}
extends           = env:STM32F103RC_btt_stm32
board_upload.maximum_size = 524288
build_flags       = ${env:STM32F103RC_btt_stm32.build_flags} -DLD_MAX_DATA_SIZE=524288 -DSTM32_FLASH_SIZE=512

[env:STM32F103RC_btt_512K_USB_stm32]
platform          = ${common_stm32.platform}
extends           = env:STM32F103RC_btt_USB_stm32
board_upload.maximum_size = 524288
build_flags       = ${env:STM32F103RC_btt_USB_stm32.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
monitor_speed     = 115200

[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  = 0x08007000
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]
platform             = ${common_stm32.platform}
extends              = common_stm32
board                = genericSTM32F103ZE
board_build.core     = stm32
board_build.variant  = MARLIN_F103Zx
board_build.ldscript = ldscript.ld
board_build.offset   = 0x7000
board_build.encrypt  = Yes
board_build.firmware = Robin.bin
build_flags          = ${common_stm32.build_flags}
  -DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags        = ${common_stm32.build_unflags}
 -DUSBCON -DUSBD_USE_CDC
extra_scripts        = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
  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

#
# 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)
#pre:buildroot/share/PlatformIO/scripts/random-bin.py
[env:STM32F103RET6_creality]
platform        = ${env:STM32F103RE.platform}
extends         = env:STM32F103RE
build_flags     = ${env:STM32F103RE.build_flags} -DTEMP_TIMER_CHAN=4
                -Wl,-Map,output.map
board_build.address  = 0x08007000
board_build.ldscript = creality.ld
extra_scripts   = ${env:STM32F103RE.extra_scripts}
  buildroot/share/PlatformIO/scripts/custom_board.py
debug_tool      = jlink
upload_protocol = jlink

#
# FLSUN QQS Pro (STM32F103VET6) using hal STM32
# board Hispeedv1
#
[env:flsun_hispeedv1]
platform             = ${common_stm32.platform}
extends              = common_stm32
build_flags          = ${common_stm32.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4 -DENABLE_HWSERIAL3
board                = genericSTM32F103VE
board_build.core     = stm32
board_build.variant  = MARLIN_F103Vx
board_build.ldscript = ldscript.ld
board_build.offset   = 0x7000
board_build.firmware = Robin_mini.bin
board_build.encrypt  = Yes
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
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
  buildroot/share/PlatformIO/scripts/mks_encrypt.py

#
# MKS Robin Nano V1.2 and V2 using hal STM32
#
[env:mks_robin_nano35_stm32]
platform             = ${common_stm32.platform}
extends              = common_stm32
build_flags          = ${common_stm32.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4 -DENABLE_HWSERIAL3
board                = genericSTM32F103VE
board_build.core     = stm32
board_build.variant  = MARLIN_F103Vx
board_build.ldscript = ldscript.ld
board_build.offset   = 0x7000
board_build.encrypt  = Yes
board_build.firmware = Robin_nano35.bin
board_upload.offset_address = 0x08010000
build_unflags        = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
debug_tool           = jlink
upload_protocol      = jlink
extra_scripts        = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
  buildroot/share/PlatformIO/scripts/mks_encrypt.py

#
# Mingda MPX_ARM_MINI
#
[env:mingda_mpx_arm_mini]
platform             = ${common_stm32.platform}
extends              = common_stm32
board                = genericSTM32F103ZE
board_build.core     = stm32
board_build.variant  = MARLIN_F103Zx
board_build.ldscript = ldscript.ld
board_build.offset   = 0x10000
build_flags          = ${common_stm32.build_flags} -DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags        = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
extra_scripts        = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
