====STM32F1xx LINUX====
====Для разработки потребуются следующие инструменты:====
- arm-none-eabi (компиляторы, сборщик, дебаггер) https://launchpad.net/gcc-arm-embedded/+download
- openocd (собственно посредник между железом и дебаггером) http://openocd.org/repos/;
===Далее используем следующий makefile (STM32F1xx)===
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
- TOOLROOT - указываем свой путь до arm-none-eabi;
- SRCDIR - также свои сырцы, нужно указать;
- INCPATH - пути до своих инклудов.
- CMSIS - путь до стд библиотеки арм,
- STINC - путь до стд библиотеки st,
- STSRC - путь до стд библиотеки st, **(при использовании расскоментировать USE_STDPERIPH_DRIVER)**
=== Отладка ===
Если **make** прошла успешно, можно пользовать отладку файлом **flash_openocd.sh**
состоящим из:
#!/bin/bash
openocd -f ./openocd.cfg
==openocd.cfg==
source [find interface/stlink-v2.cfg]
set WORKAREASIZE 0x4000
source [find target/stm32f1x.cfg]
Далее цепляемся gdb на порт 3333
=== Прошивка ===
#!/bin/bash
openocd -f ./openocd.cfg -f ./openocdflash.cfg
где **openocdflash.cfg**
init
reset init
halt
flash write_image erase name.hex
verify_image name.hex
reset
shutdown
=== Среда разработки ===
Рекомендую Eclipse for C/C++;
- Создаем проект Makefile project/ Empty Project,
- кормим ему свои наработки в том числе makefile
-