STM32 и USB-HID — это просто

На дворе 2014 год, а для связи микроконтроллеров с ПК самым популярным средством является обычный последовательный порт. С ним легко начать работать, он до примитивности прост в понимании — просто поток байт.
Однако все современные стандарты исключили COM порт из состава ПК и приходится использовать USB-UART переходники, чтобы получить доступ к своему проекту на МК. Не всегда он есть под рукой. Не всегда такой переходник работает стабильно из-за проблем с драйверами. Есть и другие недостатки.
Но каждый раз, когда заходит разговор о том, применять USB или последовательный порт, находится множество поклонников логической простоты UART. И у них есть на то основания. Однако, хорошо ведь иметь альтернативу?

Меня давно просили рассказать как организовать пакетный обмен данными между ПК и МК на примере STM32F103. Я дам готовый рабочий проект и расскажу как его адаптировать для своих нужд. А уж вы сами решите — нужно оно вам или нет.

У нас есть плата с современным недорогим микроконтроллером STM32F103C8 со встроенной аппаратной поддержкой USB, я рассказывал о ней ранее

Заставим ее работать

R EmBlocks Patch-Tweaker

EmBlocks — отличная IDE для embedded разработки на С/С++.
Она довольно часто обновляется, но в ней пока сохраняется несколько недостатков, которые я для себя исправил и объединил в твикер.

Автор очень активно реагирует на предложения и с новыми версиями функционал моих патчей и твиков часто включается в состав дистрибутива Em::Blocks.
На этой странице я буду выкладывать свежую версию.
Текущия версия твикера совместима с EmBlocks 2.xx

R EmBlocks patch-tweak V1.2.0.87

Как пользоваться:

  1. Распаковать содержимое архива в любую папку.
    При установке патча на свежую версию запустите EmBlocks хотя бы один раз, чтобы она создала свой файл настроек.
  2. Затем из папки EmBlocks запустить REmBlocksToolsPatch.exe.
  3. Нажмите Load config, затем Tweak Em::Blocks — программа запишет измененный конфиг на место.

В файле «patch.conf» содержится ветка <tools> вставки в конфиг, программа загружает его и позволяет отредактировать пути к ST-LINK_CLI.exe. Если отредактировали, нажмите Replaсe Tools path перед сохранением конфига.

Если у вас XP или почему-то не загружается конфиг, вы можете выбрать .conf файл вручную сняв галку «Default .conf directory» и нажав Load config.

Запустите EmBlocks и проверьте, что в меню Tools появились нужные пункты.

Патч можно применять как на свежеустановленной версии, так и при апгрейде.

Возможности версии v1.2.0.87

  • Все изменения недеструктивны
  • Шаблоны проектов и скрипты помещаются в профиль пользователя, не изменяя стандартные шаблоны EmBlocks, их всегда можно удалить.
  • Любую часть патча можно отменить сняв галочку
  • Возможность сделать бэкап профиля KeyBindings с именем RaJa
  • Местоположение EmBlocks определяется из реестра.
  • Файл конфигурации EmBlocks по умолчанию загружается из профиля пользователя, но сняв галку можно выбрать вручную.
  • Папка конфигурации предлагается автоматически по версии установленного EmBlocks

Функционал Templates&scripts патча (в версии Em::Blocks 2.xx можно не использовать):

  • Шаблоны проектов STMicro изменены:
  • На вкладке выбора процессора теперь две галки для генерации .HEX файлов
  • Create hex file (Release target) (стандартная)
  • Create hex file (Debug target) (я добавил для прошивки с STLink Utility CLI)
  • Добавлена галка для включения SPL в состав проекта
  • Изменил настройку по-умолчанию для отладчика ST-Link с JTAG на SWD
  • В Project->Build options->defines добавлено (если выбрана соответствующая галка):
    • USE_STDPERIPH_DRIVER
    • путь .\SPL к библиотеке «STM32 Standard Peripherals Library»
  • Шаблоны проектов описанного мной типа немного изменены.
  • SPL есть для STM32F10x, STM32F4xx
  • CMSIS 3.0 для Cortex-M3
  • В шаблоне проекта файл stm32f10x_conf.h в папке Inc
  • В состав проекта в папке SPL включена Std Periph Library v3.5.0,
    для подключения любого модуля достаточно раскомментировать соответствующую строку:
  • В stm32f10x_conf.h по умолчанию сразу раскомментированы :
    stm32f10x_gpio.h и stm32f10x_rcc.h,
    остальные можно раскомментировать по необходимости

Читать далее

Прошивка STM32 с помощью STM32 Flash Loader Demonstrator

Ко мне периодически обращаются с вопросом — как прошить STM32?

В STM32 есть встроенный Bootloader, затереть его в отличие от Arduino нельзя, никаких фьюз-битов тоже настраивать не нужно. То есть в любом новом проце с завода есть все, чтобы его прошить через обычный COM порт или USB-UART переходник.
Почему такая простая операция вызывает проблемы, я не знаю, но решил, что проще один раз показать 🙂

Я взял для примера плату из этого поста, но принцип абсолютно одинаковый для любых плат:

  1. пин BOOT0 подтянуть к питанию (3.3V)
  2. подключить USART1 микроконтрллера черех переходник USB-UART к ПК.
  3. запустить Flash Loader Demonstrator и залить прошивку
  4. отключить переходник USB-UART (не обязательно)
  5. подтянуть BOOT0 к земле (нормальное положение)
  6. если питание не отключали, то нажать Reset на плате, если отключали — пора подключить питание

Вот и все операции.
Показываю наглядно:

Надеюсь, теперь у всех все получится 🙂

STM32 Flight controller

Сегодня большая веха на пути моего увлечения мультикоптерами. 2 с лишним года назад я заинтересовался мультикоптерами всерьез и с тех пор с другом проектировали и закупали запчасти, был почти годовой перерыв, затем эксперименты с различными полетными контроллерами и рамами, винтомоторными группами, куча побочных проектов.
Весной я всерьез взялся за STM32, поняв, что с Atmega328 как планировалось изначально каши не сварить.
И вот сегодня я наконец-то собрал полетный контроллер на основе платы на STM32F103VE и отдельной платы сенсоров.
Стоимость электроники примерно $35. На борту 32битный контроллер с поддержкой USB, CAN, SPI, I2C, UART, PWM, причем не по одной штуке.
Софт на основе проекта Naze32 я адаптировал к своей плате. Он поддерживает все виды имеющихся у меня сенсоров:

  • Акселерометр ADXL345
  • Гироскоп L3G4200D
  • Комбинированный акселерометр с гироскопом MPU6050
  • Барометр BMP085 и MS6511
  • Магнитометр HMC5883L
STM32FC

STM32 Flight Controller

Светодиоды-индикаторы работоспособны.

Софт полностью поддерживается софтинками MultiWiiConf и MultiWii WinGUI. Телеметрия исправно работает, настройки сохраняются и проект полностью адаптирован к EmBlocks.
Вес двух плат с МК и сенсорами всего 55г.

STM32FC

Телеметрия с работающей платы. Все сенсоры работают

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

А самое главное — у меня наконец-то есть код, который я понимаю, знаю как дорабатывать и есть приличный запас производительности МК и места во флеше.

Начинается самое интересное — доработка полетного контроллера для своих задач.

STM32 + EmBlocks — мигаем светодиодами

Сегодня я покажу от начала и до конца как создать в EmBlocks простой проект для мигания парой светодиодов.
В качестве отладочной платы мы будем использовать кроху на STM32F103C8.
Вот наш стенд:STM32F103C8-Blink
Подключаем аноды светодиодов к пинам PB5 и PB6, катоды через резсторы в 390 Ом к земле.
Поехали

EmBlocks — IDE для STM32

Что нужно для разработки на основе микроконтроллера?

Как минимум сам микроконтроллер. А лучше какую-нибудь плату с минимальной обвязкой к этому микроконтроллеру.
Но МК без программы — это просто кусочек кремния с вкраплениями металла. А для программирования микроконтроллера нужна среда разработки. Можно, конечно, обойтись набором утилит в стиле Unix-way, когда в командной строке запускаются компилятор, линковщик, вручную пишется скрипт make, а редактирование исходных текстов выполняется в каком-нибудь текстовом редакторе. Но лично я предпочитаю работать с комфортом. Поэтому я стал искать интегрированную среду разработки. Она должна:

  • Иметь удобный редактор с подсветкой синтаксиса С/С++
  • Уметь находить объявления функций, переменных и констант в других файлах.
  • Автоматически генерировать шаблон проекта.
  • Иметь возможность настраивать горячие клавиши для различных действий.
  • Иметь интерфейс к отладчику.
  • Быть быстрой, чтобы комфортно работать на ноутбуке.
  • Очень желательно быть бесплатной или недорогой.

Я выбрал Em::Blocks — это IDE, построенная на основе Code::Blocks, но адаптированная для embedded разработки. То есть изначально предназначенная для разработки встраиваемых систем.

EmBlocks
Она бесплатная, удовлетворяет всем перечисленным требованиям и очень гибко настраивается.
Описание и архив настроенной IDE