TARGET = stm32-usb-freertos BUILD_DIR = Build # Приложение C_SOURCES = \ App/Src/main.c \ App/Src/audio_adc.c \ App/Src/audio_processor.c \ App/Src/usb_descriptors.c \ App/Src/system_stm32f1xx.c \ # 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 # 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 \ Middlewares/TinyUSB/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c # CMSIS-DSP sources C_SOURCES += \ $(CMSIS_DSP)/Source/TransformFunctions/arm_cfft_radix8_f32.c \ $(CMSIS_DSP)/Source/TransformFunctions/arm_bitreversal2.c \ $(CMSIS_DSP)/Source/TransformFunctions/arm_rfft_fast_f32.c \ $(CMSIS_DSP)/Source/TransformFunctions/arm_rfft_fast_init_f32.c \ $(CMSIS_DSP)/Source/TransformFunctions/arm_cfft_f32.c \ $(CMSIS_DSP)/Source/TransformFunctions/arm_cfft_init_f32.c \ $(CMSIS_DSP)/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c \ $(CMSIS_DSP)/Source/CommonTables/arm_const_structs.c \ $(CMSIS_DSP)/Source/CommonTables/arm_common_tables.c \ $(CMSIS_DSP)/Source/FastMathFunctions/arm_cos_f32.c # CMSIS-DSP CMSIS_DSP = Middlewares/CMSIS-DSP # 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 # 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 \ -I$(CMSIS_DSP)/Include \ -I$(CMSIS_DSP)/PrivateInclude # Defines C_DEFS = \ -DSTM32F103xB \ -DCFG_TUSB_MCU=OPT_MCU_STM32F1 \ -DARM_MATH_CM3 CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) -Os -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 -Wl,--no-warn-rwx-segments # LDFLAGS = $(MCU) -T$(LDSCRIPT) --specs=nano.specs --specs=nosys.specs \ # -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections LIBS = -Wl,--start-group -lc_nano -lm -lgcc -lnosys -Wl,--end-group LDFLAGS = $(MCU) -T$(LDSCRIPT) $(LIBS) \ -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref \ -Wl,--gc-sections \ -Wl,--no-warn-rwx-segments # --- Генерация списка объектов --- 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))) # --- Правила сборки --- all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin # Компиляция C файлов $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) $(CC) -c $(CFLAGS) $< -o $@ # Компиляция ASM файлов $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) $(AS) -c $(CFLAGS) $< -o $@ # Линковка $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) -o $@ $(SZ) $@ # Генерация HEX $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(CP) -O ihex $< $@ # Генерация BIN $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(CP) -O binary -S $< $@ # Создание директории Build $(BUILD_DIR): mkdir -p $@ clean: rm -rf $(BUILD_DIR) flash: st-flash write $(BUILD_DIR)/$(TARGET).bin 0x8000000 .PHONY: all clean flash