From 7e0d0852a281bdb2faa7277b5d95e8bef16bd0c9 Mon Sep 17 00:00:00 2001 From: yankun Date: Tue, 3 Feb 2026 17:31:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 224 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..90bc28d --- /dev/null +++ b/Makefile @@ -0,0 +1,224 @@ +########################################################################################################################## +# 文件自动生成于 STM32CubeIDE +# +# 项目: demo +# MCU: STM32F429IGTx +# 编译器: GCC ARM Embedded +########################################################################################################################## + +####################################### +# 路径定义 +####################################### +# 构建输出目录 +BUILD_DIR = build + +####################################### +# 工具链设置 +####################################### +# 工具链路径(如果工具链不在PATH中,请修改此处) +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 + +####################################### +# 目标MCU +####################################### +MCU = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard + +####################################### +# 编译选项 +####################################### +# 优化选项 +OPT = -O2 + +# 调试选项 +DEBUG = -g -gdwarf-2 + +# 生成依赖信息 +DEPFLAGS = -MMD -MP -MF"$(@:%.o=%.d)" + +# C编译选项 +CFLAGS = $(MCU) $(OPT) $(DEBUG) -Wall -fdata-sections -ffunction-sections + +# C++编译选项 +CXXFLAGS = $(CFLAGS) + +# 汇编选项 +ASFLAGS = $(MCU) $(DEBUG) -Wa,--warn + +# 链接选项 +LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(DEBUG) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections + +# 库 +LIBS = -lc -lm -lnosys +LIBDIR = +LDFLAGS += $(LIBDIR) $(LIBS) + +####################################### +# 宏定义 +####################################### +# C定义 +C_DEFS = \ +-DUSE_HAL_DRIVER \ +-DSTM32F429xx \ +-DARM_MATH_CM4 \ +-D__FPU_PRESENT=1 \ +-D__FPU_USED=1 + +####################################### +# 包含路径 +####################################### +# C包含路径 +C_INCLUDES = \ +-ICore/Inc \ +-IDrivers/STM32F4xx_HAL_Driver/Inc \ +-IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy \ +-IDrivers/CMSIS/Device/ST/STM32F4xx/Include \ +-IDrivers/CMSIS/Include \ +-IMiddlewares/Third_Party/FreeRTOS/Source/include \ +-IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \ +-IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F + +####################################### +# 源文件 +####################################### +# Core源文件 +C_SOURCES = \ +Core/Src/main.c \ +Core/Src/freertos.c \ +Core/Src/stm32f4xx_hal_msp.c \ +Core/Src/stm32f4xx_it.c \ +Core/Src/system_stm32f4xx.c \ +Core/Src/syscalls.c \ +Core/Src/sysmem.c + +# HAL驱动源文件 +C_SOURCES += \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c + +# FreeRTOS源文件 +C_SOURCES += \ +Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ +Middlewares/Third_Party/FreeRTOS/Source/croutine.c \ +Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ +Middlewares/Third_Party/FreeRTOS/Source/list.c \ +Middlewares/Third_Party/FreeRTOS/Source/queue.c \ +Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \ +Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ +Middlewares/Third_Party/FreeRTOS/Source/timers.c \ +Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ +Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c + +# 汇编源文件 +ASM_SOURCES = \ +Core/Startup/startup_stm32f429igtx.s + +####################################### +# 目标文件 +####################################### +# 目标名称 +TARGET = demo + +# 链接脚本 +LDSCRIPT = STM32F429IGTX_FLASH.ld + +####################################### +# 默认目标 +####################################### +all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin + +####################################### +# 构建步骤 +####################################### + +# 创建构建目录 +$(BUILD_DIR): + mkdir -p $@ + +# C源文件编译 +$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) + @echo "编译: $<" + $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(<:.c=.lst) $(C_INCLUDES) $(C_DEFS) $(DEPFLAGS) -o $@ $< + +# 汇编源文件编译 +$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) + @echo "汇编: $<" + $(AS) -c $(ASFLAGS) $(C_INCLUDES) $(C_DEFS) -o $@ $< + +# 链接 +$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile + @echo "链接: $@" + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + @echo "输出大小:" + $(SZ) $@ + +# 生成HEX文件 +$(BUILD_DIR)/$(TARGET).hex: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR) + $(HEX) $< $@ + +# 生成BIN文件 +$(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR) + $(BIN) $< $@ + +####################################### +# 对象文件列表 +####################################### +OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) +vpath %.c $(sort $(dir $(C_SOURCES))) +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) +vpath %.s $(sort $(dir $(ASM_SOURCES))) + +####################################### +# 清理 +####################################### +clean: + -rm -fR $(BUILD_DIR) + +####################################### +# 依赖 +####################################### +-include $(wildcard $(BUILD_DIR)/*.d) + +####################################### +# 烧录目标(使用OpenOCD,需要根据实际情况修改) +####################################### +flash: $(BUILD_DIR)/$(TARGET).elf + openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit" + +####################################### +# 调试目标(使用GDB,需要根据实际情况修改) +####################################### +debug: $(BUILD_DIR)/$(TARGET).elf + arm-none-eabi-gdb $(BUILD_DIR)/$(TARGET).elf + +####################################### +# 显示帮助信息 +####################################### +help: + @echo "可用的make目标:" + @echo " all - 编译项目并生成elf、hex和bin文件" + @echo " clean - 清理构建目录" + @echo " flash - 烧录程序到MCU(需要OpenOCD)" + @echo " debug - 启动GDB调试器" + @echo " help - 显示此帮助信息" + +.PHONY: all clean flash debug help