Skip to content

Commit 58e50e7

Browse files
Add partial support for a DFU bootloader for the F4
1 parent 47c94bc commit 58e50e7

File tree

4 files changed

+53
-6
lines changed

4 files changed

+53
-6
lines changed

STM32F4/boards.txt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
menu.usb_cfg=USB configuration
44
menu.opt=Optimize
5+
menu.upload_method=Upload method
56

67
##############################################################
78
discovery_f407.name=STM32 Discovery F407
@@ -30,6 +31,7 @@ discovery_f407.build.density=STM32_HIGH_DENSITY
3031
discovery_f407.build.error_led_port=GPIOD
3132
discovery_f407.build.error_led_pin=14
3233
discovery_f407.build.board=STM32DiscoveryF407
34+
discovery_f407.build.vect_flags=-DVECT_TAB_FLASH -DUSER_ADDR_ROM=(uint32)0x08000000
3335

3436
discovery_f407.menu.usb_cfg.usb_nc=USB inactive
3537
discovery_f407.menu.usb_cfg.usb_nc.build.cpu_flags=-DUSB_NC
@@ -92,16 +94,37 @@ generic_f407v.build.density=STM32_HIGH_DENSITY
9294
generic_f407v.build.error_led_port=GPIOA
9395
generic_f407v.build.error_led_pin=7
9496
generic_f407v.build.board=STM32GenericF407VET6
97+
generic_f407v.build.vect_flags=-DVECT_TAB_FLASH -DUSER_ADDR_ROM=(uint32)0x08000000
9598

9699
generic_f407v.menu.usb_cfg.usb_nc=USB inactive
97100
generic_f407v.menu.usb_cfg.usb_nc.build.cpu_flags=-DUSB_NC
98101

99102
generic_f407v.menu.usb_cfg.usb_serial=USB serial (CDC)
100103
generic_f407v.menu.usb_cfg.usb_serial.build.cpu_flags=-DSERIAL_USB
101-
102104
generic_f407v.menu.usb_cfg.usb_msc=USB Mass Storage (MSC)
103105
generic_f407v.menu.usb_cfg.usb_msc.build.cpu_flags=-DUSB_MSC
104106

107+
#note STLink is the default from the main block of config above, so does not need settings for everything
108+
generic_f407v.menu.upload_method.STLinkMethod=STLink
109+
generic_f407v.menu.upload_method.STLinkMethod.upload.protocol=STLink
110+
generic_f407v.menu.upload_method.STLinkMethod.upload.tool=stlink_upload
111+
generic_f407v.menu.upload_method.STLinkMethod.upload.dfuse_addr=0x08004000
112+
generic_f407v.menu.upload_method.STLinkMethod.build.vect_flags=-DVECT_TAB_FLASH -DUSER_ADDR_ROM=(uint32)0x08000000
113+
114+
115+
generic_f407v.menu.upload_method.DFUUploadMethod=STM32duino bootloader
116+
generic_f407v.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu
117+
generic_f407v.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload
118+
generic_f407v.menu.upload_method.DFUUploadMethod.build.vect_flags=-DVECT_TAB_FLASH -DUSER_ADDR_ROM=(uint32)0x08004000
119+
generic_f407v.menu.upload_method.DFUUploadMethod.build.ldscript=ld/bootloader_8004000.ld
120+
generic_f407v.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003
121+
generic_f407v.menu.upload_method.DFUUploadMethod.upload.altID=2
122+
123+
124+
125+
126+
127+
105128
#-- Optimizations
106129
generic_f407v.menu.opt.osstd=Smallest (default)
107130
generic_f407v.menu.opt.osstd.build.flags.optimize=-Os
@@ -158,6 +181,7 @@ stm32f4stamp.build.density=STM32_HIGH_DENSITY
158181
stm32f4stamp.build.error_led_port=GPIOD
159182
stm32f4stamp.build.error_led_pin=14
160183
stm32f4stamp.build.board=STM32F4StampF405
184+
stm32f4stamp.build.vect_flags=-DVECT_TAB_FLASH -DUSER_ADDR_ROM=(uint32)0x08000000
161185

162186
stm32f4stamp.menu.usb_cfg.usb_nc=USB inactive
163187
stm32f4stamp.menu.usb_cfg.usb_nc.build.cpu_flags=-DUSB_NC

STM32F4/cores/maple/libmaple/libmaple.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@
4747
#define STACK_TOP 0x20000800
4848
#elif defined(BOARD_freeflight)
4949
*/
50+
#ifndef USER_ADDR_ROM
5051
#define USER_ADDR_ROM 0x08000000
52+
#endif
5153
#define USER_ADDR_RAM 0x20000C00
5254
#define STACK_TOP 0x20000800
5355
/*

STM32F4/platform.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ version=0.1.0
1010
# ----------------------
1111
compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/
1212
compiler.c.cmd=arm-none-eabi-gcc
13-
compiler.c.flags=-c -g {build.flags.optimize} -Wall -MMD -std=gnu11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -DBOARD_{build.variant} -D{build.vect} -DERROR_LED_PORT={build.error_led_port} -DERROR_LED_PIN={build.error_led_pin}
13+
compiler.c.flags=-c -g {build.flags.optimize} -Wall -MMD -std=gnu11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -DBOARD_{build.variant} {build.vect_flags} -DERROR_LED_PORT={build.error_led_port} -DERROR_LED_PIN={build.error_led_pin}
1414
compiler.c.elf.cmd=arm-none-eabi-g++
1515
compiler.c.elf.flags={build.flags.optimize} -Wl,--gc-sections {build.flags.ldspecs}
1616
compiler.S.cmd=arm-none-eabi-gcc
1717
compiler.S.flags=-c -g -x assembler-with-cpp -MMD
1818
compiler.cpp.cmd=arm-none-eabi-g++
19-
compiler.cpp.flags=-c -g {build.flags.optimize} -Wall -MMD -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -DBOARD_{build.variant} -D{build.vect} -DERROR_LED_PORT={build.error_led_port} -DERROR_LED_PIN={build.error_led_pin}
19+
compiler.cpp.flags=-c -g {build.flags.optimize} -Wall -MMD -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -DBOARD_{build.variant} {build.vect_flags} -DERROR_LED_PORT={build.error_led_port} -DERROR_LED_PIN={build.error_led_pin}
2020
compiler.ar.cmd=arm-none-eabi-ar
2121
compiler.ar.flags=rcs
2222
compiler.objcopy.cmd=arm-none-eabi-objcopy
@@ -64,13 +64,13 @@ compiler.libs.c.flags="-I{build.system.path}/libmaple" "-I{build.core.path}/libm
6464
# ---------------------
6565

6666
## Compile c files
67-
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {build.cpu_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
67+
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {build.cpu_flags} {build.vect_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
6868

6969
## Compile c++ files
70-
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {build.cpu_flags} {build.hs_flag} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
70+
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {build.cpu_flags} {build.vect_flags} {build.hs_flag} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
7171

7272
## Compile S files
73-
recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.S.extra_flags} {build.extra_flags} {build.cpu_flags} {build.hs_flag} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
73+
recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.S.extra_flags} {build.extra_flags} {build.cpu_flags} {build.vect_flags} {build.hs_flag} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
7474

7575
## Create archives
7676
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* STM32F4xx high density linker script for
3+
* JTAG (bare metal, no bootloader) builds.
4+
*/
5+
6+
MEMORY
7+
{
8+
ccmram (rw): ORIGIN = 0x10000000, LENGTH = 64K
9+
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
10+
rom (rx) : ORIGIN = 0x08004000, LENGTH = 496K
11+
}
12+
13+
/* GROUP(libcs3_stm32_high_density.a) */
14+
15+
REGION_ALIAS("REGION_TEXT", rom);
16+
REGION_ALIAS("REGION_DATA", ram);
17+
REGION_ALIAS("REGION_BSS", ram);
18+
REGION_ALIAS("REGION_RODATA", rom);
19+
20+
_FLASH_BUILD = 1;
21+
INCLUDE common.inc

0 commit comments

Comments
 (0)