STM32CubeIDE + FreeRTOS + newlib = HardFault!

ST Microelectronics проделали замечательную работу в попытке интегрировать инструменты для embedded разработки под STM32. У них почти получилось, но в CubeMX и генерируемой им коде довольно много косяков, для которых приходится придумывать обходные пути.

Одна из проблем — использование sprintf(«Value is %8.2f», f); приводит к HardFault

То есть вы не можете выводить и вводить числа с плавающей точкой при использовании FreeRTOS. На голом проце — пожалуйста, достаточно включить -u _printf_float в настройках проекта (MCU Settings). А вот под FreeRTOS это вызывает HardFault.

Читать далее

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

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

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

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

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

Прошивка 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