ubuntu(TX2)编译stm32F407工程Maflie文件
######################################
# target
######################################
#ARCH=arm
TARGET = u_main_v1.1
# debug build?
DEBUG = 1
# optimization
#OPT = -O1
OPT = -Og
# Build path
BUILD_DIR = Output
######################################
# source
######################################
# C sources
# wildcard 获取当前目录下全部文件
# 设置全部需要编译的文件
C_SOURCES =
C_SOURCES += $(wildcard *.c ./Src/*.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_crc.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c)
C_SOURCES += $(wildcard *.c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c)
C_SOURCES += $(wildcard *.c ./Middlewares/Third_Party/FatFs/src/*.c)
C_SOURCES += $(wildcard *.c ./Middlewares/Third_Party/FatFs/src/option/syscall.c)
C_SOURCES += $(wildcard *.c ./Middlewares/Third_Party/FatFs/src/option/cc936.c)
C_SOURCES += $(wildcard *.c ./Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c)
C_SOURCES += $(wildcard *.c ./Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/*.c)
C_SOURCES += $(wildcard *.c ./Middlewares/Third_Party/FreeRTOS/Source/*.c)
C_SOURCES += $(wildcard *.c ./Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/*.c)
C_SOURCES += $(wildcard *.c ./protocol/*.c)
C_SOURCES += $(wildcard *.c ./modules/alarm/*.c)
C_SOURCES += $(wildcard *.c ./modules/chassisFsm/*.c)
C_SOURCES += $(wildcard *.c ./modules/chassisFsm/states/*.c)
C_SOURCES += $(wildcard *.c ./modules/clock/*.c)
C_SOURCES += $(wildcard *.c ./modules/cmdline/*.c)
C_SOURCES += $(wildcard *.c ./modules/common/communication/*.c)
C_SOURCES += $(wildcard *.c ./modules/common/fsm/*.c)
C_SOURCES += $(wildcard *.c ./modules/common/log/*.c)
C_SOURCES += $(wildcard *.c ./modules/common/utils/*.c)
C_SOURCES += $(wildcard *.c ./modules/config/*.c)
C_SOURCES += $(wildcard *.c ./modules/drivers/imu_spi/*.c)
C_SOURCES += $(wildcard *.c ./modules/drivers/sd_card/*.c)
C_SOURCES += $(wildcard *.c ./modules/drivers/stmfalsh/*.c)
C_SOURCES += $(wildcard *.c ./modules/drivers/upper_power/*.c)
C_SOURCES += $(wildcard *.c ./modules/drivers/W5500/*.c)
C_SOURCES += $(wildcard *.c ./modules/ftp/*.c)
C_SOURCES += $(wildcard *.c ./modules/internet/*.c)
C_SOURCES += $(wildcard *.c ./modules/joystick/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/drives/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/drives/keya/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/drives/bld/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/drives/aqmdbl/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/drives/aqm/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/fillter/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/init_config/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/pid/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/pid/fuzzy/*.c)
C_SOURCES += $(wildcard *.c ./modules/motorCtrl/test_monitor/*.c)
C_SOURCES += $(wildcard *.c ./modules/onlineUpdate/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/bms/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/imu/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/joy/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/led/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/odom/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/temperature/*.c)
C_SOURCES += $(wildcard *.c ./modules/sensor/ultrasonic/*.c)
C_SOURCES += $(wildcard *.c ./modules/sysMonitor/*.c)
C_SOURCES += $(wildcard *.c ./interface/testMethod/Unity-master/src/*.c)
C_SOURCES += $(wildcard *.c ./modules/testMethod/chassis_ut/*.c)
C_SOURCES += $(wildcard *.c ./modules/testMethod/chassis_ut/test_cases/*.c)
C_SOURCES += $(wildcard *.c ./modules/testMethod/faultInjector/*.c)
C_SOURCES += $(wildcard *.c ./modules/testMethod/hardFault/*.c)
C_SOURCES += $(wildcard *.c ./modules/testMethod/performance/*.c)
C_SOURCES += $(wildcard *.c ./modules/upperCommFsm/*.c)
C_SOURCES += $(wildcard *.c ./modules/upperCommFsm/states/*.c)
# ASM sources
ASM_SOURCES = startup_stm32f407xx.s
#ASM_SOURCES += $(wildcard *.s ./*.s)
#######################################
# Tools
#######################################
PREFIX = arm-none-eabi-
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m4 -mthumb -Wall
# fpu
FPU = -mfpu=fpv4-sp-d16
# float-abi
FLOAT-ABI = -mfloat-abi=hard
# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
# macros for gcc
# AS defines
AS_DEFS =
# C defines
C_DEFS = \
-DUSE_HAL_DRIVER \
-DSTM32F407xx \
-D__WDG \
-DUSE_STDPERIPH_DRIVER \
-DLINUX_CI
#-DUSING_MAKE_COMPL \
# AS includes
AS_INCLUDES = \
# C includes
PROJECTDRIVERPATH = Drivers/STM32F4xx_HAL_Driver/Inc
CMSISPATH = Drivers/CMSIS
MIDD_SOURCE_PATH = Middlewares/Third_Party/FreeRTOS/Source
# addprefix的功能增加前缀,例如$(addprefix -I,./Inc)执行后为 -I ./Inc
C_INCLUDES =
C_INCLUDES += $(addprefix -I,./Inc)
C_INCLUDES += $(addprefix -I,$(PROJECTDRIVERPATH))
C_INCLUDES += $(addprefix -I,./Drivers/STM32F4xx_HAL_Driver/Inc)
C_INCLUDES += $(addprefix -I,$(PROJECTDRIVERPATH)/Legacy)
C_INCLUDES += $(addprefix -I,$(MIDD_SOURCE_PATH)/portable/GCC/ARM_CM4F)
C_INCLUDES += $(addprefix -I,./Middlewares/Third_Party/FatFs/src)
C_INCLUDES += $(addprefix -I,./Middlewares/ST/STM32_USB_Device_Library/Core/Inc)
C_INCLUDES += $(addprefix -I,./Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc)
C_INCLUDES += $(addprefix -I,$(CMSISPATH)/Device/ST/STM32F4xx/Include)
C_INCLUDES += $(addprefix -I,./Middlewares/Third_Party/FatFs/src)
C_INCLUDES += $(addprefix -I,$(CMSISPATH)/Include)
C_INCLUDES += $(addprefix -I,$(MIDD_SOURCE_PATH)/include)
C_INCLUDES += $(addprefix -I,$(MIDD_SOURCE_PATH)/CMSIS_RTOS)
C_INCLUDES += $(addprefix -I,./protocol)
C_INCLUDES += $(addprefix -I,./modules)
C_INCLUDES += $(addprefix -I,./Src)
C_INCLUDES += $(addprefix -I,./modules/alarm)
C_INCLUDES += $(addprefix -I,./modules/chassisFsm)
C_INCLUDES += $(addprefix -I,./modules/chassisFsm/states)
C_INCLUDES += $(addprefix -I,./modules/clock)
C_INCLUDES += $(addprefix -I,./modules/cmdline)
C_INCLUDES += $(addprefix -I,./modules/common/communication)
C_INCLUDES += $(addprefix -I,./modules/common/fsm)
C_INCLUDES += $(addprefix -I,./modules/common/log)
C_INCLUDES += $(addprefix -I,./modules/common/utils)
C_INCLUDES += $(addprefix -I,./modules/config)
C_INCLUDES += $(addprefix -I,./modules/drivers/imu_spi)
C_INCLUDES += $(addprefix -I,./modules/drivers/sd_card)
C_INCLUDES += $(addprefix -I,./modules/drivers/stmfalsh)
C_INCLUDES += $(addprefix -I,./modules/drivers/upper_power)
C_INCLUDES += $(addprefix -I,./modules/ftp)
C_INCLUDES += $(addprefix -I,./modules/internet)
C_INCLUDES += $(addprefix -I,./modules/joystick)
C_INCLUDES += $(addprefix -I,./modules/motorCtrl)
C_INCLUDES += $(addprefix -I,./modules/motorCtrl/drives)
C_INCLUDES += $(addprefix -I,./modules/motorCtrl/fillter)
C_INCLUDES += $(addprefix -I,./modules/motorCtrl/init_config)
C_INCLUDES += $(addprefix -I,./modules/motorCtrl/pid)
C_INCLUDES += $(addprefix -I,./modules/motorCtrl/pid/fuzzy)
C_INCLUDES += $(addprefix -I,./modules/motorCtrl/test_monitor)
C_INCLUDES += $(addprefix -I,./modules/onlineUpdate)
C_INCLUDES += $(addprefix -I,./modules/sensor)
C_INCLUDES += $(addprefix -I,./modules/sensor/bms)
C_INCLUDES += $(addprefix -I,./modules/sensor/imu)
C_INCLUDES += $(addprefix -I,./modules/sensor/joy)
C_INCLUDES += $(addprefix -I,./modules/sensor/led)
C_INCLUDES += $(addprefix -I,./modules/sensor/odom)
C_INCLUDES += $(addprefix -I,./modules/sensor/temperature)
C_INCLUDES += $(addprefix -I,./modules/sensor/ultrasonic)
C_INCLUDES += $(addprefix -I,./modules/sysMonitor)
C_INCLUDES += $(addprefix -I,./interface/testMethod/Unity-master/src)
C_INCLUDES += $(addprefix -I,./modules/testMethod/chassis_ut)
C_INCLUDES += $(addprefix -I,./modules/testMethod/chassis_ut/test_cases)
C_INCLUDES += $(addprefix -I,./modules/testMethod/faultInjector)
C_INCLUDES += $(addprefix -I,./modules/testMethod/hardFault)
C_INCLUDES += $(addprefix -I,./modules/testMethod/performance)
C_INCLUDES += $(addprefix -I,./modules/upperCommFsm)
C_INCLUDES += $(addprefix -I,./modules/upperCommFsm/states)
C_INCLUDES += $(addprefix -I,./interface)
C_INCLUDES += $(addprefix -I,./interface/alarm)
C_INCLUDES += $(addprefix -I,./interface/chassisFsm)
C_INCLUDES += $(addprefix -I,./interface/chassisFsm/states)
C_INCLUDES += $(addprefix -I,./interface/clock)
C_INCLUDES += $(addprefix -I,./interface/cmdline)
C_INCLUDES += $(addprefix -I,./interface/common/communication)
C_INCLUDES += $(addprefix -I,./interface/common/fsm)
C_INCLUDES += $(addprefix -I,./interface/common/log)
C_INCLUDES += $(addprefix -I,./interface/common/utils)
C_INCLUDES += $(addprefix -I,./interface/config)
C_INCLUDES += $(addprefix -I,./interface/drivers/imu_spi)
C_INCLUDES += $(addprefix -I,./interface/drivers/sd_card)
C_INCLUDES += $(addprefix -I,./interface/drivers/stmfalsh)
C_INCLUDES += $(addprefix -I,./interface/drivers/upper_power)
C_INCLUDES += $(addprefix -I,./interface/drivers/W5500)
C_INCLUDES += $(addprefix -I,./interface/drivers/W5500)
C_INCLUDES += $(addprefix -I,./interface/ftp)
C_INCLUDES += $(addprefix -I,./interface/internet)
C_INCLUDES += $(addprefix -I,./interface/joystick)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/drives)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/drives/aqm)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/drives/aqmdbl)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/drives/bld)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/drives/keya)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/fillter)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/init_config)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/pid/fuzzy)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/pid)
C_INCLUDES += $(addprefix -I,./interface/motorCtrl/test_monitor)
C_INCLUDES += $(addprefix -I,./interface/onlineUpdate)
C_INCLUDES += $(addprefix -I,./interface/sensor)
C_INCLUDES += $(addprefix -I,./interface/sensor/bms)
C_INCLUDES += $(addprefix -I,./interface/sensor/imu)
C_INCLUDES += $(addprefix -I,./interface/sensor/joy)
C_INCLUDES += $(addprefix -I,./interface/sensor/led)
C_INCLUDES += $(addprefix -I,./interface/sensor/odom)
C_INCLUDES += $(addprefix -I,./interface/sensor/temperature)
C_INCLUDES += $(addprefix -I,./interface/sensor/ultrasonic)
C_INCLUDES += $(addprefix -I,./interface/sysMonitor)
C_INCLUDES += $(addprefix -I,./interface/testMethod/Unity-master/examples)
C_INCLUDES += $(addprefix -I,./interface/testMethod/Unity-master/src)
C_INCLUDES += $(addprefix -I,./interface/testMethod/chassis_ut)
C_INCLUDES += $(addprefix -I,./interface/testMethod/chassis_ut/test_cases)
C_INCLUDES += $(addprefix -I,./interface/testMethod/faultInjector)
C_INCLUDES += $(addprefix -I,./interface/testMethod/hardFault)
C_INCLUDES += $(addprefix -I,./interface/testMethod/performance)
C_INCLUDES += $(addprefix -I,./interface/upperCommFsm)
# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -s -fdata-sections -ffunction-sections
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
endif
# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
# link script
LDSCRIPT = STM32F407ZGTx_FLASH.ld
# libraries
LIBS = -lc -lm -lnosys
LIBDIR =
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
LDFLAGS += -mcpu=cortex-m4 -mthumb
LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
LDFLAGS += -Wl,--gc-sections
LDFLAGS += -std=gnu99
LDFLAGS += -u_printf_float
#######################################
# default action: build all
#######################################
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
# list of objects
# notdir去掉文件名中的路径部分
# :.c = .o的意思是C文件对应相应的.o文件
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))
OBJ_DIR = obj
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
@echo $(notdir $(<:.c=.o))
$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
@$(AS) -c $(CFLAGS) $< -o $@
@echo $(notdir $(<:.s=.o))
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
@$(CC) $(OBJECTS) $(LDFLAGS) -o $@
@echo linking...
$(SZ) $@
rm -fR $(BUILD_DIR)/$(OBJ_DIR)
mkdir $(BUILD_DIR)/$(OBJ_DIR)
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(HEX) $< $@
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(BIN) $< $@
mv -f $(BUILD_DIR)/*.o $(BUILD_DIR)/$(OBJ_DIR)/
mv -f $(BUILD_DIR)/*.d $(BUILD_DIR)/$(OBJ_DIR)/
mv -f $(BUILD_DIR)/*.lst $(BUILD_DIR)/$(OBJ_DIR)/
$(BUILD_DIR):
mkdir $@
#######################################
# clean up
#######################################
clean:
@-rm -rf $(BUILD_DIR)/*
flash:
export LD_LIBRARY_PATH=/usr/local/lib
st-flash --reset write $(BUILD_DIR)/$(TARGET).bin 0x8000000
flash_app:
st-flash --reset write $(BUILD_DIR)/$(TARGET).bin 0x800C400
flash_jlink:
openocd -f interface/jlink.cfg -f target/stm32f4x.cfg 2>/dev/null & \
telnet localhost 4444
erase:
st-flash erase
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)
# *** EOF ***