STM32F1xx LINUX

Для разработки потребуются следующие инструменты:

  1. arm-none-eabi (компиляторы, сборщик, дебаггер) https://launchpad.net/gcc-arm-embedded/+download
  2. 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
  1. TOOLROOT - указываем свой путь до arm-none-eabi;
  2. SRCDIR - также свои сырцы, нужно указать;
  3. INCPATH - пути до своих инклудов.
  4. CMSIS - путь до стд библиотеки арм,
  5. STINC - путь до стд библиотеки st,
  6. 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++;

  1. Создаем проект Makefile project/ Empty Project,
  2. кормим ему свои наработки в том числе makefile
dev/cortex_rus/tools.txt · Последние изменения: 2015/11/17 09:19 — alexeyb
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0