Именно с идеи создания собственного пультика для управления светом в комнате и началось моё увлечение электроникой, микроконтроллерами и различными радиоустройствами.
Список статей:
После этого я начал изучать данную тему, знакомиться с основами электроники, примерами устройств, узнавать, как люди реализуют подобного рода устройства.
В компании, в которой я работаю, имеется отдел разработки, и я решил обратиться к инженерам чтобы они направили меня на путь истинный и показали с чего можно было бы начать решение своей задачи. Меня решительно отговорили от изучения Arduino и у меня в руках оказалась неведомая и непонятная зеленая платка на которой виднелись надписи, буковки, разные электронные компоненты.
Всё это для меня на тот момент показалось непостижимо сложным, и я даже пришел в некоторое смятение, но от реализации поставленной задачи отказываться не собирался. Так я познакомился с семейством микроконтроллеров STM32 и платой STM32F0-Discovery, после изучения которых мне хотелось бы сваять свой девайс под нужные мне цели.К моему большому удивлению, такого большого комьюнити, статей, примеров, различных материалов по STM не было в таком же изобилии как для Arduino. Конечно, если поискать найдется множество статей «для начинающих» где описано, как и с чего начать. Но на тот момент мне показалось, что все это очень сложно, не рассказывались многие детали, интересные для пытливого ума новичка, вещи. Многие статьи хоть и характеризовались как «обучение для самых маленьких», но не всегда с их помощью получалось достичь требуемого результата, даже с готовыми примерами кода. Именно поэтому я решил написать небольшой цикл статей по программированию на STM32 в свете реализации конкретной задумки: пульт управления освещением в комнате.
Во-первых, решающую роль сыграло отношение цена-функционал, разницу видно даже между одним из самых дешевых и простых МК от ST и достаточно «жирной» ATMega:
После того, что я увидел значительные различия между ценой и возможностями AVR и STM32 – мною было принято решение, что AVR использовать в своей разработке я не буду =)Во-вторых, я предварительно для себя старался определить набор умений и навыков, которые бы я получил к моменту, когда я достигну требуемого результата. В случае если бы я решил использовать Arduino – мне было бы достаточно скопировать готовые библиотеки, накидать скетч и вуаля. Но понимание того, как работают цифровые шины, как работает радиопередатчик, как это всё конфигурируется и используется – при таком раскладе мне бы не пришло бы никогда. Для себя я выбрал самый сложный и тернистый путь, чтобы на пути достижения результата – я бы получил максимум опыта и знаний.
В-третьих, любой STM32 можно заменить другим STM32, но с лучшими характеристиками. Причем без изменения схемы включения.
В-четвертых, люди, занимающиеся профессиональной разработкой больше склонны к использованию 32-разрядных МК, и чаще всего это модели от NXP, Texas Instruments и ST Microelectronics. Да и мне можно было в любой момент подойти к своим инженерам из отдела разработки и разузнать о том, как решить ту или иную задачу и получить консультацию по интересующим меня вопросам.
После Keil спросит нас какой МК будет использоваться в проекте. Выбираем нужный нам МК и нажимаем ОК.
И вновь появится, уже знакомое нам, окно в котором мы можем подключить интересующие нас модули к проекту. Для нашего проекта понадобится два модуля:Для того, чтобы сконфигурировать параметры проекта и настроить наш программатор нужно правым кликом по 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. )
Список статей:
На отладочной плате установлен аудио-ЦАП со встроенным усилителем (его выход соединен с разъемом для наушников) и цифровой 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
Для начала вам понадобятся:
https://www.keil.com/
http://www2.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link004.html#
Вот наша плата STM32F4 Discovery . и мини-кабель USB:
Перед установкой драйвера 1 светодиод (светодиод PWR) будет постоянно гореть красным, а другой светодиод (светодиод COM) будет мигать красным.
После установки st-link_v2_usbdriver обновите драйвер.
Диспетчер устройств -> Другие устройства -> STM32 STLink
Щелкните правой кнопкой мыши и Обновите программное обеспечение драйвера… и выберите Автоматический поиск обновленного программного обеспечения драйвера
После обновления драйвер будет отображаться в контроллерах универсальной последовательной шины или устройствах универсальной последовательной шины как STMicroelectronics STLink ключ
Теперь светодиод COM не будет мигать и будет постоянно гореть красным, как светодиод PWR .
Далее установите Keil uVision5, который вы загрузили ранее. Теперь вам, вероятно, нужен пакет устройств. Получите последнюю версию по ссылке ниже (на данный момент Keil.STM32F4xx_DFP.2.8.0.pack ).
Keil -> Поддержка устройств серии STMicroelectronics STM32F4, драйверы и примеры -> Загрузить
http://www.keil.com/dd2/pack/#/eula-container
После загрузки откройте Keil uVision5 и установите пакет, как показано ниже:
Щелкните Pack Installer .
Обновите свои пакеты (Файл -> Обновить) (Для обновления вы должны быть в сети). Затем импортируйте уже загруженный пакет (Файл -> Импорт…). После того, как вы импортировали пакет, вы можете увидеть его как STM32F407VGTx .
Вы можете начать с примера проекта (Blink), чтобы протестировать свою плату.
В ранее загруженном пакете есть несколько примеров проектов. Из корневого адреса вашей программы Keil uVision5 выберите пример GPIO . Но сначала отключите защиту только для чтения папки проектов.
Keil_v5 -> ARM -> Pack -> Keil -> STM32F4xx_DFP -> [Версия пакета (например, 2.8.0)] -> Щелкните правой кнопкой мыши папку «Проекты» и перейдите в «Свойства», снимите флажок «Только для чтения» и подтвердите изменения в подпапках. и файлы.
Теперь в Keil uVision5 откройте ваш пример проекта. Проект -> Открыть проект…
Keil_v5 -> ARM -> Пакет -> Keil -> STM32F4xx_DFP -> [Версия пакета (например, 2.8.0)] -> Проекты -> STM32F4-Discovery -> Примеры -> GPIO -> GPIO_EXTI -> MDK-ARM -> Project (файл с зеленым значком)
Теперь настройте конфигурацию для вашей платы. Нажмите «Параметры для цели»…
Из Цель набор вкладок Xtal (MHz) до 8.0
На вкладке Отладка используйте Отладчик ST-Link
На вкладке Утилиты снимите флажок Использовать драйвер отладки и выберите ST-Link Debugger
В Configure Flash Menu Command откройте настройки и убедитесь, что во вкладке Flash Download для Programming Algorithm вы добавили STM32F4xx Flash .
и в Отладка 9Вкладка 0010 для адаптера отладки Блок ST-Link/V2 уже выбран (когда ваша плата подключена к компьютеру), а порт — это SW .
Теперь откройте main.c из папки Example/User на панели инструментов Project с левой стороны. Build вы проецируете, нажав F7 или значок. И Загрузите на свою доску, нажав F8 или иконку.
пока вы загружаете свой проект, светодиод LD1 на вашей плате будет неоднократно мигать красным и зеленым. Это показывает, что проект загружается на вашу доску.
Если все процессы прошли правильно, вы увидите эти сообщения в окне Build Output внизу.
Нажав синюю кнопку на плате, вы увидите, как 4 светодиода (между черной и синей кнопками) включаются и выключаются.
Я рекомендую прочитать руководство пользователя, чтобы лучше узнать вашу плату.
Discovery Kit с микроконтроллером STM32F407VG. Руководство пользователя Загрузить
Для получения дополнительной информации и подробностей вы можете проверить этот PDF-файл. Скачать
Не стесняйтесь задавать вопросы, если у вас возникнут проблемы.
Масуд
Нравится Загрузка…
Эта статья представляет собой руководство для начинающих по платам для разработки STM32, в котором рассказывается о популярных вариантах, доступных на рынке, их функциях и о том, как выбрать правильную плату для вашего проекта. Если вы заинтересованы в мультимедийных и аудиоприложениях или ищете недорогую и универсальную плату, это руководство поможет вам начать программирование микроконтроллеров STM32 и встроенных систем.
Отказ от ответственности: Электричество всегда опасно. Для работы с электричеством необходимы определенные навыки. Делайте работу на свой страх и риск. Автор не будет нести ответственность за любое неправильное использование или вредоносное действие или любую ошибку, которую вы сделаете. Содержание этого веб-сайта является уникальным и защищено авторским правом. Пожалуйста, не делайте никаких бессмысленных действий, копируя и заявляя, что это ваше. Большинство статей, опубликованных здесь, хранятся в открытом доступе, чтобы помочь вам. Берите знания бесплатно и пользуйтесь ими, но если вам интересно, вы можете купить готовые ресурсы, предлагаемые здесь. Если вам нужна помощь или руководство, не стесняйтесь комментировать ниже, автор постарается вам помочь. Также в статье могут быть аффилированные ссылки. Что никак не повлияет на вас в любом случае, но позволит автору с некоторой комиссией. Поэтому, пожалуйста, не принимайте это иначе. Спасибо.
Если вам интересно узнать о программировании микроконтроллеров, возможно, вы слышали о микроконтроллере STM32. STM32 — популярное семейство микроконтроллеров, которое широко используется в различных встраиваемых системах и проектах IoT. Чтобы начать программирование STM32, вам понадобится макетная плата. В этой статье мы рассмотрим некоторые из лучших плат для разработки STM32, доступных на рынке, и как выбрать правильную для вашего проекта.
Объявления
Содержание
Отладочная плата STM32 — это аппаратная платформа, предназначенная для разработки и создания прототипов проектов на базе STM32. Плата включает в себя микроконтроллер STM32, блок питания и различные периферийные компоненты, такие как светодиоды, кнопки, датчики и коммуникационные интерфейсы. Плата может быть подключена к компьютеру через USB, что позволяет программировать микроконтроллер с помощью инструмента разработки программного обеспечения, такого как Keil, IAR Embedded Workbench или 9.0009 STM32CubeIDE .
На рынке доступно несколько плат для разработки STM32. Вот некоторые из наиболее популярных:
Выбор подходящей платы для разработки STM32 зависит от требований вашего проекта и вашего уровня знаний. Если вы новичок, отличным выбором будет недорогая и универсальная плата, такая как STM32 Nucleo или плата Discovery. Если вас интересуют мультимедийные и аудиоприложения, плата STM32F4 Discovery — хороший вариант. Если вы ищете компактную и недорогую плату, хорошим выбором будет плата STM32 Black Pill или Blue Pill.