Ардуино как-то постепенно перестала устраивать - памяти маловато, слабенький процессор, медленный АЦП (17мкс на измерение). Поэтому решил ознакомиться с семейством микроконтроллеров
STM32, пока с серией F1 - они хоть и старые, зато ядро ARM Cortex-M3. Для начала приобрел вот такую красивую отладочную плату Хnucleo :
Пока отпуск, для разминки мозгов за несколько дней попытался собрать для этой платы работающий набор интрументов разработчика под Linux-ом
, скомпилять что-то рабочее, причем сразу ориентируясь на библиотеку HAL, как наиболее универсальную. Это оказалось очень непросто, потребовало множество неочевидных трюков, которые стоят того, чтобы записать их на будущее. Для работы потребуется 2 программы:
Трюки по установке и работе 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.