STM32 "Blue Pill" в среде Arduino Печать
Добавил(а) microsin   

В этом руководстве (перевод [1]) рассматривается, как программировать платку на микроконтроллере STM32F103C8T6, так называемую "Blue Pill" [2] (часто эту плату называют Arduino STM32) с помощью Arduino IDE. Платки Blue Pill в изобилии продаются на AliExpress и Taobao, для поиска вбейте STM32 stm32f103c8t6.

Примечание: если Вы любите паять, то можно также самому заказать печатную плату Blue Pill онлайн-среде EasyEDA благодаря проекту [3]. Это модифицированный в сторону упрощения проект - заменен регулятор LDO на более удобный. Также изменены номинал резистора подтяжки USB и светодиоды индикации. Десяток плат обойдутся примерно $5, плюс доставка порядка $6.

[Что понадобится]

Платка STM32 "Blue Pill" или аналогичная:

STM32F103C8T6 Blue Pill

Отладчик ST-LINK/V2 для микроконтроллеров семейств STM8 и STM32:

STM32F1 Arduino STLink v2 SWD debugger programmer

Примечание: этот отладчик можно купить на AliExpress и Taobao по цене порядка $2. Подойдет и более старый отладчик ST-LINK или ST-LINK/v1, однако будьте внимательны к подключению отладчика через выводы SWDCLK, SWDIO, GND и +3.3V, цоколевки у разъема отладки могут различаться (см. врезку ниже).

На цоколевках синим цветом выделены 4 провода, которыми адаптер подключается к микроконтроллеру STM32.

[STLink/STLink-V1]

STLink V1

Вид на штырьки разъема снаружи:

            +----+
     T_JRST |1  2| 3V3
         5V |3  4| T_JTCK/T_SWCLK
       SWIM |5  6| T_JTMS/T_SWDIO
        GND |7  8| T_JTDO
   SWIM RST |9 10| T_JTDI
            +----+

[STLink-V2]

STLink V2

Вид на штырьки разъема снаружи:

            +----+
        RST |1  2| SWCLK
       SWIM |3  4| SWDIO
        GND |5  6| GND
       3.3V |7  8| 3.3V
         5V |9 10| 5V
            +----+

Еще один возможный вариант цоколевки:

            +----+
        RST |1  2| SWDIO
        GND |3  4| GND
       SWIM |5  6| SWCLK
       3.3V |7  8| 3.3V
         5V |9 10| 5V
            +----+

[Конфигурирование Arduino IDE]

Автор оригинальной статьи [1] использовал Arduino 1.8.1. Я экспериментировал в среде Arduino версии 1.8.13, и все описанное относится к ней. Так что вероятно, что в другой более-менее новой версии Arduino все также будет работать. Процесс по шагам:

1. Зайдите в меню Файл -> Настройки (File -> Preferences) и кликните на кнопку справа от поля ввода "Дополнительные ссылки для Менеджера плат:" (Additional Boards Manager URLs).

STM32F1 Arduino Setup01

2. В окно ввода URL вставьте ссылку

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

STM32F1 Arduino Setup02

Закройте окна настроек кликами на OK.

3. Зайдите в меню Инструменты -> плата -> Менеджер плат... (Tools -> Board -> Board Manager). Для ускорения поиска нужного дополнения в выпадающем списке Тип (Type) выберите Внесены (Contributed). Прокрутите до STM32 Cores by STMicroelectronics и нажмите на кнопку Установка (Install).

STM32F1 Arduino Setup03

Установка пакета поддержки STM32 займет несколько минут. Загрузятся утилиты компилирования и отладки ARM (ARM debugging/compiling toolchain).

4. Необходимо добавить поддержку ST-Link. Загрузите Arduino_STM32-master.zip по ссылке [4]. Создайте папку Arduino_STM32 в каталоге arduino-1.8.13\hardware\ (здесь arduino-1.8.13 это корневой каталог установки Arduino IDE, где находится исполняемый файл arduino.exe). Распакуйте содержимое архива Arduino_STM32-master.zip в папку arduino-1.8.13\hardware\Arduino_STM32.

STM32F1 Arduino Setup04

Перезапустите Arduino IDE.

5. Теперь надо сделать выбор используемой платы и программатора. Зайдите в меню Инструменты (Tools) -> Плата: (Board) -> STM32F1 Boards (Arduino_STM32) -> Generic STM32F103C series. Выбор может быть сделан на основе используемого на плате микроконтроллера.

Пример возможного выбора:

Плата: "Generic STM32F103C series"
Variant: "STM32F103C8 (20k RAM. 64k Flash)"
Upload method: "STLink"
CPU Speed(MHz): "72 MHz (Normal)"
Optimize: "Smallest (default)"

[Загрузка скетча]

Чтобы убедиться, что все работает, запишем в память STM32103 простейшую программу мигания светодиодом - традиционный "Hello World" в мире микроконтроллеров. Для этого зайдите в меню Файл -> Примеры -> 01.Basics -> Blink (File -> Examples -> 01.Basics -> Blink).

STM32F1 Arduino Blink01

Загрузится скетч Blink.

Соедините STLink с платой Blue Pill четырьмя проводами (см. выше врезку "Цоколевки разъема SWD адаптеров ST-Link"):

Blue Pill STLink
3V3 3.3V
SWO SWDIO
SWCLK SWCLK
GND GND

Перемычки BOOT0 и BOOT1 установите в положение 00, что соответствует запуску кода из памяти Flash.

STM32F1 Blue Pill BOOT0 BOOT1

BOOT1 BOOT0 Откуда запустится программа
0 0 Внутренняя память программ FLASH
1 0
0 1 Системная память (встроенный в ROM загрузчик [6])
1 1 Внутренняя память RAM

Нажмите на круглую кнопку со стрелкой вправо (эквивалентно выбору в меню Скетч -> Загрузка Ctrl+U). Программа скомпилируется и загрузится, светодиод PC13 начнет медленно мигать.

[Что дальше?]

Микроконтроллер серии STM32F1 (Arm® Cortex™-M) обладает широким набором аппаратных интерфейсов и возможностей использования.

STM32F103 Blue Pill Pinout Diagram

Поэкспериментируйте с другими примерами кода и проектами из меню Файл -> Примеры. Будьте осторожны с использованием выводов USB- и USB+ (ножки портов PA11 и PA12) - они соединены с выводами коннектора microUSB. Также имейте в виду, что к выводам OSC32IN и OSC32OUT (ножки портов PC14 и PC15) подключен часовой кварцевый резонатор на 32.768 кГц.

[Ссылки]

1. How to program a STM32 Blue Pill with Arduino site:idyl.io.
2. Blue Pill STM32F103C8T6.
3. STM32F103 «Blue Pill» modified board.
4. rogerclarkmelbourne / Arduino_STM32 site:github.com.
5. Платы STM32 на сайте vcc-gnd (на китайском языке).
6Загрузчик STM32F42xxx и STM32F43xxx.
7. 201222STM32F103C8T6-BluePill.zip - пакеты ПО, документация.