Различия
Здесь показаны различия между двумя версиями данной страницы.
| Следующая версия | Предыдущая версия | ||
|
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 | ||
| + | - | ||