Сегодня из Чип-и-Дипа пришли-таки ко мне комплектующие. До этого я уже немного искал, как же работать с STM32. Нашел множество примеров, наиболее выдающиеся вот:
раз,
два. Первый (и подобные ему) сразу отметаем, т.к. требует Eclipse. Второй вроде бы подходит.
Накачал я много чего разного, но решил начать со сборки простейшего проекта по второй статье.
Итак, начал я с того, что установил stlink и средства разработки под arm:
yaourt -S stlink
yaourt -S arm-none-eabi
Далее я скачал образец разработки для STM32:
git clone
https://github.com/h0rr0rrdrag0n/stm32vldiscovery-linux-template И подправил Makefile (в дальнейшем, возможно, попробую cmake):
BIN=stm32vldiscovery-linux-template
TOOLS_PATH=/usr/arm-none-eabi
TOOLS_PREFIX=arm-none-eabi-
TOOLS_VERSION=4.5.1
CFLAGS=-c -mcpu=cortex-m3 -mthumb -Wall -O0 -mapcs-frame -D__thumb2__=1
CFLAGS+=-msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3
CFLAGS+=-march=armv7-m -mfix-cortex-m3-ldrd -ffunction-sections -fdata-sections
CFLAGS+=-I./cmsis -I./stm32_lib -I.
ASFLAGS=-mcpu=cortex-m3 -I./cmsis -I./stm32_lib -gdwarf-2 -gdwarf-2
LDFLAGS=-static -mcpu=cortex-m3 -mthumb -mthumb-interwork -Wl,--start-group
LDFLAGS+=-L$(TOOLS_PATH)/lib/thumb2 -lc -lg -lstdc++ -lsupc++ -lgcc -lm
#LDFLAGS+=--section-start=.text=0x8000000
LDFLAGS+=-Wl,--end-group -Xlinker -Map -Xlinker $(BIN).map -Xlinker
LDFLAGS+=-T ./stm32_lib/device_support/gcc/stm32f100rb_flash.ld -o $(BIN).elf
#CC=$(TOOLS_PATH)/bin/gcc
#AS=$(TOOLS_PATH)/bin/as
#SIZE=$(TOOLS_PATH)/bin/size
CC=$(TOOLS_PREFIX)gcc
AS=$(TOOLS_PREFIX)as
SIZE=$(TOOLS_PREFIX)size
CMSISSRC=./cmsis/core_cm3.c
STM32_LIBSRC=./stm32_lib/system_stm32f10x.c ./stm32_lib/stm32f10x_it.c
STM32_LIBSRC+=./stm32_lib/stm32f10x_rcc.c ./stm32_lib/stm32f10x_gpio.c
SRC=main.c
OBJ=core_cm3.o system_stm32f10x.o stm32f10x_it.o startup_stm32f10x_md_vl.o
OBJ+=stm32f10x_rcc.o stm32f10x_gpio.o
OBJ+=main.o
all: ccmsis cstm32_lib cc ldall
$(SIZE) -B $(BIN).elf
ccmsis: $(CMSISSRC)
$(CC) $(CFLAGS) $(CMSISSRC)
cstm32_lib: $(STM32_LIBSRC)
$(CC) $(CFLAGS) $(STM32_LIBSRC)
$(AS) $(ASFLAGS) ./stm32_lib/device_support/gcc/startup_stm32f10x_md_vl.S -o startup_stm32f10x_md_vl.o
cc: $(SRC)
$(CC) $(CFLAGS) $(SRC)
ldall:
$(CC) $(OBJ) $(LDFLAGS)
.PHONY: clean load
clean:
rm -f $(OBJ) $(BIN).map
#$(BIN).elf
make clean -C ./stlink/build/
load: $(BIN).elf
st-util -p 1234 $(BIN).elf
# ./flashing_stm32vldiscovery.sh $(BIN).elf
Запускаем make:
make && make clean
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -O0 -mapcs-frame -D__thumb2__=1 -msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3 -march=armv7-m -mfix-cortex-m3-ldrd -ffunction-sections -fdata-sections -I./cmsis -I./stm32_lib -I. ./cmsis/core_cm3.c
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -O0 -mapcs-frame -D__thumb2__=1 -msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3 -march=armv7-m -mfix-cortex-m3-ldrd -ffunction-sections -fdata-sections -I./cmsis -I./stm32_lib -I. ./stm32_lib/system_stm32f10x.c ./stm32_lib/stm32f10x_it.c ./stm32_lib/stm32f10x_rcc.c ./stm32_lib/stm32f10x_gpio.c
arm-none-eabi-as -mcpu=cortex-m3 -I./cmsis -I./stm32_lib -gdwarf-2 -gdwarf-2 ./stm32_lib/device_support/gcc/startup_stm32f10x_md_vl.S -o startup_stm32f10x_md_vl.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -O0 -mapcs-frame -D__thumb2__=1 -msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3 -march=armv7-m -mfix-cortex-m3-ldrd -ffunction-sections -fdata-sections -I./cmsis -I./stm32_lib -I. main.c
arm-none-eabi-gcc core_cm3.o system_stm32f10x.o stm32f10x_it.o startup_stm32f10x_md_vl.o stm32f10x_rcc.o stm32f10x_gpio.o main.o -static -mcpu=cortex-m3 -mthumb -mthumb-interwork -Wl,--start-group -L/usr/arm-none-eabi/lib/thumb2 -lc -lg -lstdc++ -lsupc++ -lgcc -lm -Wl,--end-group -Xlinker -Map -Xlinker stm32vldiscovery-linux-template.map -Xlinker -T ./stm32_lib/device_support/gcc/stm32f100rb_flash.ld -o stm32vldiscovery-linux-template.elf
arm-none-eabi-size -B stm32vldiscovery-linux-template.elf
text data bss dec hex filename
6728 56 156 6940 1b1c stm32vldiscovery-linux-template.elf
rm -f core_cm3.o system_stm32f10x.o stm32f10x_it.o startup_stm32f10x_md_vl.o stm32f10x_rcc.o stm32f10x_gpio.o main.o stm32vldiscovery-linux-template.map
make clean -C ./stlink/build/
и получаем файлик stm32vldiscovery-linux-template.elf.
Подключаю макетку к ST-LINK, включаю в USB. В директории /dev появилась ссылка: /dev/stlinkv2_1 -> bus/usb/005/006. Права на устройство udev выставил в 0666, так что, проблем с работой от пользователя быть не должно.
Запускаем make load и получаем фигвам:
make load
st-util -p 1234 stm32vldiscovery-linux-template.elf
non-option ARGV-elements: stm32vldiscovery-linux-template.elf
2012-10-09T17:45:36 INFO src/stlink-usb.c: -- exit_dfu_mode
2012-10-09T17:45:36 INFO src/stlink-common.c: Loading device parameters....
2012-10-09T17:45:36 WARN src/stlink-common.c: unknown chip id! 0xe0042000
Chip ID is 00000000, Core ID is 00000000.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:1234...
Учитывая то, что рабочий день уже кончился, я на сегодня завял. Буду разбираться завтра.