Makefile
Определим кросс-компилятор из уже установленного toolchain:
# Compilator prefixCROSS_PREFIX=arm-softfloat-linux-gnueabi-Затем нам нужно определить комплилятор и утилиту для копирования объектных файлов:
# Compilators and utilsCC=$(CROSS_PREFIX)gccOBJCOPY=$(CROSS_PREFIX)objcopyДобавим пути и платформу для внешних заголовочных файлов:
# PathsSTM_PATH=../../stlink/exampleLIBS_STM_PATH=$(STM_PATH)/libs_stm# PlatformPLATFORM=stm32f4xxПервичные флаги для компилятора содержат необходимые опции для компилятора и сборщика, а также опции оптимизации и специальные настройки под ядро мк:
# Primary compiler flagsCFLAGS=-g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdincCFLAGS+= -mcpu=cortex-m3 -DSTM32F4XXВторичные же флаги содержат пути библиотек и заголовочных файлов для компилятора и сброщика, а также карту памяти для сборки кода:
# Secondary compiler flagsCFLAGS+= -I.CFLAGS+= -I$(LIBS_STM_PATH)/inc/baseCFLAGS+= -I$(LIBS_STM_PATH)/inc/core_supportCFLAGS+= -I$(LIBS_STM_PATH)/inc/device_supportCFLAGS+= -Wl,-T,stm32f4xxxg_flash.ld# Linker flagsLDFLAGS=-L.Определим входные файлы и правила сборки, очистки для них, а также правила для загрузки прошивки в мк, т.к. прошивка стандартными средствами st-util не работает, то воспользуетмся дополнительной утилитой для прошивки:
# Sources and objectsSRCS=$(wildcard *.c)OBJS=$(SRCS:.c=.o)# Rules for compileall: firmware.bin# Making binary firmware file%bin: %elf $(OBJCOPY) -O binary $^ $@# Making elffirmware.elf: $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)# Making objects%.o: $.c $(CC) $(CFLAGS) -c -o $@ $^# Rules for cleanclean: rm -rf *.o *.elf *.bin# Rules for write firmware to mcuwrite: firmware.bin qstlink2 -cewV ./firmware.bin# PHONY.PHONY: all clean