啥都不说了,直接上代码,注释相当详细了。
#STM32 makefile template
# 生成的文件名<项目名>
PROJECT = stm32_Mini_Led
# 定义文件格式和文件名
TARGET := $(PROJECT)
TARGET_ELF := $(TARGET).elf
TARGET_BIN := $(TARGET).bin
TARGET_HEX := $(TARGET).hex
OBJCPFLAGS_ELF_TO_BIN = -Obinary
OBJCPFLAGS_ELF_TO_HEX = -Oihex
OBJCPFLAGS_BIN_TO_HEX = -Ibinary -Oihex
# 定义路径
TOP_DIR = .
SCRIPT_DIR := $(TOP_DIR)/scripts
STARTUP_DIR := $(TOP_DIR)/third_party/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup
INC_DIR := -I $(TOP_DIR)/src -I $(TOP_DIR)/src/Driver -I $(TOP_DIR)/src/EDP -I $(TOP_DIR)/src/Network
# 设置shell环境变量
#export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/
# 设置ld链接脚本文件
LDSCRIPT := $(SCRIPT_DIR)/stm32_flash.ld
# 定义编译工具
CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
LD = arm-none-eabi-ld
AR = arm-none-eabi-ar
OBJCP = arm-none-eabi-objcopy
# 定义编译标志
CCFLAGS += -Wall -mcpu=cortex-m3 -mthumb -g -mfloat-abi=soft -march=armv7-m
ASFLAGS += -Wall -mcpu=cortex-m3 -mthumb
LDFLAGS += -T $(LDSCRIPT) #-A armv7-m
LDFLAGS += -L /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1
LDFLAGS += -L /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb
# 要链接的静态库
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libg.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libm.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1/libgcc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libnosys.a
# .c文件中的头文件引用查找路径
CCFLAGS += $(INC_DIR)
# .s文件的flags
#ASFLAGS +=
# .c文件编译时定义宏
CCFLAGS += -D STM32F10X_MD -D USE_STDPERIPH_DRIVER
# 添加启动文件
#SOURCE += $(SCRIPT_DIR)/startup_stm32f10x_md.c
SOURCE_ASM += $(STARTUP_DIR)/gcc_ride7/startup_stm32f10x_md.s
# 展开工作 子目录中的inc文件(inc文件中添加需要编译链接的.c,.s等文件)
-include $(TOP_DIR)/src/make.inc
-include $(TOP_DIR)/third_party/make.inc
# 替换文件后缀
C_OBJS := $(SOURCE:%.c=%.o)
ASM_OBJS := $(SOURCE_ASM:%.s=%.o)
# 编译命令的定义
COMPILE = $(CC) $(CCFLAGS) -c $< -o $@
ASSEMBLE = $(AS) $(ASFLAGS) -c $< -o $@
LINK = $(LD) $+ $(LDFLAGS) $(LDLIBS) -o $@
ELF_TO_BIN = $(OBJCP) $(OBJCPFLAGS_ELF_TO_BIN) $< $@
BIN_TO_HEX = $(OBJCP) $(OBJCPFLAGS_BIN_TO_HEX) $< $@
# 定义伪目标
.PHONY: all clean printf
# 定义规则
all: $(TARGET_HEX)
@echo "build done"
$(TARGET_HEX): $(TARGET_BIN)
$(BIN_TO_HEX)
$(TARGET_BIN): $(TARGET_ELF)
$(ELF_TO_BIN)
$(TARGET_ELF): $(C_OBJS) $(ASM_OBJS)
$(LINK)
$(C_OBJS):%.o:%.c
$(COMPILE)
$(ASM_OBJS):%.o:%.s
$(ASSEMBLE)
printf:
@echo $(ASM_OBJS)
@echo $(ASSEMBLE)
# 清理项
clean:
rm -f $(TARGET_HEX)
rm -f $(TARGET_BIN)
rm -f $(TARGET_ELF)
rm -f $(C_OBJS) $(ASM_OBJS)
@echo "clean done"
这个一个LED流水灯的STM32工程,包含STM32库v3.5.0版本,下载地址
再详细说一下注释中没有的可能有疑问的地方:
# 要链接的静态库
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libg.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libm.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1/libgcc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libnosys.a
-这一块为什么要注释:因为文中使用了
# 设置ld链接脚本文件
LDSCRIPT := $(SCRIPT_DIR)/stm32_flash.ld
/*stm32_flash.ld文件中最后部分内容*/
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libg.a ( * )
libgcc.a ( * )
}
这个ld脚本文件,该文件中已经包含了这些库。
啥都不说了,直接上代码,注释相当详细了。
#STM32 makefile template
# 生成的文件名<项目名>
PROJECT = stm32_Mini_Led
# 定义文件格式和文件名
TARGET := $(PROJECT)
TARGET_ELF := $(TARGET).elf
TARGET_BIN := $(TARGET).bin
TARGET_HEX := $(TARGET).hex
OBJCPFLAGS_ELF_TO_BIN = -Obinary
OBJCPFLAGS_ELF_TO_HEX = -Oihex
OBJCPFLAGS_BIN_TO_HEX = -Ibinary -Oihex
# 定义路径
TOP_DIR = .
SCRIPT_DIR := $(TOP_DIR)/scripts
STARTUP_DIR := $(TOP_DIR)/third_party/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup
INC_DIR := -I $(TOP_DIR)/src -I $(TOP_DIR)/src/Driver -I $(TOP_DIR)/src/EDP -I $(TOP_DIR)/src/Network
# 设置shell环境变量
#export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/
# 设置ld链接脚本文件
LDSCRIPT := $(SCRIPT_DIR)/stm32_flash.ld
# 定义编译工具
CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
LD = arm-none-eabi-ld
AR = arm-none-eabi-ar
OBJCP = arm-none-eabi-objcopy
# 定义编译标志
CCFLAGS += -Wall -mcpu=cortex-m3 -mthumb -g -mfloat-abi=soft -march=armv7-m
ASFLAGS += -Wall -mcpu=cortex-m3 -mthumb
LDFLAGS += -T $(LDSCRIPT) #-A armv7-m
LDFLAGS += -L /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1
LDFLAGS += -L /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb
# 要链接的静态库
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libg.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libm.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1/libgcc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libnosys.a
# .c文件中的头文件引用查找路径
CCFLAGS += $(INC_DIR)
# .s文件的flags
#ASFLAGS +=
# .c文件编译时定义宏
CCFLAGS += -D STM32F10X_MD -D USE_STDPERIPH_DRIVER
# 添加启动文件
#SOURCE += $(SCRIPT_DIR)/startup_stm32f10x_md.c
SOURCE_ASM += $(STARTUP_DIR)/gcc_ride7/startup_stm32f10x_md.s
# 展开工作 子目录中的inc文件(inc文件中添加需要编译链接的.c,.s等文件)
-include $(TOP_DIR)/src/make.inc
-include $(TOP_DIR)/third_party/make.inc
# 替换文件后缀
C_OBJS := $(SOURCE:%.c=%.o)
ASM_OBJS := $(SOURCE_ASM:%.s=%.o)
# 编译命令的定义
COMPILE = $(CC) $(CCFLAGS) -c $< -o $@
ASSEMBLE = $(AS) $(ASFLAGS) -c $< -o $@
LINK = $(LD) $+ $(LDFLAGS) $(LDLIBS) -o $@
ELF_TO_BIN = $(OBJCP) $(OBJCPFLAGS_ELF_TO_BIN) $< $@
BIN_TO_HEX = $(OBJCP) $(OBJCPFLAGS_BIN_TO_HEX) $< $@
# 定义伪目标
.PHONY: all clean printf
# 定义规则
all: $(TARGET_HEX)
@echo "build done"
$(TARGET_HEX): $(TARGET_BIN)
$(BIN_TO_HEX)
$(TARGET_BIN): $(TARGET_ELF)
$(ELF_TO_BIN)
$(TARGET_ELF): $(C_OBJS) $(ASM_OBJS)
$(LINK)
$(C_OBJS):%.o:%.c
$(COMPILE)
$(ASM_OBJS):%.o:%.s
$(ASSEMBLE)
printf:
@echo $(ASM_OBJS)
@echo $(ASSEMBLE)
# 清理项
clean:
rm -f $(TARGET_HEX)
rm -f $(TARGET_BIN)
rm -f $(TARGET_ELF)
rm -f $(C_OBJS) $(ASM_OBJS)
@echo "clean done"
这个一个LED流水灯的STM32工程,包含STM32库v3.5.0版本,下载地址
再详细说一下注释中没有的可能有疑问的地方:
# 要链接的静态库
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libg.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libm.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1/libgcc.a
#LDLIBS += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libnosys.a
-这一块为什么要注释:因为文中使用了
# 设置ld链接脚本文件
LDSCRIPT := $(SCRIPT_DIR)/stm32_flash.ld
/*stm32_flash.ld文件中最后部分内容*/
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libg.a ( * )
libgcc.a ( * )
}
这个ld脚本文件,该文件中已经包含了这些库。
举报