mirror of
https://github.com/NawfalMotii79/PLFM_RADAR.git
synced 2026-06-08 22:47:16 +00:00
9f3eb756f9
Closes the link for the STM32F746ZGT7 bring-up:
- linker/STM32F746ZGTx_FLASH.ld: 1 MB flash @ 0x08000000, 256 KB RAM @
0x20010000 (SRAM1+SRAM2 contiguous), 64 KB DTCM for stack/heap, 16 KB
ITCM. Standard Cube-style section layout.
- 9_1_3_C_Cpp_Code/usb_device.{h,c}: MX_USB_DEVICE_Init wiring CDC class
+ interface into hUsbDeviceFS.
- 9_1_3_C_Cpp_Code/usbd_conf.{h,c}: HAL PCD bridge — hpcd_USB_OTG_FS,
USBD_LL_* callbacks, HAL_PCD_MspInit (PA11/PA12 AF10, OTG_FS clock,
OTG_FS_IRQn), static allocator for USBD_malloc.
- 9_1_3_C_Cpp_Code/usbd_desc.{h,c}: device + string descriptors, VID
0x0483 / PID 0x5740 (STM32 VCP), serial derived from 96-bit UID.
- 9_1_3_C_Cpp_Code/usbd_cdc_if.{h,c}: CDC_Transmit_FS + class callbacks;
host-to-device bytes forwarded via weak CDC_on_receive hook so
USBHandler can override from C++ without a hard dep.
Makefile:
- default target now 'link' (produces firmware.elf/.bin/.hex).
- APP_CPP no longer excludes main.cpp; LIB_CPP no longer excludes
gps_handler.cpp.
- USB_C picks up Core + CDC class .c files (minus *_template.c).
- Drops vendor system_stm32f7xx.c — the app-customised copy in
9_1_1_C_Cpp_Libraries/ is the real one; keeping both caused duplicate
symbols.
Incidental fixes to main.cpp (pre-existing bugs exposed by first real
compile):
- DIAG_GPIO at main.cpp:662-663 was called with 3 args; macro takes
(subsys, name, port, pin). Passed the STATUS0/STATUS1 port+pin pair.
- PI used at main.cpp:1589-1594 for atan2 conversions but never
defined. Added a local #define PI 3.14159265358979323846f near the
top of the file.
Result: firmware.elf = 118 548 B text / 776 B data / 12 672 B bss.
Fits comfortably in 1 MB flash; DTCM stack/heap clears 64 KB with room.
131 lines
4.6 KiB
Makefile
131 lines
4.6 KiB
Makefile
# ============================================================================
|
|
# AERIS-10 STM32F746ZGT7 firmware build
|
|
# ============================================================================
|
|
# Part: STM32F746ZGT7 (Cortex-M7, 1 MB flash, 320 KB RAM, 216 MHz, LQFP144)
|
|
# Toolchain: arm-none-eabi-gcc 15.x (brew --cask gcc-arm-embedded)
|
|
#
|
|
# Targets:
|
|
# make -- compile + link, produces firmware.elf/.bin/.hex (default)
|
|
# make compile -- compile only (stops at objects)
|
|
# make clean -- remove build/
|
|
# ============================================================================
|
|
|
|
# ---- toolchain -------------------------------------------------------------
|
|
PREFIX := arm-none-eabi-
|
|
CC := $(PREFIX)gcc
|
|
CXX := $(PREFIX)g++
|
|
AS := $(PREFIX)gcc -x assembler-with-cpp
|
|
LD := $(PREFIX)g++
|
|
OBJCOPY := $(PREFIX)objcopy
|
|
SIZE := $(PREFIX)size
|
|
|
|
# ---- tree ------------------------------------------------------------------
|
|
BUILD := build
|
|
OBJDIR := $(BUILD)/obj
|
|
|
|
VENDOR := vendor
|
|
APP := 9_1_3_C_Cpp_Code
|
|
LIB := 9_1_1_C_Cpp_Libraries
|
|
|
|
# ---- target part + CPU flags ----------------------------------------------
|
|
MCU := -mcpu=cortex-m7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard
|
|
DEFS := -DSTM32F746xx -DUSE_HAL_DRIVER -DARM_MATH_CM7 -D__FPU_PRESENT=1
|
|
|
|
# ---- include paths (order matters; app overrides vendor on ambiguity) -----
|
|
INC := \
|
|
-I$(APP) \
|
|
-I$(LIB) \
|
|
-I$(VENDOR)/cmsis_core/Include \
|
|
-I$(VENDOR)/cmsis_device_f7/Include \
|
|
-I$(VENDOR)/stm32f7xx_hal_driver/Inc \
|
|
-I$(VENDOR)/stm32_mw_usb_device/Core/Inc \
|
|
-I$(VENDOR)/stm32_mw_usb_device/Class/CDC/Inc
|
|
|
|
# ---- warnings / optimisation ----------------------------------------------
|
|
OPT := -Og -g3
|
|
WARN := -Wall -Wextra -Wno-unused-parameter -Wno-unused-function \
|
|
-Wno-missing-field-initializers \
|
|
-Wno-error=incompatible-pointer-types \
|
|
-Wno-error=discarded-qualifiers \
|
|
-Wno-error=int-conversion \
|
|
-Wno-error=implicit-function-declaration
|
|
COMMON := $(MCU) $(DEFS) $(INC) $(OPT) $(WARN) -ffunction-sections -fdata-sections -fno-common
|
|
|
|
CFLAGS := $(COMMON) -std=gnu11
|
|
CXXFLAGS := $(COMMON) -std=gnu++17 -fno-exceptions -fno-rtti -fno-threadsafe-statics
|
|
ASFLAGS := $(MCU) $(DEFS) -g3
|
|
|
|
# ---- sources ---------------------------------------------------------------
|
|
# App C/C++ — PR 2 adds usb_device.c, usbd_conf.c, usbd_desc.c, usbd_cdc_if.c
|
|
# (wildcard picks them up) and re-enables main.cpp + gps_handler.cpp.
|
|
APP_C := $(wildcard $(APP)/*.c)
|
|
APP_CPP := $(wildcard $(APP)/*.cpp)
|
|
LIB_C := $(wildcard $(LIB)/*.c)
|
|
LIB_CPP := $(wildcard $(LIB)/*.cpp)
|
|
|
|
# Vendor HAL: each _hal_<x>.c is guarded by HAL_<X>_MODULE_ENABLED in
|
|
# stm32f7xx_hal_conf.h, so compiling all of them is safe. Skip ST's
|
|
# *_template.c stubs (user-copy boilerplate, not compile targets).
|
|
HAL_C := $(filter-out %_template.c, $(wildcard $(VENDOR)/stm32f7xx_hal_driver/Src/*.c))
|
|
# USB Device library: Core + CDC class (skip *_template.c user stubs).
|
|
USB_C := $(filter-out %_template.c, \
|
|
$(wildcard $(VENDOR)/stm32_mw_usb_device/Core/Src/*.c) \
|
|
$(wildcard $(VENDOR)/stm32_mw_usb_device/Class/CDC/Src/*.c))
|
|
# system_stm32f7xx.c already lives in 9_1_1_C_Cpp_Libraries/ (app-customised);
|
|
# drop the vendor copy to avoid duplicate symbols.
|
|
SYS_C :=
|
|
STARTUP := $(VENDOR)/cmsis_device_f7/Source/Templates/gcc/startup_stm32f746xx.s
|
|
|
|
SRCS_C := $(APP_C) $(LIB_C) $(HAL_C) $(USB_C) $(SYS_C)
|
|
SRCS_CPP := $(APP_CPP) $(LIB_CPP)
|
|
SRCS_S := $(STARTUP)
|
|
|
|
OBJS := \
|
|
$(patsubst %.c,$(OBJDIR)/%.o,$(SRCS_C)) \
|
|
$(patsubst %.cpp,$(OBJDIR)/%.o,$(SRCS_CPP)) \
|
|
$(patsubst %.s,$(OBJDIR)/%.o,$(SRCS_S))
|
|
|
|
DEPS := $(OBJS:.o=.d)
|
|
|
|
# ---- link ------------------------------------------------------------------
|
|
LDSCRIPT := linker/STM32F746ZGTx_FLASH.ld
|
|
LDFLAGS := $(MCU) -T$(LDSCRIPT) -Wl,--gc-sections -Wl,-Map=$(BUILD)/firmware.map \
|
|
-specs=nano.specs -specs=nosys.specs -static
|
|
|
|
ELF := $(BUILD)/firmware.elf
|
|
BIN := $(BUILD)/firmware.bin
|
|
HEX := $(BUILD)/firmware.hex
|
|
|
|
# ---- rules -----------------------------------------------------------------
|
|
.PHONY: all compile link clean size
|
|
|
|
all: link
|
|
|
|
compile: $(OBJS)
|
|
@echo "compiled $(words $(OBJS)) objects"
|
|
|
|
link: $(ELF)
|
|
|
|
$(ELF): $(OBJS) $(LDSCRIPT)
|
|
$(LD) $(LDFLAGS) $(OBJS) -o $@ -lm
|
|
$(SIZE) $@
|
|
$(OBJCOPY) -O binary $@ $(BIN)
|
|
$(OBJCOPY) -O ihex $@ $(HEX)
|
|
|
|
$(OBJDIR)/%.o: %.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
|
|
|
|
$(OBJDIR)/%.o: %.cpp
|
|
@mkdir -p $(dir $@)
|
|
$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@
|
|
|
|
$(OBJDIR)/%.o: %.s
|
|
@mkdir -p $(dir $@)
|
|
$(AS) $(ASFLAGS) -c $< -o $@
|
|
|
|
clean:
|
|
rm -rf $(BUILD)
|
|
|
|
-include $(DEPS)
|