|
@@ -0,0 +1,161 @@
|
|
|
|
+```makefile
|
|
|
|
+# Copyright (c) 2016, James Jackson
|
|
|
|
+# All rights reserved.
|
|
|
|
+
|
|
|
|
+# Redistribution and use in source and binary forms, with or without
|
|
|
|
+# modification, are permitted provided that the following conditions are met:
|
|
|
|
+
|
|
|
|
+# 1. Redistributions of source code must retain the above copyright notice, this
|
|
|
|
+# list of conditions and the following disclaimer.
|
|
|
|
+# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
+# this list of conditions and the following disclaimer in the documentation
|
|
|
|
+# and/or other materials provided with the distribution.
|
|
|
|
+
|
|
|
|
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
|
|
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
|
|
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
|
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+TARGET ?= ledblink
|
|
|
|
+
|
|
|
|
+SERIAL_DEVICE ?= /dev/ttyUSB0
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# GNU ARM Embedded Toolchain
|
|
|
|
+#################################
|
|
|
|
+CC=arm-none-eabi-gcc
|
|
|
|
+CXX=arm-none-eabi-g++
|
|
|
|
+LD=arm-none-eabi-ld
|
|
|
|
+AR=arm-none-eabi-ar
|
|
|
|
+AS=arm-none-eabi-as
|
|
|
|
+CP=arm-none-eabi-objcopy
|
|
|
|
+OD=arm-none-eabi-objdump
|
|
|
|
+NM=arm-none-eabi-nm
|
|
|
|
+SIZE=arm-none-eabi-size
|
|
|
|
+A2L=arm-none-eabi-addr2line
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# Working directories
|
|
|
|
+#################################
|
|
|
|
+BREEZY_DIR = ../../../
|
|
|
|
+ROOT = .
|
|
|
|
+SRC_DIR = $(ROOT)
|
|
|
|
+CMSIS_DIR = $(BREEZY_DIR)/lib/CMSIS
|
|
|
|
+STDPERIPH_DIR = $(BREEZY_DIR)/lib/STM32F10x_StdPeriph_Driver
|
|
|
|
+OBJECT_DIR = $(ROOT)/obj
|
|
|
|
+BIN_DIR = $(ROOT)/obj
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# Source Files
|
|
|
|
+#################################
|
|
|
|
+ASOURCES = $(BREEZY_DIR)/startup_stm32f10x_md_gcc.s
|
|
|
|
+
|
|
|
|
+VPATH := $(SRC_DIR):$(SRC_DIR)/startups
|
|
|
|
+
|
|
|
|
+# Search path and source files for the CMSIS sources
|
|
|
|
+VPATH := $(VPATH):$(CMSIS_DIR)/CM3/CoreSupport:$(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x
|
|
|
|
+CMSIS_SRC = $(notdir $(wildcard $(CMSIS_DIR)/CM3/CoreSupport/*.c \
|
|
|
|
+ $(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x/*.c))
|
|
|
|
+
|
|
|
|
+# Search path and source files for the ST stdperiph library
|
|
|
|
+VPATH := $(VPATH):$(STDPERIPH_DIR)/src
|
|
|
|
+STDPERIPH_SRC = $(notdir $(wildcard $(STDPERIPH_DIR)/src/*.c))
|
|
|
|
+
|
|
|
|
+CSOURCES = $(BREEZY_DIR)/drv_system_stm32f10x.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_uart_stm32f10x.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_gpio.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_i2c.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_adc.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_spi.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_pwm.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_serial.c \
|
|
|
|
+ $(BREEZY_DIR)/drv_timer.c \
|
|
|
|
+ $(BREEZY_DIR)/printf.c \
|
|
|
|
+ $(CMSIS_SRC) \
|
|
|
|
+ $(STDPERIPH_SRC)
|
|
|
|
+
|
|
|
|
+CXXSOURCES = $(ROOT)/ledblink.cpp \
|
|
|
|
+ $(BREEZY_DIR)/main.cpp \
|
|
|
|
+
|
|
|
|
+INCLUDE_DIRS = $(SRC_DIR) \
|
|
|
|
+ $(BREEZY_DIR) \
|
|
|
|
+ $(STDPERIPH_DIR)/inc \
|
|
|
|
+ $(CMSIS_DIR)/CM3/CoreSupport \
|
|
|
|
+ $(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# Object List
|
|
|
|
+#################################
|
|
|
|
+OBJECTS=$(addsuffix .o,$(addprefix $(OBJECT_DIR)/$(TARGET),$(basename $(ASOURCES))))
|
|
|
|
+OBJECTS+=$(addsuffix .o,$(addprefix $(OBJECT_DIR)/$(TARGET),$(basename $(CSOURCES))))
|
|
|
|
+OBJECTS+=$(addsuffix .o,$(addprefix $(OBJECT_DIR)/$(TARGET),$(basename $(CXXSOURCES))))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# Target Output Files
|
|
|
|
+#################################
|
|
|
|
+TARGET_ELF=$(BIN_DIR)/$(TARGET).elf
|
|
|
|
+TARGET_HEX=$(BIN_DIR)/$(TARGET).hex
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# Flags
|
|
|
|
+#################################
|
|
|
|
+MCFLAGS=-mcpu=cortex-m3 -mthumb
|
|
|
|
+OPTIMIZE = -Os
|
|
|
|
+DEFS=-DTARGET_STM32F10X_MD -D__CORTEX_M4 -D__FPU_PRESENT -DWORDS_STACK_SIZE=200 -DSTM32F10X_MD -DUSE_STDPERIPH_DRIVER
|
|
|
|
+CFLAGS=-c $(MCFLAGS) $(DEFS) $(OPTIMIZE) $(addprefix -I,$(INCLUDE_DIRS)) -std=c99
|
|
|
|
+CXXFLAGS=-c $(MCFLAGS) $(DEFS) $(OPTIMIZE) $(addprefix -I,$(INCLUDE_DIRS)) -std=c++11
|
|
|
|
+CXXFLAGS+=-U__STRICT_ANSI__
|
|
|
|
+LDSCRIPT=$(BREEZY_DIR)/stm32_flash.ld
|
|
|
|
+LDFLAGS =-T $(LDSCRIPT) $(MCFLAGS) -lm -nostartfiles -lc --specs=rdimon.specs $(ARCH_FLAGS) $(LTO_FLAGS) $(DEBUG_FLAGS) -static -Wl,-gc-sections
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# Build
|
|
|
|
+#################################
|
|
|
|
+$(TARGET_HEX): $(TARGET_ELF)
|
|
|
|
+ $(CP) -O ihex --set-start 0x8000000 $< $@
|
|
|
|
+
|
|
|
|
+$(TARGET_ELF): $(OBJECTS)
|
|
|
|
+ $(CXX) -o $@ $^ $(LDFLAGS)
|
|
|
|
+ $(SIZE) $(TARGET_ELF)
|
|
|
|
+
|
|
|
|
+$(BIN_DIR)/$(TARGET)%.o: %.cpp
|
|
|
|
+ @mkdir -p $(dir $@)
|
|
|
|
+ @echo %% $(notdir $<)
|
|
|
|
+ @$(CXX) -c -o $@ $(CXXFLAGS) $<
|
|
|
|
+
|
|
|
|
+$(BIN_DIR)/$(TARGET)%.o: %.c
|
|
|
|
+ @mkdir -p $(dir $@)
|
|
|
|
+ @echo %% $(notdir $<)
|
|
|
|
+ @$(CC) -c -o $@ $(CFLAGS) $<
|
|
|
|
+
|
|
|
|
+$(BIN_DIR)/$(TARGET)%.o: %.s
|
|
|
|
+ @mkdir -p $(dir $@)
|
|
|
|
+ @echo %% $(notdir $<)
|
|
|
|
+ @$(CC) -c -o $@ $(CFLAGS) $<
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#################################
|
|
|
|
+# Recipes
|
|
|
|
+#################################
|
|
|
|
+.PHONY: all flash clean
|
|
|
|
+
|
|
|
|
+clean:
|
|
|
|
+ rm -f $(OBJECTS) $(TARGET_ELF) $(TARGET_HEX) $(BIN_DIR)/output.map
|
|
|
|
+
|
|
|
|
+flash: $(TARGET_HEX)
|
|
|
|
+ stty -F $(SERIAL_DEVICE) raw speed 921600 -crtscts cs8 -parenb -cstopb -ixon
|
|
|
|
+ stm32flash -w $(TARGET_HEX) -v -g 0x0 -b 921600 $(SERIAL_DEVICE)
|
|
|
|
+
|
|
|
|
+all: $(TARGET_HEX)
|
|
|
|
+```
|