]> mj.ucw.cz Git - home-hw.git/commitdiff
Generic makefile for the BluePill
authorMartin Mares <mj@ucw.cz>
Wed, 10 Jul 2019 08:13:47 +0000 (10:13 +0200)
committerMartin Mares <mj@ucw.cz>
Wed, 10 Jul 2019 08:13:47 +0000 (10:13 +0200)
mk/bluepill.mk [new file with mode: 0644]
test-blink/Makefile
test-blink/test.c

diff --git a/mk/bluepill.mk b/mk/bluepill.mk
new file mode 100644 (file)
index 0000000..bce93a3
--- /dev/null
@@ -0,0 +1,121 @@
+# Generic Makefile fragment for Blue Pill devices and LibOpenCM3
+#
+# Parameters:
+#
+#      ROOT                    path to root of the repository
+#      BINARY                  binary to build (without extension)
+#      OBJS                    list of object files
+#      LIB_OBJS                list of library object files
+#      WITH_BOOT_LOADER        define if code origin should be shifted by 8K for boot loader
+#      WITH_DFU_FLASH          flashing uses dfu-util
+#
+
+vpath %.c $(ROOT)/lib
+OBJS += $(LIB_OBJS)
+
+OPENCM3_DIR=/home/mj/stm/libopencm3
+DEVICE=stm32f103x8
+
+.PHONY: all
+all: $(BINARY).elf $(BINARY).bin
+
+.PHONY: flash
+flash: $(BINARY).flash
+
+ifneq ($(V),1)
+Q              := @
+NULL           := 2>/dev/null
+endif
+
+include $(OPENCM3_DIR)/mk/genlink-config.mk
+
+ifdef WITH_BOOT_LOADER
+
+# We want to generate a linked script for a different ROM start address
+UCW_LDSCRIPT=bootloader-$(DEVICE).ld
+
+bootloader-$(DEVICE).ld: generated.$(DEVICE).ld
+       @printf "  GENLNK2 $@\n"
+       $(Q)sed '/^ rom /s/ORIGIN = 0x08000000/ORIGIN = 0x08002000/' <$< >$@
+
+else
+
+UCW_LDSCRIPT=$(LDSCRIPT)
+
+endif
+
+PREFIX         ?= arm-none-eabi
+
+CC             := $(PREFIX)-gcc
+CXX            := $(PREFIX)-g++
+LD             := $(PREFIX)-gcc
+AR             := $(PREFIX)-ar
+AS             := $(PREFIX)-as
+OBJCOPY                := $(PREFIX)-objcopy
+OBJDUMP                := $(PREFIX)-objdump
+GDB            := $(PREFIX)-gdb
+OPT            := -Os
+DEBUG          := -ggdb3
+CSTD           ?= -std=c99
+
+TGT_CFLAGS     += $(OPT) $(CSTD) $(DEBUG)
+TGT_CFLAGS     += $(ARCH_FLAGS)
+TGT_CFLAGS     += -Wall -Wextra -Wshadow -Wimplicit-function-declaration
+TGT_CFLAGS     += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes
+TGT_CFLAGS     += -fno-common -ffunction-sections -fdata-sections
+TGT_CFLAGS     += -I. -I../lib
+
+TGT_CPPFLAGS   += -MD
+
+TGT_LDFLAGS    += --static -nostartfiles
+TGT_LDFLAGS    += -T$(UCW_LDSCRIPT)
+TGT_LDFLAGS    += $(ARCH_FLAGS) $(DEBUG)
+TGT_LDFLAGS    += -Wl,-Map=$(*).map -Wl,--cref
+TGT_LDFLAGS    += -Wl,--gc-sections
+ifeq ($(V),99)
+TGT_LDFLAGS    += -Wl,--print-gc-sections
+endif
+
+LDLIBS         += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group
+
+include $(OPENCM3_DIR)/mk/genlink-rules.mk
+
+%.bin: %.elf
+       @printf "  OBJCOPY $(*).bin\n"
+       $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin
+
+%.elf: $(OBJS) $(UCW_LDSCRIPT)
+       @printf "  LD      $(*).elf\n"
+       $(Q)$(LD) $(TGT_LDFLAGS) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $*.elf
+
+%.o: %.c
+       @printf "  CC      $(*).c\n"
+       $(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $@ -c $<
+
+.PHONY: clean
+clean:
+       @printf "  CLEAN\n"
+       $(Q)rm -f *.elf *.bin *.o *.d *.map $(LDSCRIPT) $(UCW_LDSCRIPT)
+
+ifdef WITH_DFU_FLASH
+
+%.flash: %.bin
+       @printf "  FLASH  $<\n"
+       $(Q)dfu-util -a2 -D $(*).bin
+
+else
+
+%.flash: %.bin
+       @printf "  FLASH  $<\n"
+       $(Q)$(ROOT)/bin/st-flash write $(*).bin 0x8000000
+
+.PHONY: reset
+reset: all
+       $(ROOT)/bin/st-flash reset
+
+endif
+
+.SECONDEXPANSION:
+.SECONDARY:
+
+-include $(OBJS:.o=.d)
index a713bd29c9793ea9eda1685d7b56aa56d94eae9f..81ed48bde96d18b8970cd3d7eb0a96ab565c66eb 100644 (file)
@@ -1,85 +1,9 @@
+ROOT=..
 BINARY=test
 OBJS=test.o
+LIB_OBJS=util-debug.o
 
-# Library modules to use
-#vpath %.c ../lib
-#OBJS += util-debug.o
+WITH_BOOT_LOADER=1
+WITH_DFU_FLASH=1
 
-OPENCM3_DIR=/home/mj/stm/libopencm3
-DEVICE=stm32f103x8
-
-all: $(BINARY).elf $(BINARY).bin
-
-flash: $(BINARY).flash
-
-reset: all
-       ../bin/st-flash reset
-
-ifneq ($(V),1)
-Q              := @
-NULL           := 2>/dev/null
-endif
-
-include $(OPENCM3_DIR)/mk/genlink-config.mk
-
-PREFIX         ?= arm-none-eabi
-
-CC             := $(PREFIX)-gcc
-CXX            := $(PREFIX)-g++
-LD             := $(PREFIX)-gcc
-AR             := $(PREFIX)-ar
-AS             := $(PREFIX)-as
-OBJCOPY                := $(PREFIX)-objcopy
-OBJDUMP                := $(PREFIX)-objdump
-GDB            := $(PREFIX)-gdb
-OPT            := -Os
-DEBUG          := -ggdb3
-CSTD           ?= -std=c99
-
-TGT_CFLAGS     += $(OPT) $(CSTD) $(DEBUG)
-TGT_CFLAGS     += $(ARCH_FLAGS)
-TGT_CFLAGS     += -Wall -Wextra -Wshadow -Wimplicit-function-declaration
-TGT_CFLAGS     += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes
-TGT_CFLAGS     += -fno-common -ffunction-sections -fdata-sections
-TGT_CFLAGS     += -I. -I../lib
-
-TGT_CPPFLAGS   += -MD
-
-TGT_LDFLAGS    += --static -nostartfiles
-TGT_LDFLAGS    += -T$(LDSCRIPT)
-TGT_LDFLAGS    += $(ARCH_FLAGS) $(DEBUG)
-TGT_LDFLAGS    += -Wl,-Map=$(*).map -Wl,--cref
-TGT_LDFLAGS    += -Wl,--gc-sections
-ifeq ($(V),99)
-TGT_LDFLAGS    += -Wl,--print-gc-sections
-endif
-
-LDLIBS         += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group
-
-include $(OPENCM3_DIR)/mk/genlink-rules.mk
-
-%.bin: %.elf
-       @printf "  OBJCOPY $(*).bin\n"
-       $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin
-
-%.elf: $(OBJS) $(LDSCRIPT)
-       @printf "  LD      $(*).elf\n"
-       $(Q)$(LD) $(TGT_LDFLAGS) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $*.elf
-
-%.o: %.c
-       @printf "  CC      $(*).c\n"
-       $(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $@ -c $<
-
-.PHONY: clean
-clean:
-       @printf "  CLEAN\n"
-       $(Q)rm -f *.elf *.bin *.o *.d *.map $(LDSCRIPT)
-
-%.flash: %.bin
-       @printf "  FLASH  $<\n"
-       $(Q)../bin/st-flash write $(*).bin 0x8000000
-
-.SECONDEXPANSION:
-.SECONDARY:
-
--include $(OBJS:.o=.d)
+include $(ROOT)/mk/bluepill.mk
index b1c87389465eeff4f801e4f3020be74cfaffe2bf..62c349d86981026465aa4c11e80cd6dbcceb6a43 100644 (file)
@@ -52,6 +52,8 @@ int main(void)
        cm_enable_interrupts();
 
        for (;;) {
+               gpio_toggle(GPIOC, GPIO13);
+               delay_ms(100);
                gpio_toggle(GPIOC, GPIO13);
                delay_ms(500);
        }