Initial commit
This commit is contained in:
103
firmware/Makefile
Normal file
103
firmware/Makefile
Normal file
@@ -0,0 +1,103 @@
|
||||
TARGET = stm32-usb-freertos
|
||||
BUILD_DIR = Build
|
||||
|
||||
# --- Исходники ---
|
||||
# 1. Приложение
|
||||
C_SOURCES = \
|
||||
App/Src/main.c
|
||||
|
||||
# 2. FreeRTOS
|
||||
C_SOURCES += \
|
||||
Middlewares/FreeRTOS/croutine.c \
|
||||
Middlewares/FreeRTOS/event_groups.c \
|
||||
Middlewares/FreeRTOS/list.c \
|
||||
Middlewares/FreeRTOS/queue.c \
|
||||
Middlewares/FreeRTOS/tasks.c \
|
||||
Middlewares/FreeRTOS/timers.c \
|
||||
Middlewares/FreeRTOS/portable/GCC/ARM_CM3/port.c \
|
||||
Middlewares/FreeRTOS/portable/MemMang/heap_4.c
|
||||
|
||||
# 3. TinyUSB
|
||||
# Базовые файлы
|
||||
C_SOURCES += \
|
||||
Middlewares/TinyUSB/src/tusb.c \
|
||||
Middlewares/TinyUSB/src/common/tusb_fifo.c \
|
||||
Middlewares/TinyUSB/src/device/usbd.c \
|
||||
Middlewares/TinyUSB/src/device/usbd_control.c \
|
||||
Middlewares/TinyUSB/src/class/cdc/cdc_device.c
|
||||
# Драйвер для STM32 (Portable)
|
||||
C_SOURCES += \
|
||||
Middlewares/TinyUSB/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
|
||||
|
||||
# 4. Startup
|
||||
ASM_SOURCES = App/Src/startup_stm32f103xb.s
|
||||
|
||||
# --- Настройки компилятора ---
|
||||
PREFIX = arm-none-eabi-
|
||||
CC = $(PREFIX)gcc
|
||||
AS = $(PREFIX)gcc -x assembler-with-cpp
|
||||
CP = $(PREFIX)objcopy
|
||||
SZ = $(PREFIX)size
|
||||
|
||||
MCU = -mcpu=cortex-m3 -mthumb -DSTM32F103xB
|
||||
|
||||
# Includes
|
||||
C_INCLUDES = \
|
||||
-IApp/Inc \
|
||||
-IDrivers/CMSIS/Core/Include \
|
||||
-IDrivers/CMSIS/Device/ST/STM32F1xx/Include \
|
||||
-IMiddlewares/FreeRTOS/include \
|
||||
-IMiddlewares/FreeRTOS/portable/GCC/ARM_CM3 \
|
||||
-IMiddlewares/TinyUSB/src
|
||||
|
||||
# TinyUSB config specific defines
|
||||
C_DEFS = \
|
||||
-DSTM32F103xB \
|
||||
-DCFG_TUSB_MCU=OPT_MCU_STM32F1
|
||||
|
||||
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) -O2 -Wall -fdata-sections -ffunction-sections -g -gdwarf-2
|
||||
|
||||
# Linker
|
||||
LDSCRIPT = stm32f103c8.ld
|
||||
LIBS = -lc -lm -lnosys
|
||||
LDFLAGS = $(MCU) -T$(LDSCRIPT) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
|
||||
|
||||
# --- Правила сборки ---
|
||||
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
|
||||
|
||||
# Компиляция C
|
||||
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
|
||||
@mkdir -p $(dir $@)
|
||||
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
|
||||
|
||||
# Компиляция ASM
|
||||
$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
|
||||
@mkdir -p $(dir $@)
|
||||
$(AS) -c $(CFLAGS) $< -o $@
|
||||
|
||||
# Линковка
|
||||
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
|
||||
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
|
||||
$(SZ) $@
|
||||
|
||||
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR)
|
||||
$(CP) -O ihex $< $@
|
||||
|
||||
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR)
|
||||
$(CP) -O binary -S $< $@
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir $@
|
||||
|
||||
# Генерация списка объектов (автоматически из C_SOURCES)
|
||||
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 -rf $(BUILD_DIR)
|
||||
|
||||
flash:
|
||||
st-flash write $(BUILD_DIR)/$(TARGET).bin 0x8000000
|
||||
|
||||
Reference in New Issue
Block a user