STM32 firmware for a remotely-controlled stepper motor demo with a mobile interface.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

206 lines
5.4 KiB

################################################################
ARCH_FLAGS = -msoft-float -mfloat-abi=soft
ARCH_FLAGS += -mthumb -mcpu=cortex-m3
# Clock speed constants
DEFS += -DF_CPU=72000000UL
DEFS += -DSTM32F10X_MD
DEFS += -DARM_MATH_CM3
DEFS += -DUSE_STDPERIPH_DRIVER
LDSCRIPT = lib/cmsis/stm32_flash.ld
STARTUP_SCRIPT = lib/cmsis/startup_stm32f10x_md.s
################################################################
# Main file
BINARY = main
# Project include dirs
INCL_DIRS := project
# C files
SOURCES := $(shell find project -type f -name "*.c")
#SOURCES += $(shell find lib/sbmp/library -type f -name "*.c")
HEADERS := $(shell find project -type f -name "*.h")
#HEADERS += $(shell find lib/sbmp/library -type f -name "*.h")
#INCL_DIRS += lib/sbmp/library
################################################################
# Add library sources and include paths
LIB_INCL_DIRS =
LIB_SOURCES =
include lib/CMSIS.mk
include lib/SPL.mk
include lib/SBMP.mk
INCL_DIRS += $(LIB_INCL_DIRS)
LIB_OBJS_ = $(LIB_SOURCES:.c=.o)
LIB_OBJS = $(LIB_OBJS_:.S=.o)
# .c -> .o
OBJS = $(SOURCES:%.c=%.o)
OBJS += $(STARTUP_SCRIPT:.s=.o)
LIBNAME = stm32f103spl
LIBFILE = lib/lib$(LIBNAME).a
################################################################
SUBDIR_ROOTS = .
GARBAGE_PATTERNS := *.o *.d *.elf *.bin *.hex *.srec *.list *.map *.dis *.disasm .depend
DIRS := . $(shell find $(SUBDIR_ROOTS) -type d)
GARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(GARBAGE_PATTERNS)))
###############################################################################
###############################################################################
###############################################################################
# Be silent per default, but 'make V=1' will show all compiler calls.
ifneq ($(V),1)
Q := @
NULL := 2>/dev/null
endif
###############################################################################
# Executables
PREFIX ?= arm-none-eabi
CC := $(PREFIX)-gcc
CXX := $(PREFIX)-g++
LD := $(PREFIX)-gcc
AR := $(PREFIX)-ar
AS := $(PREFIX)-as
OBJCOPY := $(PREFIX)-objcopy
SIZE := $(PREFIX)-size
OBJDUMP := $(PREFIX)-objdump
GDB := $(PREFIX)-gdb
STFLASH := $(shell which st-flash)
###############################################################################
# For CMSIS compatibility
DEFS += -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))"
DEFS += -DVERBOSE_LOGGING=1
###############################################################################
# C flags
CFLAGS += -Os -ggdb -std=gnu99 -Wfatal-errors
CFLAGS += -Wall -Wextra -Wshadow
CFLAGS += -Wwrite-strings -Wold-style-definition -Winline -Wmissing-noreturn -Wstrict-prototypes
CFLAGS += -Wredundant-decls -Wfloat-equal -Wsign-compare
CFLAGS += -fno-common -ffunction-sections -fdata-sections -Wunused-function
CFLAGS += -MD -Wno-format-zero-length
CFLAGS += $(INCL_DIRS:%=-I%) $(DEFS)
#-flto
# Special flags to hide warnings in CMSIS
LIB_CFLAGS = -Wno-shadow -Wno-float-equal -Wno-inline -Wno-unused-parameter -Wno-unused
#-Wno-old-style-definition -Wno-strict-prototypes
###############################################################################
# Linker flags
LDFLAGS += --static -lm -lc -nostartfiles -specs=nano.specs
LDFLAGS += -Llib
LDFLAGS += -T$(LDSCRIPT)
LDFLAGS += -Wl,-Map=$(*).map
LDFLAGS += -Wl,--gc-sections
#-specs=nano.specs
###############################################################################
# Used libraries
LDLIBS += -lm -lc -l$(LIBNAME)
LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group
###############################################################################
###############################################################################
###############################################################################
.PHONY: all images clean elf bin hex srec list dis ttyusb ttyacm lib libcheck size
.SUFFIXES: .elf .bin .hex .srec .list .map .images
.SECONDEXPANSION:
.SECONDARY:
all: elf size
elf: $(BINARY).elf
bin: $(BINARY).bin
hex: $(BINARY).hex
srec: $(BINARY).srec
list: $(BINARY).list
images: $(BINARY).images
flash: $(BINARY).flash
dis: $(BINARY).elf
$(Q)$(OBJDUMP) -dS $(BINARY).elf -j .text -j .isr_vector > $(BINARY).dis
lib: CFLAGS += $(LIB_CFLAGS)
lib: $(LIBFILE)
$(LIBFILE): $(LIB_OBJS)
$(Q)$(AR) rcsv $@ $(LIB_OBJS)
libcheck:
$(Q)if [ ! -e $(LIBFILE) ]; then \
echo "--- You must build the lib first! ---"; \
exit 1; \
fi
size: $(BINARY).elf
$(Q)$(SIZE) -A $(BINARY).elf | grep -v " 0"
%.images: %.bin %.hex %.srec %.list %.map
%.bin: %.elf
$(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin
%.hex: %.elf
$(Q)$(OBJCOPY) -Oihex $(*).elf $(*).hex
%.srec: %.elf
$(Q)$(OBJCOPY) -Osrec $(*).elf $(*).srec
%.list: %.elf
$(Q)$(OBJDUMP) -S $(*).elf > $(*).list
%.elf %.map: libcheck $(OBJS) $(HEADERS)
$(Q)$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS) $(LDLIBS) -o $(*).elf
$(Q)./parsemap.php
$(Q)$(SIZE) $(*).elf
%.o: %.c
$(Q)echo "CC $(*).c"
$(Q)$(CC) $(CFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).c
%.o: %.s
$(Q)echo "CC $(*).s"
$(Q)$(CC) $(CFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).s
%.o: %.S
$(Q)echo "CC $(*).S"
$(Q)$(CC) $(CFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).S
clean:
$(Q)$(RM) -r $(GARBAGE)
%.flash: %.bin
@printf " FLASH $<\n"
$(Q)$(STFLASH) write $(*).bin 0x8000000
-include $(OBJS:.o=.d)