Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
dev:cortex_rus:tools [2015/11/16 15:17] alexeyb создано |
dev:cortex_rus:tools [2015/11/17 09:19] (текущий) alexeyb |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | Для разработки потребуются следующие инструменты: | + | ====STM32F1xx LINUX==== |
+ | ====Для разработки потребуются следующие инструменты:==== | ||
- arm-none-eabi (компиляторы, сборщик, дебаггер) https://launchpad.net/gcc-arm-embedded/+download | - arm-none-eabi (компиляторы, сборщик, дебаггер) https://launchpad.net/gcc-arm-embedded/+download | ||
- openocd (собственно посредник между железом и дебаггером) http://openocd.org/repos/; | - openocd (собственно посредник между железом и дебаггером) http://openocd.org/repos/; | ||
+ | |||
+ | ===Далее используем следующий makefile (STM32F1xx)=== | ||
+ | <file> | ||
+ | |||
+ | EXECUTABLE = $(notdir $(CURDIR)).elf | ||
+ | EXECHEX = $(notdir $(CURDIR)).hex | ||
+ | EXECBIN = $(notdir $(CURDIR)).bin | ||
+ | EXECLIST = $(notdir $(CURDIR)).list | ||
+ | |||
+ | #Tools | ||
+ | TOOLROOT =/opt/gcc-arm-none/bin/arm-none-eabi | ||
+ | CC = $(TOOLROOT)-gcc | ||
+ | LD = $(TOOLROOT)-gcc | ||
+ | AR = $(TOOLROOT)-ar | ||
+ | AS = $(TOOLROOT)-as | ||
+ | OC = $(TOOLROOT)-objcopy | ||
+ | OD = $(TOOLROOT)-objdump | ||
+ | SZ = $(TOOLROOT)-size | ||
+ | #~Tools | ||
+ | |||
+ | #processor specific, CHANGE for NEED | ||
+ | PTYPE = STM32F10X_MD | ||
+ | LDPATH = ./link | ||
+ | LDSCRYPT = link.ld | ||
+ | #processor specific | ||
+ | |||
+ | |||
+ | CFLAGS = -mcpu=cortex-m3 -mthumb -Wall -Wextra -Wimplicit-function-declaration -finline-functions -g -MD | ||
+ | CFLAGS +=-D$(PTYPE) | ||
+ | CFLAGS +=-DUSE_FULL_ASSERT | ||
+ | CFLAGS +=-DDEBUG -DTRACE -DOS_USE_TRACE_SEMIHOSTING_DEBUG -ggdb #debug | ||
+ | #CFLAGS +=-DUSE_STDPERIPH_DRIVER #use std driver or not | ||
+ | CFLAGS +=-DHSE_VALUE=8000000 | ||
+ | |||
+ | AFLAGS += -ahls -mapcs-32 | ||
+ | BINFLAGS = -Obinary | ||
+ | HEXFLAGS = -Oihex | ||
+ | ODFLAGS = -S | ||
+ | |||
+ | |||
+ | LDFLAGS = -L$(LDPATH) -T$(LDPATH)/$(LDSCRYPT) -mthumb -mcpu=cortex-m3 | ||
+ | LDFLAGS +=-nostartfiles -Wl,-Map,$(BINDIR)/$(notdir $(CURDIR)).map --specs=nano.specs | ||
+ | |||
+ | |||
+ | #dir | ||
+ | CMSIS =../00_CMSIS/cmsis | ||
+ | STINC =../00_ST/inc/ | ||
+ | STSRC =../00_ST/src/ | ||
+ | # ========== can change src,obj,bin ========== | ||
+ | SRCDIR = $(CMSIS) | ||
+ | SRCDIR +=. ./init/src ./common/src ./cycle/src ./uscntr/src ./view/src | ||
+ | SRCDIR +=./cmsis_boot ./cmsis_boot/startup | ||
+ | OBJDIR =./obj | ||
+ | BINDIR =./bin | ||
+ | INCPATH =-I$(CMSIS) | ||
+ | |||
+ | INCPATH +=-I./cmsis_boot -I./init/inc -I./ | ||
+ | INCPATH +=-I./common/inc -I./cycle/inc -I./uscntr/inc -I./view/inc | ||
+ | |||
+ | # ========== can change src,obj,bin ========== | ||
+ | |||
+ | # ========== don`t change ========== | ||
+ | SOURCES := $(foreach src,$(SRCDIR), $(wildcard $(src)/*.c)) | ||
+ | INCLUDES := $(wildcard $(INCDIR)/*.h) | ||
+ | OBJECTS := $(patsubst %.c,%.o,$(SOURCES)) | ||
+ | DBJECTS := $(patsubst %.c,%.d,$(SOURCES)) | ||
+ | # ========== don`t change ========== | ||
+ | #~dir | ||
+ | |||
+ | .PHONY: all clean | ||
+ | |||
+ | all: $(SOURCES) $(OBJDIR) $(OBJECTS) $(BINDIR)/$(EXECUTABLE) $(BINDIR)/$(EXECBIN) $(BINDIR)/$(EXECHEX) $(BINDIR)/$(EXECLIST) | ||
+ | |||
+ | |||
+ | $(OBJDIR):$(BINDIR) | ||
+ | mkdir -p $(OBJDIR) | ||
+ | |||
+ | $(BINDIR): | ||
+ | # @echo 'Make bindir' | ||
+ | mkdir -p $(BINDIR) | ||
+ | |||
+ | $(BINDIR)/$(EXECLIST):$(BINDIR)/$(EXECUTABLE) | ||
+ | $(OD) $(ODFLAGS) $< > $(BINDIR)/$(EXECLIST) | ||
+ | |||
+ | $(BINDIR)/$(EXECHEX):$(BINDIR)/$(EXECUTABLE) | ||
+ | $(OC) $(HEXFLAGS) $(BINDIR)/$(EXECUTABLE) $(BINDIR)/$(EXECHEX) | ||
+ | |||
+ | $(BINDIR)/$(EXECBIN):$(BINDIR)/$(EXECUTABLE) | ||
+ | $(OC) $(BINFLAGS) $(BINDIR)/$(EXECUTABLE) $(BINDIR)/$(EXECBIN) | ||
+ | |||
+ | |||
+ | $(BINDIR)/$(EXECUTABLE):$(OBJECTS) | ||
+ | # @echo 'Make execut' | ||
+ | $(LD) $(LDFLAGS) $(LIBRARIES) $(OBJECTS) -o $@ | ||
+ | |||
+ | |||
+ | # $@ name of the object file | ||
+ | # $< name of cpp file | ||
+ | %.o : %.c | ||
+ | $(CC) -c $(CFLAGS) $(INCPATH) $< -o $@ | ||
+ | |||
+ | |||
+ | %.o: %.s | ||
+ | $(AS) $(AFLAGS) -c $< -o $@ | ||
+ | | ||
+ | clean: | ||
+ | rm -f $(OBJECTS) -f $(DBJECTS) -f $(BINDIR)/$(EXECUTABLE) -f $(BINDIR)/$(EXECBIN) -f $(BINDIR)/$(EXECLIST) -f $(BINDIR)/$(EXECHEX) -f $(BINDIR)/*.map | ||
+ | </file> | ||
+ | |||
+ | - TOOLROOT - указываем свой путь до arm-none-eabi; | ||
+ | - SRCDIR - также свои сырцы, нужно указать; | ||
+ | - INCPATH - пути до своих инклудов. | ||
+ | - CMSIS - путь до стд библиотеки арм, | ||
+ | - STINC - путь до стд библиотеки st, | ||
+ | - STSRC - путь до стд библиотеки st, **(при использовании расскоментировать USE_STDPERIPH_DRIVER)** | ||
+ | |||
+ | |||
+ | === Отладка === | ||
+ | Если **make** прошла успешно, можно пользовать отладку файлом **flash_openocd.sh** | ||
+ | состоящим из: | ||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | openocd -f ./openocd.cfg | ||
+ | </code> | ||
+ | ==openocd.cfg== | ||
+ | <code> | ||
+ | source [find interface/stlink-v2.cfg] | ||
+ | set WORKAREASIZE 0x4000 | ||
+ | source [find target/stm32f1x.cfg] | ||
+ | </code> | ||
+ | Далее цепляемся gdb на порт 3333 | ||
+ | |||
+ | === Прошивка === | ||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | openocd -f ./openocd.cfg -f ./openocdflash.cfg | ||
+ | </code> | ||
+ | где **openocdflash.cfg** | ||
+ | <code> | ||
+ | init | ||
+ | reset init | ||
+ | halt | ||
+ | flash write_image erase name.hex | ||
+ | verify_image name.hex | ||
+ | reset | ||
+ | shutdown | ||
+ | </code> | ||
+ | |||
+ | === Среда разработки === | ||
+ | Рекомендую Eclipse for C/C++; | ||
+ | - Создаем проект Makefile project/ Empty Project, | ||
+ | - кормим ему свои наработки в том числе makefile | ||
+ | - |