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

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

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

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


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

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

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

  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: Что такое регистры? Как с ними работать?

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

Нахрена UHDTV телевизор, если никто не вещает UHDTV контент?
Раньше и DVD было редкостью, а сейчас FullHD есть не у всех

А что может сделать Умная Микроволновка? Сама борщ сварит?
Если кинешь нужное в горшочек… сварит 🙂 По крайней мере я уже 20 лет назад научился готовить в полном цикле на микроволновке… но иногда приходится останавливать процесс и вручную переворачивать… например при разморозке или при подогреве пюре (некоторые продукты греются неравномерно — верх горячий на уровне кипятка, а внутри лёд).
Или Умный Холодильник сам продукты привезет?
Задача Холожильника сохранить в наивысшем качестве!!! а не бегать по магазинам… хотя и вести список нужных покупок для него не проблема.
В моём холодильнике есть несколько зон хранения с вентиляцией и несколько холодильных камер — на двух камерах можно задавать температуру… хотелось бы ещё иметь холодильную камеру под зелень… с подсветкой, чтобы она не увядала в темноте 🙂
В прошлом году заменил 15-ти летнюю стиралку на Лыжу с частотно-приводным барабаном — стирает почти как в ручную с разными вариантами изменения скорости — за полчаса отстирывает так, как это делала старушка за 2 часа… но хочется от неё воплощения и других стиральных фантазий.
Самая главная фишка, которая нужна реально Умному Дому — совершенная система распознавания образов (голосов/изображений и т.п.). Это то, что человеческий мозг уверенно может делать через 2-3 года после рождения. Чтобы компьютер со 100% уверенностью мог сказать, сколько людей в комнате, кто они и где они.
А вот это мне сейчас нафиг надо… как тупой комп может определить когда надо, а когда не надо включать и какой именно свет? Вот конкретно сейчас я тихо захожу в комнату в темноте, чтобы не побеспокоив узнать состояние больного/ребёнка по дыханию… я конечно мог бы поставить видеокамеру и микрофоны, тепловизоры/датчики температуры тела и артериального давления в умную кровать…
Для контроля температуры воды использую рычажный кран со светодиодной насадкой за 1 доллар… хоть и не совершенная, но как и насадка на душ работает 2 года. Кстати есть умные механические краны поддерживающие постоянную температуры на эффекте термо/биметаллических пластин, а есть электронные включающиеся только когда руки под краном, но не работающие без электричества… Аналогично автодоводчики есть чисто механические, а есть с электронным управлением и датчиками препятствий.
У «умников» фантазия кончается на обычных датчиках движения для включения света в самый неудобный момент, когда голый актёр решил перебежать неосвещённую сцену…

Для начинающих — 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 стоит), удобный редактор кода и отладчик, интерфейс похож на эклипс который многие видели и юзали. От слов переходим к делу — скачаем, установим и настроим софт.

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

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

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

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

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

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

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

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

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

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

Распознавание речи на STM32F4-Discovery / Хабр


В этой статье я хочу рассказать о том, как можно распознавать речь на микроконтроллере, используя отладочную плату STM32F4-Discovery. Поскольку распознавание речи — достаточно сложная задача даже для компьютера, то в данном случае оно проводится при помощи сервиса Google. Распознавание речи таким способом может пригодится в разных задачах, например в одном из устройств «умного дома».

Отладочная плата STM32F4-Discovery заметно отличается от нередко упоминаемой в статьях отладочной платы STM32-Discovery. На ней установлен микроконтроллер STM32F407VGT6, использующий архитектуру Cortex-M4F, имеющий 1 MB Flash и 192 KB RAM. Контроллер способен работать с тактовой частотой 168 МГц.

На отладочной плате установлен аудио-ЦАП со встроенным усилителем (его выход соединен с разъемом для наушников) и цифровой MEMS-микрофон, благодаря чему на базе STM32F4-Discovery можно легко изготовить устройство, работающее со звуком.

Распознавание речи с использованием Google Voice Search описано здесь: Статья.
Для того, чтобы распознать какую-либо сказанную фразу с использованием микроконтроллера, нужно выполнить ряд действий:

• Записать звук в память контроллера.
• Произвести кодирование звука.
• Установить соединение с сервером Google.
• Отправить на сервер POST-запрос и закодированные аудиоданные.
• Принять ответ от сервера.

Запись голоса
Поскольку на плате уже есть цифровой микрофон, записывать звук будем с его помощью. В данном случае это PDM-микрофон. Он имеет только два сигнальных вывода — тактирование и данные. При наличии сигнала тактирования, на выходе данных микрофона появляется сигнал, закодированный при помощи PDM модуляции (подробнее о ней рассказано в Википедии: Pulse-density modulation). На STM32F4-Discovery микрофон соединен с SPI/I2S — для приема данных с микрофона достаточно сконфигурировать I2S на прием данных, и по прерыванию от I2S считывать из регистра полученные данные. Эти данные сохраняются в память контроллера, и после того, как будет записано достаточное количество данных, производится их фильтрация, результатом которой являются несколько семплов аудиоданных.
Работа с микрофоном описана в документе AN3998 от ST — там объясняется принцип действия микрофона, особенности его подключения и описывается работа с функцией фильтрации.

На сайте ST среди различных примеров для платы есть пример работы со звуком, вот только он достаточно навороченный — в примере показано, как воспроизводить звук из памяти контролера и с подключенной к плате USB-флешки. Так же демонстрируется запись звука на флешку. Код для воспроизведения и записи звука я брал именно оттуда. Вот только в этом коде оказалось немало ошибок и недоделок — вероятно, пример писали в спешке.

Кодирование записанного звука
Описания работы с сервисом распознавания речи уже не раз приводились в интернете. Во всех случаях авторы используют аудиокодек FLAC, так как в Google используют нестандартное кодирование Speex данных.
Это видно из кода браузера Chromium: Код, отвечающий за запись звука.
В описании POST запроса указывается, что тип данных — «audio/x-speex-with-header-byte».
Вот только на STM32 не удастся закодировать данные в формат FLAC — нет таких библиотек. А вот код Speex портирован на STM32, поэтому для кодирования я использовал именно этот кодек. Из кода Chromium довольно легко понять, в чем заключается модификация кодека — перед началом каждого фрейма закодированных аудиоданных вставляется дополнительный байт, равный длине фрейма в байтах.

Запись и кодирование звука идут одновременно — с использованием двойной буферизации: в то время, пока в один из буферов записываются 160 семплов аудиоданных, данные из другого буфера кодируются в формат Speex. Закодированные данные сохраняются в памяти контроллера. Запись идет в течении 2 секунд, в результате чего формируются 2100 байт закодированных аудиоданных. Частота дискретизации — 8 кГц.

Связь с сервером Google

Для соединения с интернетом используется отладочная плата с WIFI модулем — RN-XV. На ней установлен WIFI-модуль RN-171 (снизу платы), антенна, 3 сетодиода и штыревые разъемы. Связь с модулем идет через UART, так что для работы с ним достаточно 4 проводов. Стоимость платы в sparkfun, откуда я его заказывал — 35$. Сам WIFI — модуль стоит 30$. Подробнее о модуле можно прочитать на сайте sparkfun: RN-XV WiFly Module.

Для того того, чтобы передать данные на сервер, нужно подключится к нему по протоколу TCP, а затем передать запрос такого вида:

POST http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU HTTP/1.1@#Content-type: audio/x-speex-with-header-byte; rate=8000@#Connection: close@#Content-length: 2100@#@#

Символы @# программа заменяет на CRLF. После передачи запроса нужно отправить на сервер 2100 байт закодированных аудиоданных. Получив все данные, сервер производит распознавание речи, и передает распознанную строку вместе с дополнительной информацией, после чего соединение с сервером закрывается.

После того, как ответ сервера принят, программа выделяет из него распознанную строку и выводит ее через другой UART микроконтроллера. Данные из этого UART передаются на компьютер в терминал, в окне которого и появляется распознанная фраза. После этого контролер готов в запуску записи новой фразы.

Получившаяся конструкция выглядит так:

А вот как она работает:

Обновление:

Уже после того, как я выложил статью, я смог реализовать запуск записи при появлении громкого звука (в том числе и речи). Для этого программа постоянно ведет запись и кодирование звука. Закодированные данные помещаются в массив. После достижения его конца, данные начинают помещаться в его начало. В то же время программа постоянно проверяет, не появился ли громкий звук. При его появлении программа сохраняет значение указателя записи и ведет запись в течение 2 секунд. После остановки записи, программа копирует данные в другой буфер. Так как известно, в какой момент появился звук, можно брать данные незадолго до этого. Таким образом, первые звуки слова не теряются.

Видео работы VAD:

Программа написана в IAR.
Программа позволяет воспроизводить записанную фразу, перед тем как отправить ее на сервер. Для этого достаточно раскомментировать некоторые строки в функции main.

В приложенном архиве несколько проектов:
my_audio_test — записывает и сразу же воспроизводит звук с микрофона.
speex_out — воспроизводит звук в формате Speex, хранящийся в Flash памяти контроллера.
speex_rec — записывает и кодирует звук при помощи Speex в течение 2 секунд, после чего воспроизводит запись.
speech_wifi — сам проект распознавания речи, в этом проекте используется WIFI.
speech_wifi_vad — проект распознавания речи с VAD, в этом проекте используется WIFI.

www.dropbox.com/s/xke5rq8lzi980x5/NEW_VOICE.zip?dl=0

STM32F4DISCOVERY — знакомство с возможностями

STM32F4DISCOVERY — это отладочная плата, которая была создана для того, чтобы можно было удобнее изучать микроконтроллеры серии STM32F4. Она включает в себя  все необходимое для  того, чтобы  быстрее приступить к освоению 32-битных ARM-микроконтроллеров STM32F407VGT6 семейства Cortex-M4.

 

На плате установлены:

  • 32-битный ARM-микроконтроллер STM32F407VGT6 семейства Cortex-M4 (Частота: до 168 МГц.  Память программ (Flash): 1 МБайт. ОЗУ (RAM): 196 Кбайт. Возможность отладки по JTAG или SWD).
  •  Отладчик и программатор ST-Link/V2 для отладки и прошивки микроконтроллера STM32F407VGT6 размещен на самой плате STM32F4DISCOVERY и есть возможность переключать его на программирование и отладку других плат и контролллеров. через выведеный разъём SWD и перемычки.
  •  Выводы для подачи внешнего питания +5V и  возможность запитки других устройств от +5V и +3V.
  •  Кнопка сброса (RESET) микроконтроллера STM32F407VGT6.
  •  Четыре светодиода и одна кнопка, доступные для программирования.
  •  Все выводы микроконтроллера выведены по бокам платы штырьками по два ряда
  •  3х-осевой цифровой акселерометр на MEMS-датчике движения LIS302DL, MEMS – микроэлектромеханические системы
  •  цифровой MEMS-микрофон на MP45DT02. MEMS – микроэлектромеханические системы
  •  аудио-ЦАП со встроенным драйвером динамиков класса D на CS43L22
  •  разъём micro-USB для USB OTG.

 

Для подачи напряжения питания на плату STM32F4 Discovery используется разъём mini-USB от программатора/отладчика ST-Link.  При наличии напряжения питания горит светодиод LD2. Светодиод LD1 показывает работу программатора ST-Link.

Если плату с заводской прошивкой подключить через разъём micro-USB для USB OTG к компьютеру, то она будет вести себя как джойстик класса USB HID.

Официальная страница, посвященная отладочной плате STM32F4DISCOVERY, размещается на сайте производителя STMicroelectronics по адресу www.st.com/stm32f4-discovery

Расширение функциональных возможностей происходит за счет дополнительных модулей, описание которых есть на www.st.com/stm32f4dis-expansion.  К STM32F4 Discovery можно подключить Ethernet, ЖК-дисплей и другие фишечки.

.

Знакомство с STM32VL Discovery — EasySTM32

Для начального знакомства с контроллерами STM32 идеальным вариантом будет готовая отладочная плата. Так получилось, что я совершенно бесплатно заполучил платку STM32VL Discovery. Было время когда их раздавали бесплатно всем, кто изъявил желание её получить. Если покупать, то стоит она сравнительно не дорого, например в наших краях ~20$. Как правило любая отладочная плата (из всех что я видел) представляет собой непосредственно сам микроконтроллер, программатор подключенный к этому контроллеру и некоторый набор внешней периферии которая так же определённым образом подключена к контроллеру. И все это на одной платке. Под периферией подразумеваются различные кнопки, индикаторы, светодиоды и прочие ништяки 🙂 Надо отметить что в плане периферии эта платка очень бедна: Есть всего лишь 2 светодиода и одна кнопка (+ одна кнопка сброса но она не в счет). Для первого знакомства  достаточно, но если идти дальше а не только мигать диодом — то маловато будет и надо паять что-то своё или дорабатывать эту платку. Выглядит сама платка так: 

Присмотревшись, не сложно будет понять откуда взялся логотип для этого сайта 🙂  Начнем по порядку. Во-первых плата поделена на две части: Отладчик ST-LINK и непосредственно сам контроллер с обвязкой. Отладчик мне очень понравился: умет работать со многими (если вообще не со всеми) контроллерами STM32. Наружу выведен интерфейс SWD, этот интерфейс физически реализован в виде двух проводов, что весьма удобно. Это позволяет нам прошивать другие контроллеры STM32 при помощи этой платы. Перед прошивкой какого-либо внешнего контроллера необходимо снять две перемычки через которые отладчик соединен с программируемым контроллером на установленном на плате. Для удобства рядом с двумя контактами SWD есть еще земля и плюс питания. Кроме SWD есть еще JTAG, проводов там побольше и разъёма на плате нет. При желании можно подпаяться к контроллеру (который в отладчике), но смысла я в этом пока не вижу, так как через SWD отладка и программирование работают отлично. Кроме выполнения своих прямых функций, отладчик также обеспечивает питанием 3.3 вольта всю плату. Подключается к компьютеру через обычный mini-usb кабель который к сожалению в комплект не входил. У отладчика так же есть два светодиода, один показывает что на плату подается питание, а второй мигает во время любой активности. Переходим к оставшейся части платы: Самое главное в ней — это как ни странно контроллер 🙂 На плате установлен STM32F100RBT6B. Чип вполне нормальный, нет разве что USB что немного огорчает. Основные характеристики такие: Тактовая частота 24 МГц, 128 кб флеш памяти, 8 кб ОЗУ, наличие ADC, DAC, I2C, SPI, USART, RTC и некоторых других вещей со страшными названиями. Для первого знакомства — самое оно! Естественно голый чип, (пусть даже подключенный к отладчику и питанию) ни какого интереса не представляет по понятным причинам: Отработала зашитая вами программа, а результата не видно. Для взаимодействия с внешним миром у этого контроллера есть ноги, причем 51 нога  (из 64-х) может менять свое состояние по желанию программиста. Вот как раз к двум таким ногам подключены два светодиода — зелёный и синий, первое время тренироваться будем на них. Из «устройств вывода» это всё. Для того чтоб как-то воздействовать на выполнение программы есть одна кнопка (синяя). В программе можно определять её состояние (нажата или отпущена), а вот вторая кнопка служит для сброса контроллера. По сути дела, кнопка и пара светодиодов это все с чем может работать пользователь этой платы. После некоторого числа экспериментов возникнет желание подключить какой-нибудь дисплей, карту памяти, дополнительные кнопки или еще чего, но на первое время нам хватит этого. В плане подключения внешних устройств — плата довольно удобна, так как все выводы контроллера посажены на три гребёнки штырьков по бокам платы:

На счёт подключения дополнительное периферии — будут статьи. Еще очень важно обратить внимание на перемычку управляющую питанием. Если её снять то контроллер будет обесточен и соответственно работать ничего не будет. Удобно вместо перемычки подключать амперметр и смотреть на ток потребления, если конечно вы любознательный человек вроде меня 🙂 На плате так же имеются два кварца : на 32768 Гц и на 8 МГц. От последнего тактируется контроллер, причем кварц этот легко вынимается и заменяется на другой без всякой пайки, это если вдруг пользователю захочется скорости, но для большинства наших первых экспериментов хватит и 8 МГц. Второй кварц — часовой. Его наличие не обязательно, но он будет использоваться нами в экспериментах с часами реального времени. Но до этого еще далеко, а сейчас я предлагаю вам попробовать сделать что-то практическое с этой платкой.

P.S. Возможно пригодится схема STM32vl Discovery

STM32F4DISCOVERY — Комплект Discovery с микроконтроллером STM32F407VG * Новый код заказа STM32F407G-DISC1 (заменяет STM32F4DISCOVERY)

Комплект STM32F4DISCOVERY использует возможности высокопроизводительных микроконтроллеров STM32F407, чтобы пользователи могли легко разрабатывать приложения с аудио.

Он включает встроенный инструмент отладки ST-LINK, один цифровой акселерометр ST-MEMS, цифровой микрофон, один аудио ЦАП со встроенным драйвером динамика класса D, светодиоды, кнопки и разъем USB OTG micro-AB.
Чтобы расширить функциональные возможности комплекта STM32F4DISCOVERY за счет подключения к сети Ethernet, ЖК-дисплея и многого другого, посетите веб-страницу www.st.com/stm32f4dis-expansion.
С последним усовершенствованием платы новый код заказа STM32F407G-DISC1 заменил старый эталонный STM32F4DISCOVERY.

Основные характеристики

    Микроконтроллер
  • STM32F407VGT6 с 32-битным ARM ® Cortex ® -M4 с ядром FPU, 1-мегабайтной флэш-памятью, 192-килобайтной оперативной памятью в корпусе LQFP100
  • Встроенный ST-LINK / V2 на STM32F4DISCOVERY (старая ссылка) или ST-LINK / V2-A на STM32F407G-DISC1 (новый код заказа)
  • USB ST-LINK с возможностью повторного перечисления и тремя различными интерфейсами:
    • Порт отладки
    • Виртуальный Com-порт (только с новым кодом заказа)
    • Запоминающее устройство (только с новым кодом заказа)
  • Питание платы: по шине USB или от внешнего источника питания 5 В
  • Внешний источник питания приложения: 3 В и 5 В
  • LIS302DL или LIS3DSH ST MEMS 3-осевой акселерометр
  • MP45DT02 Всенаправленный цифровой микрофон со звуковым датчиком ST-MEMS
    Аудио ЦАП
  • CS43L22 со встроенным динамиком класса D
  • Восемь светодиодов:
    • LD1 (красный / зеленый) для связи USB
    • LD2 (красный) для 3.3 В питание включено
    • Четыре пользовательских светодиода: LD3 (оранжевый), LD4 (зеленый), LD5 (красный) и LD6 (синий)
    • 2 светодиода USB OTG LD7 (зеленый) VBUS и LD8 (красный) перегрузка по току
  • Две кнопки (пользовательская и сброс)
  • USB OTG FS с разъемом micro-AB
  • Разъем расширения для всех входов / выходов LQFP100 для быстрого подключения к макетной плате и легкости проверки
  • Комплексное бесплатное программное обеспечение, включая множество примеров, часть пакета STM32CubeF4 или STSW-STM32068 для использования устаревших стандартных библиотек.
,

STM32F4-Discovery учебник с Visual Studio — Учебники VisualGDB

В этом руководстве показано, как создать простой проект для платы STM32F4-Discovery с помощью Visual Studio.

Для работы с этим руководством вам потребуется следующее оборудование и программное обеспечение:

  • Microsoft Visual Studio
  • VisualGDB
  • STM32F4-Плата обнаружения

Мы создадим простой проект «мигающего светодиода», построим его и пройдемся по нему в отладчике.

  1. Запустите Visual Studio. Выберите File-> New-> Project. 01-newprj
  2. Выберите VisualGDB -> Мастер встроенных проектов. Выберите каталог и название проекта: 02-blink
  3. Поскольку мы создаем файл микропрограммного обеспечения без каких-либо статических библиотек, продолжайте с опцией «встроенный двоичный». Мы рекомендуем выбрать «MSBuild» в качестве подсистемы сборки: 03-msbuild
  4. Поскольку мы создаем прошивку для платы STM32F4-Discovery, которая содержит микроконтроллер STM32F407VG на базе ARM, выберите «ARM» на странице выбора инструментальной цепочки.Если набор инструментов ARM еще не установлен, выберите «(загрузить набор инструментов для arm-eabi)», и VisualGDB установит его автоматически: 04-getarm
  5. После выбора цепочки инструментов вы увидите список поддерживаемых устройств. Выберите STM32F407VG из списка: 05-dev
  6. Плата STM32F4-Discovery содержит 4 светодиода, подключенных к контактам PD12-PD15 (для получения более подробной информации см. Схему платы): leds Чтобы создать проект, в котором будет мигать зеленый светодиод, подключенный к PD12, выберите «GPIOD» и «12» в качестве группы портов. и номер: 06-sample
  7. Плата STM32F4-Discovery включает встроенный программатор ST-Link.Просто вставьте его в порт USB, и VisualGDB автоматически обнаружит его. Выберите его из списка и нажмите «Тест», чтобы автоматически установить необходимые драйверы и убедиться, что отладочное соединение работает: 07-device
  8. VisualGDB попытается запустить OpenOCD и подключится к нему, чтобы убедиться, что отладка возможна: 08-test
  9. Нажмите «Готово» в мастере для завершения. После создания проекта нажмите Ctrl-Shift-B, чтобы построить его: 09-build
  10. Нажмите F5, чтобы начать отладку.Обратите внимание на то, как светодиод включается и выключается. Теперь установите точку останова на первой строке GPIO_WriteBit () . Точка останова сработает немедленно, и светодиод погаснет: led_off
  11. Откройте окно регистров, нажав Ctrl-Alt-G или выбрав Отладка-> Windows-> Регистры. Щелкните его правой кнопкой мыши и убедитесь, что включен параметр «Все регистры»: 10-pc
  12. Обратите внимание на значение регистра ПК. Значение в диапазоне 0x80xxxxxx указывает, что программа выполняется из FLASH-памяти.Позже мы изменим его на SRAM. Нажмите F10, чтобы перейти на одну строку кода. Обратите внимание, как загорается светодиод: led_on
  13. Выйдите из отладки, нажав Shift-F5. Щелкните правой кнопкой мыши узел проекта в обозревателе решений и выберите «Свойства проекта VisualGDB»: 11-projprops
  14. Нажмите «Изменить настройки» и выберите SRAM вместо FLASH: 12-sram
  15. Предыдущая двоичная сборка для режима FLASH не запускается из SRAM. Перестройте проект, чтобы исправить это: 13-build
  16. Начните отладку и дождитесь достижения точки останова.Обратите внимание, что регистр pc теперь содержит значение в диапазоне 0x20xxxxxx, которое указывает на работу из SRAM: 14-pc Запуск вашей программы из SRAM не требует циклов перезаписи FLASH при загрузке программы или установке точек останова. Однако у него есть недостаток по сравнению с режимом FLASH: вся ваша программа, включая весь код и константы, должна помещаться в SRAM, поэтому она может не работать для больших программ.
  17. Вы можете использовать View-> Embedded Memory Explorer, чтобы увидеть, какие именно функции отвечают за использование памяти: 15-memexp

,Наборы для обнаружения

STM32 — STMicroelectronics

КАТЕГОРИИ

Инструменты оценки Свернуть меню

  • Инструменты оценки продукта (597)
    • Платы Aerospace IC Eval (12)
    • Оценочные платы усилителя и компаратора (13)
    • Платы аудио IC Eval (18)
    • Автомобильные платы IC Eval (116)
    • Оценочные платы преобразователей данных (1)
    • Оценочные платы ИС GNSS (5)
    • Инструменты тестирования MCU и MPU (204)
      • SPC5 Automotive MCU Eval Tools (47)
      • STM32 MCU & MPU Eval Tools (144)
        • Сторонние инструменты оценки STM32 (20)
        • Комплекты STM32 Discovery (38)
        • Платы STM32 Eval (28)
        • Нуклео платы STM32 (58)
      • Инструменты тестирования MCU STM8 (13)
        • Платы STM8 MCU Eval (10)
        • Нуклео платы STM8 (3)
    • Оценочные платы для датчиков движения MEMS (87)
    • Датчики приближения и оценочные платы ИС для ИС (17)
    • Оценочные платы силовых ВЧ-транзисторов (27)
    • Платы Secure MCU Eval (2)
    • ST25 Инструменты NFC / RFID Eval (34)
      • Оценочные платы ST25 NFC / RFID (25)
      • Антенны ST25 NFC / RFID (9)
    • Платы расширения STM32 Nucleo (61)
  • Инструменты оценки решения (705)
    • Доски оценки строительных решений (10)
    • Оценочные платы решений для коммуникации и подключения (90)
    • Оценочные платы для компьютеров и периферийных устройств (8)
    • Доски оценки цифровых потребительских решений (23)
    • Оценочные платы для решений Energy и Smartgrid (26)
    • Доски оценки решений для здравоохранения и благополучия (11)
    • Оценочные платы для бытовых приборов и электроинструментов (16)
    • Доски для светодиодов и общего освещения (96)
    • Оценочные платы для решения управления двигателем (116)
      • Трехфазные двигатели (PMSM, BLDC, ACIM) (62)
      • Матовые двигатели (25)
      • Шаговые двигатели (31)
    • Таблицы оценки решений для управления процессами и автоматизации (35)
    • Оценочные платы для блоков питания и преобразователей (236)
    • Платы для оценки сенсорных решений (21)
    • Доски для транспортных решений (17)
,

GitHub — ChrisMicro / Arduino_STM32F4_Discovery

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграции
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • мобильный
    • Истории клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Изучите GitHub →
    Учитесь и вносите свой вклад
    • Темы
    • Коллекции
    • В тренде
    • Учебная лаборатория
    • Руководства с открытым исходным кодом
    Общайтесь с другими
    • События
    • Форум сообщества
.

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

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