STM32CubeIDE + FreeRTOS + newlib = HardFault!

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

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

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

Читать далее

Em::Blocks 1.43 patch

В версии Em::Blocks 1.43 появилась новая структура шаблонов для STM32.
Теперь они более грамотно организованы.
В патч-твик я добавил SPL для STM32F10x и STM32F4xx, а также CMSIS 3.0 для STM32 на ядре Cortex-M3 (серия F1 и F2).
Твикер теперь недеструктивно настраивает среду — все изменения легко откатить — оригинальные файлы не изменяются.
Также можно сбэкапить профиль KeyBindings для перехода между версиями.

Замечу, что в пределах major версий папка профиля сохраняется. Напрмиер, для всех версий 1.4x папка будет 1.40.
Скачать R EmBlocks patcher-tweaker v1.2.0.27

Em::Blocks 1.41 patch

Вышла Em::Blocks 1.41

Патч для версий 1.40 и 1.41 как и для всех последюущих версий будет доступен на своей постоянной страничке R EmBlocksPatch.

В этой версии патча я удалил поддержку ColinkEx — пользоваться этим отладчиком удобно только под CooCox IDE — у них неполноценный commandline API — нужно много чего править в конфиг файлах отладчика для прошивки и отладки.

Если кому-то она нужна, то добавляется очень просто. Можно взять из предыдущей версии патча все, что для нее нужно.

По просьбе читателей добавил выбор вручную папки .config файла (для тех кто на XP)

Em::Blocks 1.31 patch

Вышла Em::Blocks 1.31, и я как обычно выпустил для нее патч. Функционал тот же, но с учетом изменений в новой версии. Ничего не ломает, только добавляет те же плюшки, что и обычно. Немного заодно обновил шаблоны проектов.

Установка

Ставится как обычно:

  • Устанавливаем EmBlocks 1.31
  • Копируем содержимое архива с патчем в папку к EmBlocks с заменой файлов
  • Запускаем один раз среду, чтобы она создала свой профиль
  • Запускаем REmBlocksToolsPatch.exe, жмем Save Updated Config, чтобы добавить пункты меню для прошивки с помощью ST-Link, ST-Link /V2 и CoLinkEx.

Готово, можно пользоваться.

Em::Blocks 1.30

Вышла Em::Blocks 1.30, и я как обычно выпустил для нее патч. Функционал тот же, но с учетом изменений в новой версии. Ничего не ломает, только добавляет те же плюшки, что и обычно. Немного заодно обновил шаблоны проектов.

Обновления собственно версии 1.30

  • Live watch variables ( ‘L’ ive and ‘U’ pdate as shortcuts)
  • Compiler options on file level
  • Debug session saving in .eds file (option)
  • GDB 7.6 as debugger (fixes macro loop -g3 )
  • STLinkGDB supports F429/F439
  • Fix: EmBlocks Bare-metal size reports
  • Fix: Long time before mixed mode assembler view is loaded
  • Fix: Switch frame in callstack is working ( ‘alt-‘ mouse click)
  • Fix: Crash new project while debug session is active
  • Fix: Adding watches dialog appears after OK.
  • Fix: Debugger memory window first line without address field

Установка

Ставится как обычно:

  • Устанавливаем EmBlocks 1.30
  • Копируем содержимое архива с патчем в папку к EmBlocks с заменой файлов
  • Запускаем один раз среду, чтобы она создала свой профиль
  • Запускаем REmBlocksToolsPatch.exe, жмем Save Updated Config, чтобы добавить пункты меню для прошивки с помощью ST-Link, ST-Link /V2 и CoLinkEx.

Готово, можно пользоваться.

Дорабатываем зарядник Turnigy Accucel 6

Многим знакомо универсальное зарядное устройство iMax B6 и его клона Turnigy Accucel 6.

Оно умеет заряжать

  • Литий-полимерный LiPo и литий-ионные LiIon аккумуляторы
  • Никель-кадмиевые NiCd, столь любимые производителями электродрелей
  • Никель-металлогидридные Ni-Mh, идущие в комплекте с недорогими радиуправляемыми моделями
  • Свинцовые Pb, которые можно найти в автомобиле, мото, UPS и много где еще.

Стоит недорого, принимает питание 11-17В от БП или автомобильного аккумулятора, позволяя заряжать прямо в поле.
Но это еще не все. Зарядник можно подключить к компу и получить наглядные графики зарядки/раздрядки аккумуляторов, наглядно оценив на графике, в каком диапазоне напряжений сосредоточена основная часть заряда, как аккумулятор реагирует на разные зарядные и разрядные токи, насколько проседает напряжение под нагрузкой и много чего еще интересного.
Вот только с завода эта зарядка уже пару лет идет без такой возможности. Производитель пожадничал и не поставил пару микросхем и копеечных элементов, а производитель iMax B6 вообще шнурок и софт продает отдельно по цене сопоставимой с самой зарядкой.
Будем исправлять

Em::Blocks 1.20

Вышла Em::Blocks 1.20, в которой довольно много вкусностей:

  • Semihosting as library option for EmBlocks Bare-metal ARM
  • Semihosting checkbox in debug interfaces JLink and STlink
  • Live data implemented on memory watch and debugger variable tooltip.
  • New STlinkGDB server with live data and semihosting support
  • Syntax highlight on GNU linker scripts
  • Yagarto toolchain replaced by Generic GCC (Yagarto project is cancelled)
  • C++ library linker option and C++ compiler options added
  • Make file tool entry is replaced by CPP tool entry.
  • Device list updated for JLinks
  • STmicro project wizard is changed so that the debug interfaces are preconfigured at the beginning.
  • Breakpoint on-the-fly is now working
  • Run to main() is working smoothly
  • Pre-compiled headers is supported
  • File manager plugin added to the installation package
  • EnergyMicro project wizard is using the preinstalled header files from EM instead of copying all the files with the wizard.
  • Project wizard can also use ZIP archive as template storage.
  • Bug fix STmicro project wizard
  • Bug fix EnergyMicro project wizard
  • and a lot of minor fixes.

В связи с этим я сделал новую сборку с версией 1.20
Читать далее

EmBlocks — IDE для STM32

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

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

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

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

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