8-900-374-94-44
[email protected]
Slide Image
Меню

Stm32F4Discovery для начинающих – Начинаем изучать STM32 или Управляем светом по-умному / Habr

Начинаем изучать STM32 или Управляем светом по-умному / Habr

Небольшое вступление


Однажды, заехав в очередную съемную квартиру, я столкнулся с определенным неудобством, которое достаточно сильно напрягало: выключатель света в основной комнате оказался за шкафом-стенкой, который был прикручен к стене, и его перестановка была невозможна т.к. на это требовалось значительно много времени и сил. Решить данную проблему хотелось очень сильно и в голову пришла одна мысль: сделать дистанционный пульт для управления освещением!

Именно с идеи создания собственного пультика для управления светом в комнате и началось моё увлечение электроникой, микроконтроллерами и различными радиоустройствами.

Список статей:

  1. Начинаем изучать STM32 или Управляем светом по-умному
  2. Начинаем изучать STM32: битовые операции
  3. Начинаем изучать STM32: Что такое регистры? Как с ними работать?

После этого я начал изучать данную тему, знакомиться с основами электроники, примерами устройств, узнавать, как люди реализуют подобного рода устройства. Поискав информацию на тему того, с чего можно было бы начать изучение микроконтроллеров я узнал о том, что такое Arduino, с чем их едят, о том, как с ними работать. Легкое решение выглядело весьма привлекательно, ведь насколько я понял на тот момент, код собирается на раз-два. Но сделав вывод, что я не узнаю, что творится внутри микроконтроллера за рамками Arduino-скетчей я решил поискать более интересный вариант, который подразумевал глубокое изучение и погружение в дебри микроконтроллерной техники.

В компании, в которой я работаю, имеется отдел разработки, и я решил обратиться к инженерам чтобы они направили меня на путь истинный и показали с чего можно было бы начать решение своей задачи. Меня решительно отговорили от изучения Arduino и у меня в руках оказалась неведомая и непонятная зеленая платка на которой виднелись надписи, буковки, разные электронные компоненты.


Всё это для меня на тот момент показалось непостижимо сложным, и я даже пришел в некоторое смятение, но от реализации поставленной задачи отказываться не собирался. Так я познакомился с семейством микроконтроллеров STM32 и платой STM32F0-Discovery, после изучения которых мне хотелось бы сваять свой девайс под нужные мне цели.

К моему большому удивлению, такого большого комьюнити, статей, примеров, различных материалов по STM не было в таком же изобилии как для Arduino. Конечно, если поискать найдется множество статей «для начинающих» где описано, как и с чего начать. Но на тот момент мне показалось, что все это очень сложно, не рассказывались многие детали, интересные для пытливого ума новичка, вещи. Многие статьи хоть и характеризовались как «обучение для самых маленьких», но не всегда с их помощью получалось достичь требуемого результата, даже с готовыми примерами кода. Именно поэтому я решил написать небольшой цикл статей по программированию на STM32 в свете реализации конкретной задумки: пульт управления освещением в комнате.

Почему не AVR/Arduino?


Предвосхищая высказывания о том, что неопытному новичку бросаться сразу же в изучение такого сложного МК как STM32 было бы рановато — я расскажу, почему я решил пойти именно этим путём, не вникая и не знакомясь с семейством процессоров от Atmel и даже не рассматривая Arduino как вариант.

Во-первых, решающую роль сыграло отношение цена-функционал, разницу видно даже между одним из самых дешевых и простых МК от ST и достаточно «жирной» ATMega:


После того, что я увидел значительные различия между ценой и возможностями AVR и STM32 – мною было принято решение, что AVR использовать в своей разработке я не буду =)

Во-вторых, я предварительно для себя старался определить набор умений и навыков, которые бы я получил к моменту, когда я достигну требуемого результата. В случае если бы я решил использовать Arduino – мне было бы достаточно скопировать готовые библиотеки, накидать скетч и вуаля. Но понимание того, как работают цифровые шины, как работает радиопередатчик, как это всё конфигурируется и используется – при таком раскладе мне бы не пришло бы никогда. Для себя я выбрал самый сложный и тернистый путь, чтобы на пути достижения результата – я бы получил максимум опыта и знаний.

В-третьих, любой STM32 можно заменить другим STM32, но с лучшими характеристиками. Причем без изменения схемы включения.

В-четвертых, люди, занимающиеся профессиональной разработкой больше склонны к использованию 32-разрядных МК, и чаще всего это модели от NXP, Texas Instruments и ST Microelectronics. Да и мне можно было в любой момент подойти к своим инженерам из отдела разработки и разузнать о том, как решить ту или иную задачу и получить консультацию по интересующим меня вопросам.

Почему стоит начинать изучение микроконтроллеров STM32 с использования платы Discovery?


Как вы уже поняли, знакомство и изучение микроконтроллера STM32 мы начнем с Вами, уважаемые читатели, с использования платы Discovery. Почему именно Discovery, а не своя плата?
  1. На любой плате Discovery имеется встроенный программатор/отладчик ST-LINK который подключается к компьютеру через USB и его можно использовать как для программирования микроконтроллера на плате, так и внешних устройств путем снятия/установки соответствующих перемычек. То есть плюсом ко всему — мы еще и экономим деньги, получая решение два в одном: микроконтроллер и программатор.
  2. Платы Discovery имеют полную разводку всех пинов прямо с микроконтроллера на пины платы. Я для удобства использования воткнул Discovery так же в две макетные платы.
  3. 3. На плате всегда имеется некоторое количество всяких периферийных устройств, например, таких как акселерометры, микрофоны, дисплеи, сенсоры и многих других. На разных платах Discovery имеются различные варианты обвеса. Если кому интересно, можете ознакомиться подробнее на сайте производителя.

Что нам понадобится для разработки помимо платы Discovery?


В своей работе с платой Discovery нам понадобится еще ряд незаменимых вещей, без которых мы не сможем обойтись:
  1. Схему платы чтобы видеть куда, где и что подключено. Взять схему можно на страничке производителя Вашей платы в разделе Schematic Pack. Скачать схемы можно пролистав страницу немного ниже в блоке, указанном на картинке:
  2. Datasheet на наш микроконтроллер, чтобы в любой удобный момент можно было посмотреть распиновку, характеристики, параметры и прочую необходимую информацию для работы. В моём случае это STM32F051R8T6. Ссылка на datasheet находится в заголовке страницы:
  3. Так же нам понадобится Reference manual на наш микроконтроллер. Это документ, в котором подробнейшим образом описаны методы и подходы к работе с ядром МК, c его тактовым блоком, с периферией и т.д. Так же в нем содержатся описание всех регистров МК, всех опций и настроек МК и периферии. Наверное, это самый важный файл без которого разобраться в том, как и что работает внутри МК было бы очень сложно. Скачать файл можно по ссылке на странице микроконтроллера:
  4. И наконец, нам нужно установить среду разработки, в которой бы мы могли создавать программы для нашего МК и спокойно осуществлять компиляцию и прошивку наших программ. В свое время я перепробовал почти все из самых популярных IDE и остановился на Keil uVision 5. На мой взгляд, данная среда разработки показалась мне самой удобной и простой в освоении. Встроенный отладчик, готовые и легко подключаемые низкоуровневые библиотеки, огромное количество примеров и удобно организованный рабочий интерфейс и пространство IDE стали решающими факторами, повлиявшими на мой выбор. Скачать данную IDE можно с официального сайта, но требуется простая регистрация:. Есть правда одно небольшое ограничение на размер загружаемой прошивки в 32кБ т.к. данная IDE платная. Но нам этого будет более чем достаточно. Нам понадобится MDK-Arm:

Приступим к первоначальной настройке и подготовке IDE к работе!


После того, как скачается установочный файл нашей IDE можно приступать к установке. Следуя указаниям инсталлятора проведите процесс установки. После того, как скопируются все файлы, необходимые для работы появится окно установщика софтовых пакетов для разработки
Pack Installer
. В данном установщике содержатся низкоуровневые библиотеки, Middleware, примеры программ, которые регулярно пополняются и обновляются.
Для начала работы с нашей платой нам необходимо установить ряд пакетов необходимых для работы и необходимо найти микроконтроллер, с которым мы будем работать. Так же можно воспользоваться поиском вверху окна. После того, как мы нашли наш МК кликаем на него и во второй половине окна и нам необходимо установить следующий перечень библиотек:
  1. Keil::STM32F0xx_DFP – полноценный пакет программного обеспечения для конкретного семейства микроконтроллеров, включающий в себя мануалы, даташиты, SVD-файлы, библиотеки от производителя.
  2. ARM::CMSIS – пакет Cortex Microcontroller Software Interface Standard, включающий в себя полный набор библиотек от ARM для поддержки ядра Cortex.
  3. Keil::ARM_Compiler – последняя версия компилятора для ARM.

После установки требуемых паков можно перейти к настройке IDE и нашего отладчика/программатора. Для этого нам необходимо открыть главное окно Keil и создать новый проект.

Для этого необходимо перейти в меню Project -> New uVision Project и выбрать папку, в которую сохраним наш проект.

После Keil спросит нас какой МК будет использоваться в проекте. Выбираем нужный нам МК и нажимаем ОК.


И вновь появится, уже знакомое нам, окно в котором мы можем подключить интересующие нас модули к проекту. Для нашего проекта понадобится два модуля:
  1. Ядро библиотеки CMSIS
    , в котором объявлены настройки, адреса регистров и многое другое из того что необходимо для работы нашего МК.
  2. Startup-файл, который отвечает за первоначальную инициализацию МК при старте, объявление векторов и обработчиков прерываний и многое другое.

Если все зависимости у подключаемых удовлетворены – менеджер будет нам сигнализировать об этом зеленым цветом:
После того как мы нажмем клавишу ОК мы можем приступать к созданию нашего проекта.

Для того, чтобы сконфигурировать параметры проекта и настроить наш программатор нужно правым кликом по Target 1 открыть соответствующее меню.


В главном меню проекта настраиваем параметр Xtal в значение 8.0 MHz. Данный параметр отвечает за частоту работы кварцевого осциллятора нашего МК:

Далее переходим к настройке нашего программатора/дебагер. Кликаем в этом же окне на вкладку Debug и выбираем в поле Use параметр ST-Link Debugger и переходим в настройки:
В настройках мы должны увидеть модель нашего ST-Link установленного на плате, его серийный номер, версию HW и IDCODE МК который будем прошивать:

Для удобства можно настроить параметр, отвечающий за то, чтобы МК сбрасывался автоматически после перепрошивки. Для этого нужно поставить галочку в поле Reset and Run.


После этого нужно настроить еще одну опцию, которая позволит нам писать русскоязычные комментарии к коду наших проектов. Нажимаем кнопку Configuration и в открывшемся меню в поле Encoding выбираем Russian Windows-1251.
Всё. Наша IDE и программатор готовы к работе!

В Keil имеется удобный навигатор по проекту, в котором мы можем видеть структуру проекта, необходимые для работы справочные материалы, в т. ч. те, которые мы уже скачали к себе на компьютер до этого (схема Discovery, datasheet, reference manual), список функций, использованных в проекте и шаблоны для быстрой вставки разных языковых конструкций языка программирования.


Переименуем папку в структуре проекта с Source Group 1 на App/User, таким образом обозначив то, что в данной папке у нас будут располагаться файлы пользовательской программы:
Добавим основной файл программы через навигатор проекта, выполнив команду Add New Item To Group “App/User”.
Необходимо выбрать из предложенного списка C File (.c) и назначить ему имя main.c:
Созданный файл автоматически добавится в структуру проекта и откроется в главном окне программы.

Что ж, теперь мы можем приступить к созданию нашей программы.

Первым делом, необходимо подключить к нашему исполняемому файлу заголовочный документ нашего семейства микроконтроллеров. Добавим в файл main.c строки следующего содержания, данная программа заставить попеременно моргать наши светодиоды:

/* Заголовочный файл для нашего семейства микроконтроллеров*/
#include "stm32f0xx.h"

/* Тело основной программы */
int main(void)
{
	/* Включаем тактирование на порту GPIO */
	RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
	
	/* Настраиваем режим работы портов PC8 и PC9 в Output*/
	GPIOC ->MODER = 0x50000;
	
	/* Настраиваем Output type в режим Push-Pull */
	GPIOC->OTYPER = 0;
	
	/* Настраиваем скорость работы порта в Low */
	GPIOC->OSPEEDR = 0;
	
	while(1)
	{
		/* Зажигаем светодиод PC8, гасим PC9 */
		GPIOC->ODR = 0x100;
		for (int i=0; i<500000; i++){}	// Искусственная задержка
					
		/* Зажигаем светодиод PC9, гасим PC8 */
		GPIOC->ODR = 0x200;
		for (int i=0; i<500000; i++){}	// Искусственная задержка
	}		
}

После того, как мы написали нашу программу, настала пора скомпилировать код и загрузить прошивку в наш МК. Чтобы скомпилировать код и загрузить можно воспользоваться данным меню:
Команда Build (или горячая клавиша F7) скомпилирует код, и если не было никаких ошибок программе выведет в логе компиляции следующее сообщение о том, что ошибок и предупреждений нет:
Команда Load (или горячая клавиша F8) загрузит компилированный код в наш МК и автоматически отправит его на исполнение:
После загрузки кода мы увидим, как светодиоды начали мигать с равными временными промежутками.
Ура! Первый шаг в освоении микроконтроллеров STM32 мы сделали! В следующем уроке мы разберем что такое битовые и логические операции, как ими пользоваться и узнаем об одной очень полезной утилитке для работы с МК, ну а пока можем наслаждаться тем, как весело перемигиваются светодиоды на нашей плате Discovery. )

Список статей:

  1. Начинаем изучать STM32 или Управляем светом по-умному
  2. Начинаем изучать STM32: битовые операции
  3. Начинаем изучать STM32: Что такое регистры? Как с ними работать?

habr.com

Для начинающих — EasySTM32

Те кто знаком с восьмибитными контроллерами типа AVR и PIC, наверняка хорошо знают о такой нужной вещи как встроенная EEPROM память. Она позволяет сохранять в нее некоторые данные и потом считывать их после выключения/включения контроллера. Энергонезависимая память одним словом. Перейдя на контроллеры STM32 я с удивлением обнаружил, что такой памяти у них просто нет! Но как потом оказалось, существует аж целых две альтернативы такой памяти. Первая — использовать backup домен. Это не совсем энергонезависимая память, чтоб информация не разрушалась после выключения основного питания, к определенному выводу контроллера должна быть подключена батарейка (вроде тех, которые стоят в материнских платах). Об этом я подробнее расскажу в следующей статье. А сейчас мы рассмотрим второй способ энергонезависимого хранения пользовательских данных — flash память контроллера.

Читать далее «Flash память STM32»

ЦАП (или DAC по-буржуйски)  это АЦП с точностью до наоборот — он преобразовывает некоторые цифровые данные в их аналоговое представление (читай напряжение). Говоря еще проще — ЦАП позволит нам относительно плавно изменять напряжение на ноге контроллера. Области практического применения: генерация звука, и сигналов произвольной формы. Можно прикрутить к контроллеру SD карточку и сделать wav плеер. Производительности контроллера точно хватит, ибо я делал такое даже на AVR, а у них кстати нет ни какого встроенного ЦАПа и я прикручивалвнешний. Работать с ЦАПом очень легко, и в этой статейке я попробую рассказать все, что мне известно о ЦАПе в STM32. На картинке ниже — генерация синуса при помощи ЦАПа: 

Читать далее «ЦАП в STM32»

В предыдущей статье про базовые таймеры, мы в очередной раз мигали светодиодами, а в этот раз пойдем гораздо дальше и попробуем вкурить как заставить контроллер STM32 генерировать ШИМ. Для этого нам придётся использовать один из таймеров общего назначения, ведь именно у них есть всё что для этого нужно. Весь остальной  функционал  этих таймеров конечно впечатляет, но в моей практике он пока не пригодился. Хотя возможно, что в будущем мне пригодятся такие полезные фичи как функция подсчёта внешних импульсов и возможность аппаратно обрабатывать повороты энкодера. Но пока займемся ШИМом. Есть вот такая схема из контроллера, трех резисторов и RGB светодиода которым мы будем управлять. Управление заключается в том, чтоб плавно зажечь и погасить каждый цвет. Разумеется можно взять три разных светодиода если нет RGB.

Читать далее «Генерация ШИМ в STM32»

Таймеры — это такая периферия контроллера STM32 позволяющая нам очень точно отсчитывать интервалы времени. Это пожалуй одна из самых важных и наиболее используемых функций, однако есть и другие. Следует начать с того, что в контроллерах STM32 существуют таймеры разной степени крутости. Самые простые это Basic timers. Они хороши тем, что очень просто настраиваются и управляются при помощи минимума регистров. Все что они умеют это отсчитывать временные интервалы и генерировать прерывания когда таймер дотикает до заданного значения. Следующая группа (general-purpose timers) гораздо круче первой, они умеют генерировать ШИМ, умеют считать испульсы поступающие на определённые ножки, можно подключать энкодер итд. И самый крутой таймер это advanced-control timer, думаю что его я использовать не буду еще очень долго так как мне пока без надобности управлять трехфазным электродвигателем. Начать знакомство с таймерами следует с чего попроще, я решил взяться за Basic таймеры. Задача которую я себе поставил: Заставить таймер генерить прерывания каждую секунду.

Читать далее «Basic таймеры в STM32»

В этой статье я планирую поделиться с читателями своими скромными познаниями в области прерываний. Начать следует с того, что же представляют собой прерывания. Прерывание — это событие как правило связанное с каким-либо блоком периферии микроконтроллера STM32. Событий которые могут породить прерывание может быть множество. Например если речь о таком блоке периферии как UART, то там могут быть такие события: передача завершена, приём завершен, возникла ошибка чётности итд. Использование прерываний позволит нашей программе мгновенно регировать на подобные события. Сам термин прерывание говорит о том, что что-то должно прерваться и в нашем случае прервется выполнение основного кода вашей программы и управление будет передано некоторому другому куску кода который называется обработчиком прерывания. Таких обработчиков достаточно много, ибо периферийных устройств в STM32 предостаточно. Стоит отметить важный момент: В случае возникновения двух разных прерываний от одного блока периферии возникает одно и тоже прерывание. Например если произойдет прерывание по приёму байта через UART и прерывание по завершению передачи через тот же UART, то в обоих случаях будет вызван один и тот же обработчик. Для того чтоб определить какое из возможных прерываний произошло нужно смотреть на флаги состояния. И само собой очищать их перед выходом из прерывания. Когда обработчик прерывания отработает, управление будет передано той самой строчке кода, во время выполнения которой наступило прерывание. То есть основная программа продолжит работать дальше как ни в чем не бывало.

Читать далее «Прерывания в STM32»

Насто время сделать что-то практическое с АЦП, для начала пусть это будет несложный, пример который считывает значение с какого либо канала, а потом исходя из этого значения будем менять частоту мигания тех самых многострадальных светодиодов стоящих на платке STM32VL Discovery. Для данного практического эксперимента нам потребуется сама платка дискавери и плюс переменный резистор номиналом примерно от 1К до 200К. Короче ставьте любой какой найдете, скорее всего он подойдет 🙂 Главное чтоб сопротивление было не слишком уж маленьким, а то он начнет греться, да и стабилизатор на плате может вспотеть от такой нагрузки. Соединить резистор с платой нужно так, как я показал на схеме в прерыдущей статье про регистры АЦП. Кстати, если у вас вообще нет этой платы, то просто посмотрите на ту же схему и подсоедините всю обвязку как там нарисовано. Ну а счастливым обладателям дискавери я нарисовал вот такую простую картинку: 

Читать далее «АЦП в STM32. Часть 2.»

Микроконтроллер штука цифровая и обменивается с внешним миром цифоровыми сигналами: нулями и единицами. Однако иногда перед микроконтроллером встает задача произвести измерение какой либо плавно изменяющейся величины. Это может быть всё то, что принимает несколько промежуточных состояний (а не только два) например это может быть темепература, напряжение, сила тока, освещенность и так далее, примеров много. Однако, нога контроллера настроенная на вход различает только два состояния — присутствие на ноге напряжения (лог. 1) и его отсутствие (лог. 0). Для измерения  температуры это малопригодно, ведь мало кому интересен градусник имеющий только два состояния -50 и +200 градусов 🙂 Для решения проблем измерения аналоговых величин придумали АЦП – Аналого-цифровой преобразователь. Принцип работы с АЦП в двух словах: На вход АЦП поступает аналоговый сигнал и через некоторое время из АЦП можно прочитать результат преобразования, тоесть цифровое представление аналогово сигнала. Существуют микроконтроллеры STM32 со встроенным АЦП, то есть ничего подключать к контроллеру не надо, точнее почти ничего. Посмотрим на картинку: 

Читать далее «АЦП в STM32. Часть 1»

Порты ввода/вывода пожалуй важнейшая часть микроконтроллера, без неё всё остальное просто бессмысленно. Сколько бы не было у контроллера памяти, периферии, какой бы высокой не была тактовая частота — это всё не имеет значения если он не может взаимодействовать с внешним миром. А взаимодействие это осуществляется через эти самые порты ввода/вывода. Далее для краткости будем называть их просто портами. Порт это некоторый именованный набор из 16-ти (как правило) ног контроллера, каждая из которых может быть индивидуально настроена и использована. Количество портов может различаться, например в контроллере установленном в отладочной плате STM32vl Discovery имеются три порта A,B,C. Существует два основных режима работы ног контроллера: вход и выход. Когда нога контроллера настроена на выход — к ней можно прицепить любой потребитель: светодиод, пищалку, да и вообще что угодно. Нужно понимать что ноги у контроллера не потянут большую нагрузку. Максимальный ток который может пропустить через себя одна нога составляет ~20 мА. Если планируется подключать что-то с более высоким энергопотреблением то нужно делать это через транзисторный ключ. В противном случае нога порта (а то и весь порт, чем черт не шутит) сгорит и перестанет выполнять свои функции. Чтобы обезопасить ногу порта можно прицепить к ней резистор номиналом примерно 220 ом. Таким образом при напряжении питания 3.3 вольта даже при коротком замыкании ноги на землю ток не превысит критического значения.  Второй режим работы ноги контроллера — это вход. Благодаря этому режиму мы можем считывать например состояние кнопок, проверяя есть ли на ноге напряжение или нет. Это вкратце, а сейчас рассмотрим подробнее как работать с портами. Рассматривать будем конечно же на практике, благо что аппаратная часть (светодиоды и кнопка) для наших экспериментов уже реализована на плате STM32vl Discovery. Если же платы нет, то можно подключить к контроллеру светодиоды и кнопку следующим образом: 

Читать далее «Порты микроконтроллера»

Так уж сложилось, что на моем компьютере всегда была установлена Windows, поэтому весь софт который мы будем использовать в ходе изучения микроконтроллеров STM32 предназначен для винды. Кстати у STM32 есть еще одно преимущество перед другими популярными контроллерами (типа pic или avr), для STM32 нет особой проблемы с софтом под линукс (об этом подробнее в другой раз).  Весь софт который нам понадобится можно поделить на три группы: 

  • Тот в котором мы пишем текст программы
  • Тот при помощи которого мы компилируем программу
  • Тот который записывает скомпилированную программу в контроллер

Это означает что у суровых челябинских металлургов есть возможность писать программы хоть в блокноте, потом делать make файлы, компилировать всё это дело и прошивать. Но мы пойдем читерским путём, заюзаем софт который будет делать всю грязную работёнку за нас, ведь на самых первых порах, получение результата гораздо важнее глубокого понимания принципов работы. Выбор IDE дело ответственное, среди трёх кандидатов (IAR, Eclipse и CooCox) я выбрал последнего по ряду причин: он бесплатный, легкий в настройке, есть поддержка ST-LINK (того который в STM32 Discovery стоит), удобный редактор кода и отладчик, интерфейс похож на эклипс который многие видели и юзали. От слов переходим к делу — скачаем, установим и настроим софт.

Читать далее «Необходимый софт»

easystm32.ru

Практический курс STM32. Урок 0

Предисловие
Примерно год назад, освоив MSP430 я решил подобраться к ARM. Купил себе F4-Discovery, но вот засада, если у Texas Instruments был отличнейший учебник, который позволял на практике освоить MSP в кратчайшие сроки, то с STM32 дела обстояли намного хуже: половина уроков была по серии F0(Cortex-M0 слегка далек от M4 знаете ли), остальные же уроки либо были предназначены для людей имевших ранее дело с ARM, либо основывалась на магии, то есть «вставляем вот этот кусок кода, нажимаем такую-то кнопку, смотрим на плату. Ура, светодиоды мигают, поздравляем» без объяснений что какой кусок кода делает.

Но недавно я решил все-таки достать пыльный Discovery и освоить STM32 от и до. Думаю лучший способ сделать это — написать цикл обучающих статей(если хотите, конспект).

О чем и для кого этот курс
Прежде всего хочу сразу оговорить, что в основном курс будет касаться серии STM32-F4. Это Cortex-M4, который является прямым наследником Cortex-M3(STM32- L1, F1, F2) и отличается от него главным образом ядром с наличием DSP (цифрового сигнального процессора) и FPU (модуля операций с плавающей запятой).

Второй момент. Курс предназначен для новичков и многие конечно сочтут приведенные в нем описания базовых вещей слишком элементарными и излишними, но я не считаю, что освоение STM32 нужно начинать с освоения 8051, PIC’ов и AVR’ок, зачем? Времена когда компании-производители ограничивались выпуском лишь даташитов в качестве документации давно прошли: сейчас каждый производитель старается максимально популяризировать свой продукт и сегодня микроконтроллеры стали доступны широкой аудитории.
Не буду начинать холивар STM vs. AVR, скажу лишь, что Cortex — новее, дешевле и перспективнее.
Но есть два существенных недостатка, мешающих новичкам начинать знакомство с микроконтроллерами сразу с Cortex’ов:

  1. Мелкие корпуса — рекомендую посмотреть видео/почитать статьи по пайке и обзавестись более-менее приличным инструментом.
  2. Отсутствие единого руководства. Надеюсь мой курс сильно сэкономит вам время в поиске документации или руководства как провернуть ту или иную операцию.
Все что хотел сказать в предисловии — сказал. Ну что? Поехали.
Документация
Обзор платы F4-Discovery можно посмотреть тут. На плате установлен камень STM32F407VG. Идем за документацией к нему сюда(ссылку стоит добавить в закладки), открываем вкладку Design Resources, скачиваем:
  1. Из Product SpecificationsDS8626: ARM Cortex-M4 32b MCU+FPU, 10DMIPS, up to 1MB Flash/192+4KB RAM, USB OTG HS/FS, Ethernet, 17 TIMs, 3 ADCs, 15 comm. interfaces & camera. Это Даташит, в нем описана конкретная специфика конкретного контроллера семейства. Даташит как бы уточняет и дополняет Справочное руководство(о нем чуть ниже).
  2. Из Reference ManualRM0090: STM32F405xx/07xx, STM32F415xx/17xx, STM32F42xxx and STM32F43xxx advanced ARM-based 32-bit MCUs. Это то самое Справочное руководство(далее — СР). Оно описывает серию из нескольких микроконтроллеров. Этот документ станет основным талмудом по части железа. В Даташит же будем лезть когда чего-то не найдем в СР или если нам потребуется что-либо уточнить. Обычно в таких случаях в СР дается прямая отсылка, мол «смотрите даташит на конкретный кристалл»
  3. Из Related Tools and SoftwareSTSW-STM32065: STM32F4 DSP and standard peripherals library. Это просто гениальная библиотека от ST, которая значительно упрощает жизнь при написании и переносе кода, она позволяет думать на уровне архитектуры в целом, а не на уровне скажем регистров. Даже не знаю, почему ST ее так запрятала, видимо скромничают =). Из скачанного архива нам потребуется файл «stm32f4xx_dsp_stdperiph_lib_um.chm«. Он представляет собой автоматически собранную из сопровождения к коду библиотеки документацию, следовательно то же самое можно увидеть и в .h или .c файлах. Тут уже кому как удобнее. Остальные файлы из архива нам не понадобятся, так как библиотеку будем подключать непосредственно из «репозитория» IDE.

Ну и поскольку в качестве отладочной платы у нас фигурирует F4-Discovery, неплохо бы знать, куда что подключено. Не вопрос, идем сюда(рекомендую также добавить в закладки) и скачиваем:
  1. Из User ManualUM1472: Discovery kit for STM32F407/417 lines. Это руководство к плате. Рекомендуется заглядывать сюда перед тем, как что-то к ней подключить.
  2. Из Schematic PackSTM32F4DISCOVERY schematics(а больше и нечего). Достаем из архива pdf’ку со схемами, кладем к остальным документам.
Кстати тут же в Related Tools and Software есть набор с туевой хучей примеров на все случаи жизни, но он нам пока не понадобиться, ведь у нас курс «с нуля»
Установка IDE
Выбор IDE для Cortex’ов действительно велик. Сама ST рекомендует использовать следующие:
  • Keil MDK-ARM
  • IAR Embedded Workbench for ARM (EWARM)
  • Atollic TrueSTUDIO
  • Altium TASKING VX-Toolset

Но мы ST не послушаем. Все эти IDE коммерческие и стоят денег. Есть у них и бесплатные версии с ограничениями(и их вполне достаточно для начала), но ограничения — это не по-джедайски. В качестве альтернативы будем использовать бесплатную CooCox CoIDE(в простонародье — кокос), которая не уступает коммерческим. Она основана на Eclipse и самодостаточна. Версии для Linux у них правда нет(только обещают ее скоро сделать). Но думаю линуксоиды без проблем могут собрать что-то подобное из Eclipse+ARM Plugin+GCC ARM Toolchain. Нам же никаких плясок с бубном ни во время установки, ни во время использования не потребуется, все вкусности «из коробки». Приступим же к установке.
  1. Идем на ST и скачиваем ST-LINK utility. Устанавливаем. Эта штука является продвинутым программатором(только не подумайте что мы будем отладки ради зашивать через нее в камень скомпилированный код — нет, у нас ведь для таких целей есть кокос). Кстати в случае необходимости можно обновить ПО самого ST-Link(встроенный в Discovery программатор) через нее же. Отдельно драйвера ставить не нужно, они в этот установщик уже включены.
  2. Идем на оффсайт кокоса и скачиваем CoIDE. Устанавливаем. Крайне рекомендую скачивать и устанавливать через CoCenter, он значительно упрощает обновление в дальнейшем.
  3. Идем на ланчпад и скачиваем последнюю версию любезно собранного для нас тулчейна (gcc-arm-none-eabi-тратата-win32.exe). Устанавливаем, лучше директорию установки не менять.
  4. Открываем CoIDE. Сверху нажимаем Project -> Select Toolchain Path

    Ну и выбираем директорию установки тулчейна, а в ней bin.



P.S.
На сегодня все, спасибо за внимание. Завтра напишу урок 1, там познакомимся с GPIO.

we.easyelectronics.ru

STM32 с нуля. Введение. | MicroTechnics

Приветствую всех любителей программирования, микроконтроллеров, да и электроники в целом на нашем сайте! В этой статье немного расскажу о том, чем мы будем заниматься тут, а именно об учебном курсе по микроконтроллерам ARM.

Итак, для начала разберемся, что же нужно знать и уметь, чтобы начать изучать ARM’ы. А, в принципе, ничего супер сложного и фееричного 😉 Конечно, на контроллеры ARM люди обычно переходят, уже наигравшись с PIC’ами и AVR’ками, то есть в большинстве своем опытные разработчики. Но я постараюсь максимально подробно и понятно описывать все то, что мы будем разбирать, чтобы те, кто впервые решил попробовать себя в программировании микроконтроллеров, могли легко разобраться в материале. Кстати, если будут возникать какие-нибудь вопросы, или просто что-то будет работать не так, как задумывалось, пишите в комментарии, постараюсь разобраться и помочь.

Теперь перейдем к техническим вопросам ) Несколько раз я уже упомянул название «Учебный курс ARM», но, по большому счету, это не совсем верно. Микроконтроллера ARM как такового не существует. Есть контроллер с ядром(!) ARM, а это, согласитесь, все-таки не одно и то же. Так вот, такие девайсы выпускает ряд фирм, среди которых особо выделяются, STMicroelectronics и NXP Semiconductors. Соответственно выпускают они контроллеры STM и LPC. Я остановил свой выбор на STM32, они мне просто больше понравились =) У STM очень подкупает, что разобравшись с любым МК из линейки STM32F10x, не возникнет никаких проблем и с любым другим. Одна линейка – один даташит. Кстати есть огромное количество как дорогих, так и не очень, отладочных плат с контроллерами STM32, что очень радует, хотя первое время будем отлаживать наши программы в симуляторе, чтобы оценить возможности контроллера, прежде чем покупать железо. Вот, на всякий случай, официальный сайт STMicroelectronics – st.com.

Как то плавно выехали на тему компилятора, так что скажу пару слов об этом. Я, недолго думая, выбрал Keil, не в последнюю очередь из-за мощного встроенного симулятора. Можно и на UART там посмотреть, и на любой регистр, и даже логический анализатор имеется в наличии. Словом, у меня Keil оставил в основном только приятные впечатления, хотя есть и минусы, конечно, но не катастрофические. Так что можете смело качать Keil uvision4 с офф. сайта (keil.com). Правда есть одно НО – IDE платная, но доступен демо-режим с ограничением кода в 32кБ, которых нам пока с лихвой хватит. Кому этого мало есть огромное количество кряков для Keil’а 😉 Устанавливается все без проблем – пару раз тыкаем далее и все отлично ставится и работает без дополнительных танцев с бубном.

Собственно, вот и все, что я хотел тут рассказать, пора переходить от слов к делу, но это уже в следующей статье. Будем изучать программирование микроконтроллеров STM32 с нуля!

microtechnics.ru

STM32F4Discovery+LabWindowsCVI. Урок 1. Часть 0. Введение / STM32 / Сообщество EasyElectronics.ru

Для тех, кому лень изучать С++ и С#…

Многие начинающие или даже имеющие за плечами большой опыт программирования программисты микроконтроллеров сталкиваются с проблемой написания более менее рабочего оконного приложения для управления микроконтроллером с ПК и отображения телеметрии. В большинстве случаев для этого нужно изучать языки программирования высокого уровня, такие как С++ и C#. Процесс изучения этих языков может привести программиста, который всю жизнь программировал только на С в ступор, потому что они очень сильно отличаются от обычного С, а изучение этих языков займет у него очень много времени.
Именно для таких людей компания NationalInstruments выпустила программу LabWindowsCVI, в которой весь код пишется на простом С и человек, который программировал только на С очень легко в ней разберется…

В этом топике хочу представить вам цикл уроков по программированию LabWindowsCVI с использованием отладочной платы STM32F4Discovery…

В процессе работы мы напишем простое приложение :

С помощью этого приложения мы сможем:

    -Управлять состоянием светодиодов;
    -Управлять яркостью синего светодиода;
    -Получать значения угловых ускорений со встроенного акселерометра;
    -Изменять значения на выходе ЦАП и изменять его с помощью АЦП.

Видео, демонстрирующее работу приложения представлено ниже:

Спасибо за внимание!

we.easyelectronics.ru

Изучение STM32. Уроки по программированию STM32F4 Discovery. / STM32 / Сообщество EasyElectronics.ru

Как же Вы паяете SMD 0603, да даже хотя бы 1206?

У меня ARDO 2000-го года выпуска, из тех, что были MADE IN ITALY, т.е. сделана «белыми» людьми по стандартам не постиндустриальной, а еще индустриальной эпохи, без MCU и LCD-дисплеев — все на электро-механике.

За эти 15 лет она ни разу не ломалась, не смотря на то, что я ее ни разу не разбирал, не чистил ни фильтра, ни насос. Но в последнее время старушка начала кряхтеть, когда сливает воду (видимо откачивающий насос вконец уже забился), но дело свое делает — и стирает, и отжимает, как и всегда.

Иногда я подхожу к ней в эти моменты, похлопываю ее по стальным, покрытым белой эмалью бокам, нюхаю_носом воздух(не горит ли уже изоляция обмотки движка): Синьорина, ну давай еще немного — это еще не finale di mortale momento!

Поэтому периодически за последние полгода мне приходит в голову мысля о покупке новой стиральной машинки. Т.к. я живу уже в XXI веке — решил и я воспользоваться его плодами в этой отрасли, т.е. обратил свое внимание на машинки фирмы LG с технологией Direct Drive©.

Проходя мимо «Эльдорадо» или «М-Видео», вспоминаю об этом и иду сразу прямиком в отдел стиральных машин, но там этих самых LG 100500 моделей и все с Direct Drive. Я смотрю на них и вхожу в ступор, т.е. в состояние полной невозможности выбора. Это происходит еще и от того, что я приобрел весьма скверный характер за годы жизни при капитализме — стал мелочным, жадным, подозрительным и абсолютно не верящим тому, что говорят люди(особенно, если это барыги или какие их холуи), человеком. И вот так, со стеклянными глазами я могу стоять посреди торгового зала минут 10-15, находясь в автоколебательном движении мозга между оптимизмом желания всех новых фич и удобств и пессимизмом жадности и неверия маркетинговой рекламе.

Вот поэтому то я и спросил чела, который этот выбор все же сделал. А он мне и говорит: Что-то «смеркаться стало»… Не может разобрать названия модели, написанной на машинке или в ее инструкции буквами минимум 1 см высотой! :DDD Т.к. он не пьет вроде «огненной воды», а тем более с содержанием метилового спирта, я и предположил, что возможно отравление какими-то другими ядами в результате хоббистско-профессиональной деятельности.

we.easyelectronics.ru

Описание STM32F4DISCOVERY — Мир Электроники

STM32F4DISCOVERY

За сумму чуть более $14 Вы получаете довольно интересную плату. Основой служит STM32F407VGT6 МК, на плате также присутствует отладчик (в отличие от предшественницы он 2-ой версии, а это значит что присутствует официальная поддержка со стороны open ocd), два ST MEMS чипа — цифровые микрофон и трехосевой акселерометр. чип аудио ЦАП с усилителем класса D. Также как и обычно присутствуют кнопки сброса и пользовательских функций. Помимо mini-usb для отладки, есть еще и micro-usb с поддержкой otg. Помимо этого по бокам платы расположены 2 гребенки контактов с шагом 2.54 мм на которые выведены все функциональные пины МК. Как и обычно присутствуют пользовательские светодиоды, только их теперь не 2 как в младшей плате а 4. Интерфейс отладчика также можно переключить с чипа на плате на внешний МК.

STM32F4DISCOVERY

Вот что говорится в рекламе от ST о STM32F4DISCOVERY:

  • микроконтроллер STM32F407VGT6 с частотой 168Mhz на 32-битном ядре ARM Cortex-M4F, 1 Мб флэш-памяти, 192 Кб оперативной памяти в корпусе LQFP100.
  • встроенный ST-LINK/V2 с возможностью использования ST-LINK/V2 как отдельного устройства(с SWD разъемом для программирования и отладки).
    LIS302DL, ST MEMS датчик движения, 3-осевой акселерометр с цифровым выходом.
  • MP45DT02, ST MEMS датчик звука, всенаправленный цифровой микрофон.
    CS43L22, аудио ЦАП со встроенным усилителем класса D.
    четыре светодиода, LD3 (оранжевый), LD4 (зеленый), LD5 (красный) и LD6 (синий).
  • две кнопки (пользовательская и reset)
    порт USB OTG FS и коннектор micro-AB USB Client
    штырьки для быстрого соединения с другими устройствами подключенные ко всем выводам LQFP100.

STM32F407VG6 МК, основан на базе arm-cortex-m4f ядра, в которое включен набор fpu и dsp инструкций для ускорения работы. Помимо ядра работающего на частоте 168 МГц и имеющего производительность 210 МИВС, имеется 7 канальная матричная шина AHB которая позволяет без простоя коммутировать независимо основные блоки МК. Помимо AHB помочь производительности призваны 16 канальный DMA и ART accelerator(tm) (который к сожалению в А версии не работает, чип этой версии и стоит на плате). 192 КБ статического ОЗУ и 1 МБ флеш памяти. Большое количество интерфейсов как последовательных (4 spi, 2 i2s, 2 i2c, 3 usart, 3 uart, 2 usb otg fs/hs, Ethernet MAC 10/100, sdio, 2 can 2.0b) так и параллельных (display 8080, camer 8 — 14 bit, gpio, FSMC). и много других периферийных блоков (таймеров, adc, dac и пр.). Более подробно о чипе можно почитать перейдя по ссылке выше.

Документация STM32F4DISCOVERY

Ссылки
Домашняя страница STM32F4DISCOVERY

electronicsworld.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *