STM32F103C — разработка в Arduino IDE под Linux

При прототипировании различных устройств на микроконтроллерах серии STM32F довольно удобно использовать среду разработки Arduino IDE. Большое количество готовых библиотек, отличная документация и огромное сообщество — и это только основные положительные моменты, что уж говорить о менее значимых преимуществах…

Однако, в отличии от оригинальных плат Arduino (UNO, Mega и д.р.), так называемая Blue Pill работает не так нужно, как хотелось бы — встроенный USB невозможно использовать для прошивки и отладки, приходится прибегать к таким дополнительным устройствам, как ST-Link или USB-UART конвертеры (да еще и с уровнями напряжения 3.3 вольта). А если в качестве операционной системы вы используете Linux, то проблем может прибавиться на порядок…

Тем не менее, все это решаемо. Именно об этом и пойдет речь.

Установка последней версии Arduino IDE

Переходим по ссылке https://www.arduino.cc/en/Main/Software и выбираем Download the Arduino IDE -> Linux 32/64 bits. Распаковываем скачанный архив в домашний каталог и запускаем файл install.sh для начала установки.

Добавление поддержки STM32F в менеджер плат

Запускаем Arduino IDE и открываем окно настроек (Файл -> Настройки). Добавляем дополнительную ссылку для Менеджера плат:

http://dan.drown.org/stm32duino/package_STM32duino_index.json

Далее открываем сам менеджер плат (Инструменты -> Плата: «…» -> Менеджер плат), вводим в поиске «STM32F1xx/GD32F1xx boards» и устанавливаем последнюю версию данного пакета.

Теперь необходимо выполнить скрипт install.sh, который находится в каталоге ~/.Arduino15/packages/stm32duino/tools/stm32tools/номер_версии/linux/. Это добавит необходимые правила udev для корректной работы утилиты upload-reset.

На некоторых дистрибутивах Linux (например Ubuntu) возникает проблема, связанная с недоступностью последовательного порта в течении нескольких секунда после подключения платы. Решается это добавлением следующих правил в файл /etc/udev/rules.d/45-maple.rules.

ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0004", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0004", ENV{MTP_NO_PROBE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0004", MODE:="0664"
KERNEL=="ttyACM*", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0004", MODE:="0664"

После чего необходимо выполнить команду:

sudo udevadm control --reload-rules

Доработка платы для корректной работы USB порта

Китайцы, как обычно, накосячили с номиналом резистора R10, из за чего USB порт работает не совсем корректно. Чтобы это исправить, необходимо заменить данный резистор (10к) на другой с номиналом 1.5к (маркировка 152).

Необходимо так же учитывать то, что выводы PA11 и PA12 должны быть свободны, т.к. они используется в USB подключении.

Установка загрузчика STM32duino при помощи ST-Link v2

Схема подключения:

Скачиваем бинарник загрузчика: https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries

Необходимую версию можно определить по номеру пина, к которому подключен встроенный светодиод. В моем случае это PC13, соответственно файл будет иметь имя generic_boot20_pc13.bin.

Прошиваем bootloader:

~/.Arduino15/packages/stm32duino/tools/stm32tools/номер_версии/linux/st-flash write generic_boot20_pc13.bin 0x8000000

По завершению отключаем плату от ST-Link`а и возвращаем джамперы на место. Теперь можно использовать встроенный USB порт.

Загрузка прошивок через Arduino IDE

В меню Инструменты выбираем следующие параметры:

  • Board: Generic STM32F103C series
  • Variant: STM32F103C8 (20k RAM. 64k Flash)
  • CPU Speed(MHz): 72Mhz (Normal)
  • Upload method: STM32duino bootloader
  • Optimize: Smallest (default)
  • Port: /dev/ttyACM*

Полезный совет: во время отладки удобно приостанавливать выполнение кода до момента подключения к монитору последовательного порта. Для этого используйте следующую конструкцию:

Serial.begin(115200);
while(!Serial.isConnected()){};

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *