Страница 1 из 4

Изучение STM32

Добавлено: Чт янв 16, 2014 14:55:05
mihailkapitanov
Всем привет! Немного "поигравшись" с 8051, ATtiny13 и ATmega8, сделав несколько проектов, захотелось (для академического интереса) опробовать альтернативную "линейку" микроконтроллеров. Выбор пал, несложно догадаться на STM32. Причины описывать думаю не стоит, так как они весьма банальны.

Около месяца, или даже больше читал всякие обзоры и прочее "STM32 с нуля". Если честно - после AVR показалось все не просто сложно, а очень сложно. Но это вызвало еще больший интерес.

Первым делом, решил купить железо. Хотел дискавери, но черт дернул и купил не его, а просто плату с контроллером и программатор (и вроде как отладчик ST-LINK 2). И то и другое - китайского производства.

Вот плата с контроллером:

Изображение

А вот программатор:

Изображение

Скоро все это добро придет по почте. Надеюсь этого хватит что бы "взглянуть" на STM32. Макетная плата есть.

Дальше по софту - решил попробовать Keil (много положительных отзывов). Правда там ограничение в 32к - но думаю этого хватит на небольшие проекты. Скачал версию 5. Установил. Оказалось все немного не так как в 4-ой версии (под которую почти все обучалки). При создании проекта вылезло вот такое окно, что в нем выбрать? Или просто закрыть?

Окно:

Изображение

Спасибо!

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 16:53:53
menzoda
Если для академического интереса, то ищи как создать пустой проект и начинай все с чистого листа. А так описание же справа есть, все четко написано. Выбирай пункт Device. Судя по описанию там только стартап файл и базовая инициализация, не с самого нуля конечно, но тоже неплохо.

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 17:18:37
kisoft
"При создании проекта вылезло вот такое окно"
Это окно позволяет доустановить разные пакеты нужных устройств и т.п. Нужно найти свой МК и установить для него пакет, CMSIS, что еще нужно.
К 5.01 еще можно доустановить Legacy Support, тогда будет всё "как раньше", иначе список устройств будет маленький. Я для Tiva C от TI доустанавливал Legacy и получил в списке свой МК. Всё работает нормально.
Насколько сильно глючит - не знаю, пока мало ковырялся.

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 17:44:22
mihailkapitanov
Спасибо за ответы!

Интуитивно поставил два чек-бокса таким образом:

Изображение

И ... проект, вроде как создался. Появилось вот такое "дерево":

Изображение

Попробовал собрать, и ничего не вышло. Возможно что-то не так выбрал там.

Код: Выделить всё

Build target 'Target 1'
compiling system_stm32f0xx.c...
linking...
.\test.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
.\test.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 1 warning and 1 error messages.
".\test.axf" - 1 Error(s), 1 Warning(s).
Target not created

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 18:41:57
kisoft
C F0 я не пробовал, но по ошибкам видно:

--entry - это параметр для линкера (можно открыть свойства проекта и найти этот параметр на странице Linker. Т.е. это точка запуска проекта. Для Tiva C у меня Reset_Handler расположен в startup файле, возможно и здесь его нужно искать там (system_stm32f0xx.c). В этой точке есть вызов настройки камня (для разных - по разному), затем вызов main.

-- first - в тех же параметрах - это таблица векторов прерываний (искать в том же файле __Vectors, скорей всего его там нет, но посмотреть как он там называется и заменить в параметрах линкера).
Хотя это всё странно и как то через одно место.

Еще, не знаю как для STM32, но для моего камня нужно было еще прописать на странице параметров C/C++ проекта define для выбранного MK. Проверить, что на странице Device выбран Ваш камень. На следующей - правильно выбрана частота кварца.
Потом по любому потребуется добавить main.c и в нем хотя бы int main(void) { while(1); } это чтобы проект полностью скомпилировался.

UPD: таблица векторов обычно в startup_stm32f0xx.S файле (или типа того) бывает, а system содержит различные настройки, почему его нет в Вашем проекте - непонятно.

ИМХО, лучше открыть проект из примеров, самый простой (какой нибудь hello или blink) и посмотреть структуру проекта там, потому что в двух словах трудно объяснить, что нужно настраивать :)

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 19:59:46
mihailkapitanov
kisoft писал(а):ИМХО, лучше открыть проект из примеров, самый простой (какой нибудь hello или blink) и посмотреть структуру проекта там, потому что в двух словах трудно объяснить, что нужно настраивать :)
Спасибо. Несколько раз прочитал Ваш ответ, но понял что мало что понял. Пример было бы замечательно, но не нашел ничего под Keil 5 + F030. Уже посещает идея поставить Keil 4.

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 21:39:58
dosikus
mihailkapitanov , вместо бездумного освоения методом тыка, лучше прочитать справку на IDE - как создать проект.
Хотя создание проекта в Keil практически ничем не отличается от создания в других IDE .
Естественно особо тяжело "выходцам" с AVR , тем более тем кто пользовал "визажисткие" облегчалки типа CVAVR .

Ну для начала вместо тыкания в визарде (Manage run time evriroment), тупо скопировать в папку проекта и подключить :

Из Keil\ARM\Pack\Keil\STM32F0xx_DFP\1.0.0\Device\Source\ system_stm32f0xx.c
Из Keil\ARM\Pack\Keil\STM32F0xx_DFP\1.0.0\Device\Source\ARM\ startup_stm32f0xx.s

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 22:31:11
mihailkapitanov
dosikus писал(а):IDE - как создать проект.
Прочитал. Как оказалось делал все правильно.
dosikus писал(а):Хотя создание проекта в Keil практически ничем не отличается от создания в других IDE .
Похоже на то.
dosikus писал(а):Естественно особо тяжело "выходцам" с AVR , тем более тем кто пользовал "визажисткие" облегчалки типа CVAVR .
Вначале действительно пробовал CVAVR - не пошло. Остановился на WinAVR - там супер просто. Один мейк файл (несколько строк), и main.c. Вот и все.
dosikus писал(а): Ну для начала вместо тыкания в визарде (Manage run time evriroment), тупо скопировать в папку проекта и подключить :
Из Keil\ARM\Pack\Keil\STM32F0xx_DFP\1.0.0\Device\Source\ system_stm32f0xx.c
Из Keil\ARM\Pack\Keil\STM32F0xx_DFP\1.0.0\Device\Source\ARM\ startup_stm32f0xx.s
Насколько я понял это произошло автоматически (видно на картинке выше). Кроме этого я создал main.c, подключил его к проекту ... и он даже скомпилировался.

Вот такой текст:

Код: Выделить всё

int main(void)
{
	while(1)
	{
	};
};
Но линковка так и не работает. Может какой-нибудь #include добавить в начало? Ну как в AVR делалось.

Код: Выделить всё

Rebuild target 'STM32F030F4'
compiling main.c...
compiling system_stm32f0xx.c...
linking...
.\test.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
.\test.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 1 warning and 1 error messages.
".\test.axf" - 1 Error(s), 1 Warning(s).
Target not created

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 22:48:12
dosikus
mihailkapitanov писал(а):
Насколько я понял это произошло автоматически (видно на картинке выше). Кроме этого я создал main.c, подключил его к проекту ... и он даже скомпилировался.
Увы, не произошло . Сей визард копирует только system , стартап НЕТ !


В main.c так же надо прописать #include <stm32f0xx.h>. Это вылезет потом, когда к регистрам начнешь обращаться...

ЗЫ. Последняя точка с запятой лишняя ...

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 23:14:48
mihailkapitanov
dosikus писал(а):Увы, не произошло . Сей визард копирует только system , стартап НЕТ !
Спасибо огромное. Создал пустой проект (не тыкая галки в мастере вообще).

Потом добавил main.c

Код: Выделить всё

#include <stm32f0xx.h>

int main(void)
{
	while(1)
	{
	};
};
Потом добавил файлы system_stm32f0xx.c и startup_stm32f0xx.s (просто скопировал). Получилось такое дерево:

Изображение

Надеюсь правильно его оформил. Нажал собрать - и УРА собралось. Оказалось не сложно.

Код: Выделить всё

Rebuild target 'STM32F030F4'
compiling main.c...
compiling system_stm32f0xx.c...
assembling startup_stm32f0xx.s...
linking...
Program Size: Code=1180 RO-data=224 RW-data=20 ZI-data=1636  
".\test.axf" - 0 Error(s), 0 Warning(s).
Получается программа, совершенно пустая 1180 или даже 1636 (не понял что общий объем кода) байт? Многовато что ли. Насколько я понял "ЭТО" можно уже лить в контроллер и будет работать?

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 23:38:43
dosikus
Точку с запятой последнюю убери и можешь лить . :))) Только чему там работать то ?
Не забудь дебаггер настроить .

Помимо твоего пустого кода, создается еще настройка тактирования , настройка стека/кучи и много чего...

ЗЫ. Схема на плату есть ? Могу набросать код тебе на изучение. Что есть из периферии мелкого - типа светодиодов ?
Хотя можешь отсюда начинать копипастить http://kazus.ru/forums/showthread.php?t=106689

Re: Изучение STM32

Добавлено: Чт янв 16, 2014 23:59:49
mihailkapitanov
dosikus писал(а):Точку с запятой последнюю убери и можешь лить . :)))
Пробовал убирать и ставить обратно - не ошибок не предупреждений. Нашел целую тему по этому поводу: http://www.rsdn.ru/forum/cpp/83591.all
Как оказалось лучше не ставить, следовательно я тоже убрал. И после while тоже. Хотя компилятору как-то все равно, что ли ...
dosikus писал(а):Только чему там работать то ?
Ну там же больше килобайта кода, а это, между прочим больше чем вся ATtiny13. Неужели это "бесполезный" код?
dosikus писал(а):Не забудь дебаггер настроить .
Программатор и плата еще в пути. Это я так, проба пера в IDE.
dosikus писал(а):Помимо твоего пустого кода, создается еще настройка тактирования , настройка стека/кучи и много чего...
После AVR этот код выглядит просто огромным.
dosikus писал(а):ЗЫ. Схема на плату есть ? Могу набросать код тебе на изучение. Что есть из периферии мелкого - типа светодиодов ?
Плата еще в пути, возможно схема есть в комплекте, но однозначно не уверен. Код на изучение - был бы рад! Микроконтроллеры интересные, недорогие, быстрые и кроме того TSSOP-20 не сложно паять если что. Из периферии - светодиоды есть, ну и еще чего по мелочи. Но нужно ждать посылку.

Кстати, читал что нужно еще к проекту подключать CMSIS (что-то с ядром связанное как я понял) и SPL. Еле нашел этот SPL в дебрях st.com. Вот вроде он: stm32f0_stdperiph_lib.zip. Но как приклеить его к проекту не понял еще.

Re: Изучение STM32

Добавлено: Пт янв 17, 2014 08:10:35
dosikus
mihailkapitanov писал(а): Ну там же больше килобайта кода, а это, между прочим больше чем вся ATtiny13. Неужели это "бесполезный" код?
А кто саказал что это бесполезный код ?
..............
Точка с запятой после блока это пустой оператор ...

Re: Изучение STM32

Добавлено: Сб янв 18, 2014 00:11:26
Myp3ik
Все включено :))

По SWD разъему на плате видно, что её сделали в кЕтайской провинции :solder:

Re: Изучение STM32

Добавлено: Ср янв 29, 2014 07:22:42
mihailkapitanov
Myp3ik писал(а):Все включено :))
Огромное спасибо! Как раз пустой проект, все работает. Кстати, а нет случайно "шаблонного" проекта STM32F030 для avr-none-eabi?

Re: Изучение STM32

Добавлено: Ср янв 29, 2014 16:46:54
dosikus
mihailkapitanov писал(а):
проекта STM32F030 для avr-none-eabi?
:)))

Re: Изучение STM32

Добавлено: Вт фев 04, 2014 00:57:03
mihailkapitanov
Отвечаю сам. Нашел: https://github.com/szczys/stm32f0-disco ... c-template. Попробовал - собралось под Windows и Linux без проблем. Кажется (не уверен) что для STM32F030F4 подойдет. Плата выше.

Re: Изучение STM32

Добавлено: Сб июн 14, 2014 10:59:50
kapitan0v
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 $@
Есть небольшая странность. Если указать так:

Код: Выделить всё

LD = /usr/local/bin/arm-none-eabi-gcc
проект собирается, а вот если так:

Код: Выделить всё

LD = /usr/local/bin/arm-none-eabi-ld
получается вот такая ошибка:

Код: Выделить всё

/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. Гляньте, кому интересно.

Re: Изучение STM32

Добавлено: Пн июн 16, 2014 13:24:19
dosikus
kapitan0v писал(а):
  • Изучая SPL вы изучите как SPL так и работу с периферией "через регистры". А это - в два раза больше знаний.
  • Вы научитесь искать баги в библиотеке и героически исправлять их (полезный опыт).
  • Вы научитесь пользоваться отладчиком. В моем случае это был gdb.
  • Вы научитесь читать, и исправлять чужой код (а это однозначно лишним не будет).
  • Вы узнаете как реализовать некоторые алгоритмы самым невероятным и неоднозначным способом, познакомитесь с примерами т.н. индусского кода (разминка для мозга же).
  • Кроме того SPL поможет использовать весь потенциал МК! Вы без проблем используете лишние мегагерцы и килобайты вашего МК, SPL тут лучший помошник!
Абсолютный , ничем неподтвержденный бред...

Re: Изучение STM32

Добавлено: Пн июн 16, 2014 13:26:49
kapitan0v
dosikus писал(а):Абсолютный , ничем неподтвержденный бред...
Простите, забыл теги <sarcasm></sarcasm>.