-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
88 lines (64 loc) · 1.86 KB
/
Copy pathMakefile
File metadata and controls
88 lines (64 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Makefile for the STM32F446RE Nucleo Board
# Toolchain and tools
CC = arm-none-eabi-gcc
OBJCOPY = arm-none-eabi-objcopy
OPENOCD = openocd
# Directories
DEBUG_DIR = Debug
CMSIS_DIR = CMSIS
CONFIG_DIR = Config
DRIVERS_DIR = Drivers
HARDWARE_DIR = Hardware
SRC_DIR = Src
STARTUP_DIR = Startup
# Source files
C_SOURCES = \
$(SRC_DIR)/main.c \
$(SRC_DIR)/pid.c \
$(SRC_DIR)/syscalls.c \
$(SRC_DIR)/sysmem.c \
$(CONFIG_DIR)/sysclock.c \
$(wildcard $(DRIVERS_DIR)/*.c) \
$(wildcard $(HARDWARE_DIR)/*.c)
ASM_SOURCES = $(STARTUP_DIR)/startup_stm32f446retx.s
# Output files
ELF_FILE = $(DEBUG_DIR)/firmware.elf
BIN_FILE = $(DEBUG_DIR)/firmware.bin
# Compiler flags
CFLAGS = -mcpu=cortex-m4 -mthumb -g -O0 \
-I$(SRC_DIR) \
-I$(CMSIS_DIR) \
-I$(CONFIG_DIR) \
-I$(DRIVERS_DIR) \
-I$(HARDWARE_DIR)
LDFLAGS = -T STM32F446RETX_FLASH.ld -lc -lm -lgcc
# Build object files from source files
C_OBJECTS = $(patsubst %.c,$(DEBUG_DIR)/%.o,$(C_SOURCES))
ASM_OBJECTS = $(patsubst %.s,$(DEBUG_DIR)/%.o,$(ASM_SOURCES))
OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS)
# Default target
all: $(ELF_FILE) $(BIN_FILE)
# Compile C source files
$(DEBUG_DIR)/%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
# Compile assembly source files
$(DEBUG_DIR)/%.o: %.s
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
# Link object files to create the ELF file
$(ELF_FILE): $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDFLAGS)
# Generate binary file from ELF file
$(BIN_FILE): $(ELF_FILE)
$(OBJCOPY) -O binary $< $@
# Flash the microcontroller
flash: $(ELF_FILE)
$(OPENOCD) -f /usr/local/share/openocd/scripts/interface/stlink.cfg \
-f /usr/local/share/openocd/scripts/target/stm32f4x.cfg \
-c "program $(ELF_FILE) verify reset exit"
# Clean build artifacts
clean:
rm -rf $(DEBUG_DIR)
# Phony targets
.PHONY: all flash clean