mihailkapitanov писал(а):STM32F030 для avr-none-eabi?
Ага, сам посмеялся с этого.
Сразу приношу извинения что пишу с другой учетной записи. К прошлой был утерян и пароль и почта.
Все еще продолжаю вникать в STM32. STM32F030 отложил пока в сторону и приобрел STM32F0Discovery (с STM32F051R8). Случайно в datasheet обнаружил что у STM32F030 всего 1 000 циклов перезаписи flash, а в STM32F051 - 10 000. Поэтому, как мне показалось, для изучения лучше подходит STM32F051, когда firmware загружается очень часто.
Сейчас использую связку: OS X + arm-none-eabi toolchain + ST-LINK + Sublime Text 2. Не Keil, конечно, но тоже вполне удобно.
Для сборки проекта использую вот такой Makefile:
Спойлер
Код: Выделить всё
DEFINES = DEBUG STM32F051
SOURCES = src/main.o src/my_debug.o
STARTUP = startup/startup_stm32f051.o
SYSTEM = cmsis/system_stm32f0xx.o
LDSCRIPT = stm32f051r8_flash.ld
OBJS = $(STARTUP) $(SYSTEM) $(SOURCES)
INCLUDES += cmsis src
AS = /usr/local/bin/arm-none-eabi-as
CC = /usr/local/bin/arm-none-eabi-gcc
CP = /usr/local/bin/arm-none-eabi-objcopy
LD = /usr/local/bin/arm-none-eabi-gcc
SZ = /usr/local/bin/arm-none-eabi-size
ST-FLASH = /usr/local/bin/st-flash
RM = /bin/rm -f
CFLAGS = $(addprefix -D, $(DEFINES)) $(addprefix -I, $(INCLUDES)) -mcpu=cortex-m0 -mthumb
LDFLAGS = -Tld-scripts/$(LDSCRIPT) -nostartfiles
CLEAN = firmware.bin firmware.elf $(OBJS)
all: clean firmware.bin size
clean:
$(RM) $(CLEAN)
run:
$(ST-FLASH) write firmware.bin 0x8000000 2> /dev/null
size:
$(SZ) firmware.elf
firmware.bin: firmware.elf
$(CP) -Obinary firmware.elf firmware.bin
firmware.elf: $(OBJS)
$(LD) $(LDFLAGS) $^ -o $@
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.s
$(AS) -c $< -o $@
Есть небольшая странность. Если указать так:
проект собирается, а вот если так:
получается вот такая ошибка:
Код: Выделить всё
/usr/local/bin/arm-none-eabi-ld -Tld-scripts/stm32f051r8_flash.ld -nostartfiles startup/startup_stm32f051.o cmsis/system_stm32f0xx.o src/main.o src/my_debug.o -o firmware.elf
/usr/local/bin/arm-none-eabi-ld: cannot find libc.a
make: *** [firmware.elf] Error 1
Так и не разобрался в чем дело, может кто в курсе?
Далее, хочу обратить внимание на то, что относительно SPL (она же Standard Peripherals Library) сложилось мнение что это как бы "треш и угар" (by DI HALT) и что для новичков оно только вред чем польза (by dosikus). Ну что ж, позвольте не согласится. Я начал пробовать писать код используя именно эту библиотеку, и ни разу об этом не жалею.
В основном преимущества SPL описываются так: хорошо читаемый код, удобство пользования, blah-blah-blah ... Но мне кажется преимущества SPL как раз в другом. Давайте посмотрим что мы получим изучая SPL:
- Изучая SPL вы изучите как SPL так и работу с периферией "через регистры". А это - в два раза больше знаний.
- Вы научитесь искать баги в библиотеке и героически исправлять их (полезный опыт).
- Вы научитесь пользоваться отладчиком. В моем случае это был gdb.
- Вы научитесь читать, и исправлять чужой код (а это однозначно лишним не будет).
- Вы узнаете как реализовать некоторые алгоритмы самым невероятным и неоднозначным способом, познакомитесь с примерами т.н. индусского кода (разминка для мозга же).
- Кроме того SPL поможет использовать весь потенциал МК! Вы без проблем используете лишние мегагерцы и килобайты вашего МК, SPL тут лучший помошник!
Так что использовать SPL на этапе первого своения - рекомендую. Ну а потом ... перемещаете библиотеку в /dev/null и пользуетесь регистрами.
На данном этапе, для меня, лучший друг и помощник - это datasheet. Я даже начал конспект в тетрадке вести, вот в такой маразм я впал.

Для STM32F0 их аж три штуки (или больше?) нужно, а не один как было с ATMEGA8. Но, не проблема в принципе.
Кстати, нашел на сайте ST неплохой архив для F0: stm32snippets. Там есть примеры использования периферии без SPL. Гляньте, кому интересно.