Мотивация
Привет, Хабр!
Раньше я в основном работал с оригинальной отладочной платой Nucleo (STM32F411RE) и отлично чувствовал себя в среде macOS. Недавно я решил прошить плату Blue Pill с помощью китайского программатора ST‑LINK и столкнулся с множеством ошибок в CubeIDE. Решил разобраться с ними раз и навсегда. На деле всё оказалось не так сложно, как я думал поначалу: хоть и пришлось использовать несколько ухищрений, процесс работает!
Эта статья — дубликат моего репозитория. Я давно хотел написать первую публикацию на Хабре и решил начать с переноса своих «шпаргалок». Репозиторий я оформил самостоятельно, и в нём отражены только те ошибки, с которыми столкнулся я. Если вы обнаружите что-то новое, буду рад дополнить материалы.
Не будем затягивать — приступим!
Настройка системы
Для начала установим Homebrew, менеджер пакетов для macOS, который значительно упрощает процесс установки, обновления и удаления программного обеспечения через терминал. Он поможет в установке инструментов и библиотек, которых нет в стандартной поставке macOS.
Установка Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Далее нам понадобится несколько инструментов:
autoconf – инструмент для автоматической генерации configure-скриптов, часто используется в сборке программ из исходников.
automake – утилита для автоматического создания файлов Makefile.in на основе Makefile.am, используется в процессе сборки.
pkg-config – утилита, которая помогает находить пути и флаги компиляции для библиотек (CFLAGS, LDFLAGS).
libusb – библиотека для работы с USB-устройствами на низком уровне.
libusb-compat – совместимая версия libusb для программ, ожидающих API старой версии libusb-0.1.
brew install autoconf automake pkg-config libusb libusb-compat"
Установка Stlink:
Stlink — это open-source проект, исходники которого можно взять тут [https://github.com/texane/stlink.git].
mkdir stlink_v2 && cd stlink_v2
git clone https://github.com/texane/stlink.git && cd stlink/
Создаем папку для сборки:
mkdir build && cd build
Установка CMake через Homebrew:
brew install cmake
Генерация файлов сборки с CMake (Запускаем в родительской папке):
cmake ..
Компилируем проект:
make
(Если на этом моменте возникает ошибка, то в конце есть ее возможное решение)
Установка программ:
sudo make install
Все утилиты будут лежать в bin
Проверка подключения stlink v2:
st-info --probe
(Если на этом моменте возникает ошибка, то в конце есть ее возможное решение)
Прошивка:
Собираем исполняемый файл в любой удобной для Вас IDE. Если у вас файл с расширением .elf то измените его на бинарный:
arm-none-eabi-objcopy -O binary f103c8t6_v1.elf f103c8t6.bin
Переключите BOOT0 в 1, подключите плату и попробуйте прошить её:
st-flash write /Users/you_prof/stm32project/f103c8t6.bin 0x08000000
(проверьте путь до f103c8t6.bin, мой не будет совпадать с вашим!)
Нюансы
1) Проблема с компиляцией на macOS
При выполнении команды make для сборки проекта может возникнуть следующая ошибка:
In file included from .../libusb_settings.h:49:26:
error: 'MINIMAL_API_VERSION' is not defined, evaluates to 0 [-Werror,-Wundef]
Ошибка возникает потому, что в файле libusb_settings.h макрос MINIMAL_API_VERSION не определён для платформы macOS. В исходном коде проекта этот макрос задан только для систем FreeBSD, OpenBSD, Linux и Windows, а для macOS отсутствует соответствующее определение.
Чтобы устранить ошибку, необходимо отредактировать файл libusb_settings.h и добавить определение MINIMAL_API_VERSION для macOS. Например, можно внести следующие изменения:
-
Откройте файл по пути:
stlink/src/stlink-lib/libusb_settings.h
-
Найдите блок с определениями платформ:
#if defined (__FreeBSD__) #define MINIMAL_API_VERSION 0x01000102 // v1.0.16 #elif defined (__OpenBSD__) #define MINIMAL_API_VERSION 0x01000106 // v1.0.22 #elif defined (__linux__) #define MINIMAL_API_VERSION 0x01000106 // v1.0.22 #elif defined (_WIN32) #define MINIMAL_API_VERSION 0x01000109 // v1.0.25 #endif
-
Добавьте условие для macOS:
#elif defined (__APPLE__) #define MINIMAL_API_VERSION 0x01000106 // v1.0.22
2) Проверка подключения stlink v2
Если у Вас возникла ошибка при проверке подключения stlink, то добавьте путь к библиотеке в DYLD_LIBRARY_PATH:
export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH
Вывод должен быть примерно такой (может потребоваться нажать на RESET):
Found 1 stlink programmers
version: V2J45S7
serial: 620031000D0000393333574E
flash: 0 (pagesize: 1024)
sram: 20480
chipid: 0x410
dev-type: STM32F1xx_MD
...
Комментарии (3)
HEXFFFFFFFF
17.05.2025 08:38По моему работать с железом из под мака это извращение. Нормальные герои всегда идут в обход...))))
Работаю с stm из под винды. Либо в vsc platformio либо, cubeide. Ни каких проблем и танцев с бубнами.
ponikrf
17.05.2025 08:38Работаю в MacOS с stm32 из VSCode - никаких проблем с программаторами и танцев с бубнами. Работают любые блюпилы и тп. OpenOCD работает без проблем. Заливается все одной кнопкой.
У разных людей - разные пути.
bak
Консольный не всегда нормально работают с китайскими клонами. У меня консольный так и не завелся, вместо этого использую официальную GUI тулу, STM32CubeProgrammer - с ним всё работает и шьется без проблем. На всякий случай - это отдельная тула, ставится и работает отдельно от Cube IDE.