diff --git a/boards.txt b/boards.txt
index d7524d1f82..96b7d31936 100644
--- a/boards.txt
+++ b/boards.txt
@@ -418,6 +418,10 @@ GenF103.menu.upload_method.serialMethod=Serial
 GenF103.menu.upload_method.serialMethod.upload.protocol=maple_serial
 GenF103.menu.upload_method.serialMethod.upload.tool=serial_upload
 
+GenF103.menu.upload_method.bmpMethod=BMP (Black Magic Probe)
+GenF103.menu.upload_method.bmpMethod.upload.protocol=gdb_bmp
+GenF103.menu.upload_method.bmpMethod.upload.tool=bmp_upload
+
 ###############################
 # Maple
 Maple.name=Maple series
diff --git a/platform.txt b/platform.txt
index 8aec01d6d4..34f55d74a8 100644
--- a/platform.txt
+++ b/platform.txt
@@ -172,3 +172,11 @@ tools.serial_upload.path.linux64={runtime.hardware.path}/tools/linux64
 tools.serial_upload.upload.params.verbose=-d
 tools.serial_upload.upload.params.quiet=n
 tools.serial_upload.upload.pattern="{path}/{cmd}" {serial.port.file} {upload.altID} {upload.usbID} "{build.path}/{build.project_name}.bin"
+
+# blackmagic upload for generic STM32
+tools.bmp_upload.cmd=arm-none-eabi-gdb
+tools.bmp_upload.path={runtime.tools.arm-none-eabi-gcc-6-2017-q2-update.path}/bin/
+tools.bmp_upload.upload.speed=230400
+tools.bmp_upload.upload.params.verbose=-batch
+tools.bmp_upload.upload.params.quiet=--batch-silent
+tools.bmp_upload.upload.pattern="{path}{cmd}" -nx {upload.verbose} -ex "set confirm off" -ex "target extended-remote {serial.port}"  -ex "monitor swdp_scan"  -ex "attach 1" -ex "load" -ex "compare-sections" -ex "kill" "{build.path}/{build.project_name}.elf"