Это старая версия документа.
Для разработки потребуются следующие инструменты:
- arm-none-eabi (компиляторы, сборщик, дебаггер) https://launchpad.net/gcc-arm-embedded/+download
- openocd (собственно посредник между железом и дебаггером) http://openocd.org/repos/;
Далее используем следующий makefile
EXECUTABLE = $(notdir $(CURDIR)).elf EXECHEX = $(notdir $(CURDIR)).hex EXECBIN = $(notdir $(CURDIR)).bin EXECLIST = $(notdir $(CURDIR)).list
#Tools TOOLROOT =/opt/gcc-arm-none/bin/arm-none-eabi CC = $(TOOLROOT)-gcc LD = $(TOOLROOT)-gcc AR = $(TOOLROOT)-ar AS = $(TOOLROOT)-as OC = $(TOOLROOT)-objcopy OD = $(TOOLROOT)-objdump SZ = $(TOOLROOT)-size #~Tools
#processor specific, CHANGE for NEED PTYPE = STM32F10X_MD LDPATH = ./link LDSCRYPT = link.ld #processor specific
CFLAGS = -mcpu=cortex-m3 -mthumb -Wall -Wextra -Wimplicit-function-declaration -finline-functions -g -MD CFLAGS +=-D$(PTYPE) CFLAGS +=-DUSE_FULL_ASSERT CFLAGS +=-DDEBUG -DTRACE -DOS_USE_TRACE_SEMIHOSTING_DEBUG -ggdb #debug #CFLAGS +=-DUSE_STDPERIPH_DRIVER #use std driver or not CFLAGS +=-DHSE_VALUE=8000000
AFLAGS += -ahls -mapcs-32 BINFLAGS = -Obinary HEXFLAGS = -Oihex ODFLAGS = -S
LDFLAGS = -L$(LDPATH) -T$(LDPATH)/$(LDSCRYPT) -mthumb -mcpu=cortex-m3 LDFLAGS +=-nostartfiles -Wl,-Map,$(BINDIR)/$(notdir $(CURDIR)).map –specs=nano.specs
#dir CMSIS =../00_CMSIS/cmsis STINC =../00_ST/inc/ STSRC =../00_ST/src/ #
can change src,obj,bin
SRCDIR = $(CMSIS) SRCDIR +=. ./init/src ./common/src ./cycle/src ./uscntr/src ./view/src SRCDIR +=./cmsis_boot ./cmsis_boot/startup OBJDIR =./obj BINDIR =./bin INCPATH =-I$(CMSIS)
INCPATH +=-I./cmsis_boot -I./init/inc -I./ INCPATH +=-I./common/inc -I./cycle/inc -I./uscntr/inc -I./view/inc
STARTUP = ./cmsis_boot/startup/startup_stm32f10x_md.o ./cmsis_boot/system_stm32f10x.o
#
can change src,obj,bin
#
don`t change
SOURCES := $(foreach src,$(SRCDIR), $(wildcard $(src)/*.c)) INCLUDES := $(wildcard $(INCDIR)/*.h) OBJECTS := $(patsubst %.c,%.o,$(SOURCES)) DBJECTS := $(patsubst %.c,%.d,$(SOURCES)) #
don`t change
#~dir
.PHONY: all clean
all: $(SOURCES) $(OBJDIR) $(OBJECTS) $(BINDIR)/$(EXECUTABLE) $(BINDIR)/$(EXECBIN) $(BINDIR)/$(EXECHEX) $(BINDIR)/$(EXECLIST)
$(OBJDIR):$(BINDIR)
mkdir -p $(OBJDIR)
$(BINDIR): # @echo 'Make bindir'
mkdir -p $(BINDIR)
$(BINDIR)/$(EXECLIST):$(BINDIR)/$(EXECUTABLE)
$(OD) $(ODFLAGS) $< > $(BINDIR)/$(EXECLIST)
$(BINDIR)/$(EXECHEX):$(BINDIR)/$(EXECUTABLE)
$(OC) $(HEXFLAGS) $(BINDIR)/$(EXECUTABLE) $(BINDIR)/$(EXECHEX)
$(BINDIR)/$(EXECBIN):$(BINDIR)/$(EXECUTABLE)
$(OC) $(BINFLAGS) $(BINDIR)/$(EXECUTABLE) $(BINDIR)/$(EXECBIN)
$(BINDIR)/$(EXECUTABLE):$(OBJECTS) # @echo 'Make execut'
$(LD) $(LDFLAGS) $(LIBRARIES) $(OBJECTS) -o $@
# $@ name of the object file # $< name of cpp file %.o : %.c
$(CC) -c $(CFLAGS) $(INCPATH) $< -o $@
%.o: %.s
$(AS) $(AFLAGS) -c $< -o $@
clean:
rm -f $(OBJECTS) -f $(DBJECTS) -f $(BINDIR)/$(EXECUTABLE) -f $(BINDIR)/$(EXECBIN) -f $(BINDIR)/$(EXECLIST) -f $(BINDIR)/$(EXECHEX) -f $(BINDIR)/*.map