Изучение STM32

Кто любит RISC в жизни, заходим, не стесняемся.
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Изучение STM32

Сообщение mihailkapitanov »

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

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

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

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

Изображение

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

Изображение

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

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

Окно:

Изображение

Спасибо!
Реклама
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: Изучение STM32

Сообщение menzoda »

Если для академического интереса, то ищи как создать пустой проект и начинай все с чистого листа. А так описание же справа есть, все четко написано. Выбирай пункт Device. Судя по описанию там только стартап файл и базовая инициализация, не с самого нуля конечно, но тоже неплохо.
Реклама
kisoft
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн янв 13, 2014 18:01:27
Откуда: Жуковский

Re: Изучение STM32

Сообщение kisoft »

"При создании проекта вылезло вот такое окно"
Это окно позволяет доустановить разные пакеты нужных устройств и т.п. Нужно найти свой МК и установить для него пакет, CMSIS, что еще нужно.
К 5.01 еще можно доустановить Legacy Support, тогда будет всё "как раньше", иначе список устройств будет маленький. Я для Tiva C от TI доустанавливал Legacy и получил в списке свой МК. Всё работает нормально.
Насколько сильно глючит - не знаю, пока мало ковырялся.
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Re: Изучение STM32

Сообщение 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
Реклама
Эиком - электронные компоненты и радиодетали
kisoft
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн янв 13, 2014 18:01:27
Откуда: Жуковский

Re: Изучение STM32

Сообщение 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) и посмотреть структуру проекта там, потому что в двух словах трудно объяснить, что нужно настраивать :)
Реклама
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Re: Изучение STM32

Сообщение mihailkapitanov »

kisoft писал(а):ИМХО, лучше открыть проект из примеров, самый простой (какой нибудь hello или blink) и посмотреть структуру проекта там, потому что в двух словах трудно объяснить, что нужно настраивать :)
Спасибо. Несколько раз прочитал Ваш ответ, но понял что мало что понял. Пример было бы замечательно, но не нашел ничего под Keil 5 + F030. Уже посещает идея поставить Keil 4.
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Изучение STM32

Сообщение 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
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Re: Изучение STM32

Сообщение 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
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Изучение STM32

Сообщение dosikus »

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


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

ЗЫ. Последняя точка с запятой лишняя ...
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Re: Изучение STM32

Сообщение 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 (не понял что общий объем кода) байт? Многовато что ли. Насколько я понял "ЭТО" можно уже лить в контроллер и будет работать?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Изучение STM32

Сообщение dosikus »

Точку с запятой последнюю убери и можешь лить . :))) Только чему там работать то ?
Не забудь дебаггер настроить .

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

ЗЫ. Схема на плату есть ? Могу набросать код тебе на изучение. Что есть из периферии мелкого - типа светодиодов ?
Хотя можешь отсюда начинать копипастить http://kazus.ru/forums/showthread.php?t=106689
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Re: Изучение STM32

Сообщение 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. Но как приклеить его к проекту не понял еще.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Изучение STM32

Сообщение dosikus »

mihailkapitanov писал(а): Ну там же больше килобайта кода, а это, между прочим больше чем вся ATtiny13. Неужели это "бесполезный" код?
А кто саказал что это бесполезный код ?
..............
Точка с запятой после блока это пустой оператор ...
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Изучение STM32

Сообщение Myp3ik »

Все включено :))

По SWD разъему на плате видно, что её сделали в кЕтайской провинции :solder:
Вложения
STM32F0.RAR
(586.06 КБ) 555 скачиваний
Иван Сусанин - первый полупроводник :solder:
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Re: Изучение STM32

Сообщение mihailkapitanov »

Myp3ik писал(а):Все включено :))
Огромное спасибо! Как раз пустой проект, все работает. Кстати, а нет случайно "шаблонного" проекта STM32F030 для avr-none-eabi?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Изучение STM32

Сообщение dosikus »

mihailkapitanov писал(а):
проекта STM32F030 для avr-none-eabi?
:)))
mihailkapitanov
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт сен 24, 2013 15:51:50

Re: Изучение STM32

Сообщение mihailkapitanov »

Отвечаю сам. Нашел: https://github.com/szczys/stm32f0-disco ... c-template. Попробовал - собралось под Windows и Linux без проблем. Кажется (не уверен) что для STM32F030F4 подойдет. Плата выше.
kapitan0v
Открыл глаза
Сообщения: 56
Зарегистрирован: Сб июн 14, 2014 09:05:06

Re: Изучение STM32

Сообщение 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. Гляньте, кому интересно.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Изучение STM32

Сообщение dosikus »

kapitan0v писал(а):
  • Изучая SPL вы изучите как SPL так и работу с периферией "через регистры". А это - в два раза больше знаний.
  • Вы научитесь искать баги в библиотеке и героически исправлять их (полезный опыт).
  • Вы научитесь пользоваться отладчиком. В моем случае это был gdb.
  • Вы научитесь читать, и исправлять чужой код (а это однозначно лишним не будет).
  • Вы узнаете как реализовать некоторые алгоритмы самым невероятным и неоднозначным способом, познакомитесь с примерами т.н. индусского кода (разминка для мозга же).
  • Кроме того SPL поможет использовать весь потенциал МК! Вы без проблем используете лишние мегагерцы и килобайты вашего МК, SPL тут лучший помошник!
Абсолютный , ничем неподтвержденный бред...
kapitan0v
Открыл глаза
Сообщения: 56
Зарегистрирован: Сб июн 14, 2014 09:05:06

Re: Изучение STM32

Сообщение kapitan0v »

dosikus писал(а):Абсолютный , ничем неподтвержденный бред...
Простите, забыл теги <sarcasm></sarcasm>.
Ответить

Вернуться в «ARM»