Микроконтроллерное

Dec 25, 2016 20:51

Ардуино как-то постепенно перестала устраивать - памяти маловато, слабенький процессор, медленный АЦП (17мкс на измерение). Поэтому решил ознакомиться с семейством микроконтроллеров STM32, пока с серией F1 - они хоть и старые, зато ядро ARM Cortex-M3. Для начала приобрел вот такую красивую отладочную плату Хnucleo :


Пока отпуск, для разминки мозгов за несколько дней попытался собрать для этой платы работающий набор интрументов разработчика под Linux-ом, скомпилять что-то рабочее, причем сразу ориентируясь на библиотеку HAL, как наиболее универсальную. Это оказалось очень непросто, потребовало множество неочевидных трюков, которые стоят того, чтобы записать их на будущее. Для работы потребуется 2 программы:
  • Генератор инициализационного кода STM32CubeMX
  • Среда разработки (IDE) на основе Eclipse от OpenSTM32
Трюки по установке и работе STM32CubeMX такие:
  • До ее установки вам потребуется постановить с помощью apt-get пакеты default-jre, lib32z1, lib32ncurses5, lib32stdc++6 - без последних трех можно обойтись, если ваш Линукс уже 32х-битный и если вы готовы распаковывать все архивы вручную (так-то они elf32 самораскрывающиеся).
  • В дальнейшем запускать STM32CubeMX надо будет так: java -cp $HOME/STM32CubeMX com.st.microxplorer.maingui.STM32CubeMX
  • Получившийся после работы проект лучше сразу генерить в проектную диру следующей программы - так его будет проще импортировать в пару кликов
Трюки по работе IDE OpenSTM32 такие:
  • На этот раз без пакетов lib32z1, lib32ncurses5, lib32stdc++6 не обойтись  - toolchain для ARM, привнесенный этой прогой является 32-х и без них работать не будет
  • В $PATH добавить путь до исполняемых файлов тулчейна: $HOME/OpenSTM32/plugins/fr.ac6...linux64.../tools/compiler/bin
  • В каждый проект надо добавлять такой путь для include-файлов в дополнение к уже настроенным: $HOME/OpenSTM32/plugins/fr.ac6...linux64.../tools/compiler/arm-none-eabi/include
  • В main.c каждого проекта надо вписывать #include "stdint.h" (или определять uint32_t и т.п. вручную)
  • В проектном файле .cproject из-за бага в ver 4.18 STM32CubeMX надо окружить символами " следующие 2 строчки:

__weak=__attribute__((weak))
__packed =__attribute__((__packed__))

После этого проект начинает собираться. С полной отладочной информацией и assert-ами бессмысленный bin-файл с пустым рабочим циклом получается 3.7кб.

Непросто. Утомительно. В процессе ковыряния всего этого неоднократно был посещаем мыслью о возврате на уютные простые AVR, где среда разработчика работает из коробки.

А ведь еще надо освоить утилиту управления программатором ST-LINK v2, чтобы заливать bin-файл в контроллер без использования IDE-шной опции Debug.

electronics

Previous post Next post
Up