Прошивка stm32 через arduino ide stlink

Обновлено: 07.07.2024

Какую статью добавить следующей?

Быстрый старт STM32F103C8T6 + Arduino IDE

Отладочная плата F103C8T6 на базе STM32 по параметрам значительно опережает аналогочные по размеру Arduino Nano или Leonardo, а по скорости близка к Arduino DUE. Есть интерес попробовать, но у новичка могут возникнуть трудности с первым запуском и программированием данной платы. Теперь есть возможность заливать скетчи через Arduino IDE. Подробности далее.

Содержание

  1. Отличия STM32F103C8T6 от Arduino Nano v3.0
  2. Подготовка железа
  3. Подготовка ПО
  4. Закачка скетча (blink) в плату

1. Отличия STM32F103C8T6 от Arduino Nano v3.0

STM32F103C8T6Arduino
Nano v3.0
Частота ядра 72 МГц 16 МГц
Память для кода (Flash) 64 кбайта 32 кбайта
Память для переменных ОЗУ (SRAM) 20 кбайт 2 кбайта
Рабочее напряжение 3.3В
Память EEPROM отсутствует, но существуют
программные эмуляторы
1 кбайт

2. Подготовка железа

Для работы нам понадобится:

  • Сама плата STM32F103C8T6
  • Соединительные провода Dupont мама-мама

Для активации режима программирования на плате STM следует преставить перемычки: первая на 1, вторая на 0.

Конвертер FTDI переключить на питание 3.3 Вольта (перемычкой/джампером)

Соединить проводами плату (П) и конвертер (К):

stm32 pins

3. Подготовка ПО

    , которое будет поддерживать платы STM32
  1. Распаковать архив в папаку HARDWARE, которую можно найти в папке вашей Arduino IDE
  2. Запустить Arduino IDE (или перезапустить если была открыта) и проверить появился ли раздел STM32 Boards в списке Плат

4. Закачка скетча (blink) в плату

В папке которую мы распаковали в п.3.б заходим по следующему пути: Arduino_STM32\examples\Digital\Blink\ и через Arduino IDE открываем файл blink.ino либо можете взять текст отсюда:

Далее в Arduino IDE:

  • Выбрать плату Generic STM32F103C series
  • Выбрать Variant: (20k RAM. 64k Flash)
  • Выбрать Upload method: "Serial"
  • Выбрать Порт: (порт сооответствующий FTDI конвертеру)

Жмем кнопку Вгрузить и результат сразу должен быть виден.

На скачанное дополнение для Arduino IDE ругается антивирус! Проверил архив антивирусом от Касперского (базы от 17.03.2016) - ничего не обнаружил.

Всё сделал по описанию,но при загрузке появляется ошибка
Arduino: 1.6.5 (Windows 7), Плата"Generic STM32F103C series, STM32F103C8 (20k RAM. 64k Flash), STM32duino bootloader"

Изменена опция сборки, пересобираем все

Cannot run program "\bin\arm-no ne-eabi-g++" (in directory "."): CreateProcess error=2, Не удается найти указанный файл

Та же проблема. Сначала думал, что мешает установленная Java - нет. На абсолютно чистой системе, с Arduino 1.6.4, Arduino STM32 master, и установленным драйвером виртуального COM порта, тоже ничего не работает. Ошибка та же самая. Проверено на версиях Arduino 1.6.0, 1.6.4, 1.6.5, 1.6.6, 1.6.8. (именно 1.6.5 видно на одном из скриншотов). Ни на одной не работает. Предлагаю Автору, если у него ещё осталась работающая версия данного программного решения, поделится абсолютными путями указанных в статье файлов, в т.ч. exe-шника Ардуино и файла blink.ino, а также написать содержимое папки hardware, и находящейся в ней папки Arduino_STM32-master. Описанное дополнение для Arduino IDE идет без тулчейна для компиляции (о чем собственно и ошибка: не найден GCC компилятор для arm'ов). Что бы заработало как у автора, нужно инсталлировать в "Менеджере плат" поддержку "Arduino SAM Board (32-bitd ARM Cortex-M3)". Вместе с поддержкой этой платы установится и нужный компилятор.
---
И еще, обратите внимание на строчки в скетче
pinMode(PC13, OUTPUT);
digitalWrite(PC13, HIGH);
digitalWrite(PC13, LOW);
в оригинальном примере идущим с IDE
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
- так тоже откомпилится без ошибок, но работать не будет должно стоять PC13
---
И еще, перед каждой заливкой скетча плату надо ресетить, для запуска UART загрузчика. Мне помогла замена строки в файле Arduino/hardware/Arduino_STM32/STM32F*/platform.txt
Было так:
runtime.tools.arm-none-eabi-gcc.path=/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1
Стало так:
compiler.path=d:/EmBitz/share/em_armgcc/bin/
Естественно предварительно установил EmBitz Всё заработало как в тексте.
Подгрузил только библиотеку "Arduino SAM Board (32-bitd ARM Cortex-M3)".
Не забывайте про перемычку на плате перед прошивкой! А на этой плате пойдет скетч с nano? Просто если поменять пины выходов, то скетч который у меня заработал на nano выдь должен пойти и на этой платке?

Вот так:
C:\Users\Saddamko\AppData\Local\Temp\arduino_build_147792/sketch_jan14b.ino.bin
stm32flash 0.4

Using Parser : Raw BINARY
Interface serial_w32: 230400 8E1
Version : 0x22
Option 1 : 0x00
Option 2 : 0x00
Device ID : 0x0410 (Medium-density)
- RAM : 20KiB (512b reserved by bootloader)
- Flash : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory

Wrote address 0x08000100 (3.15%)
.
Wrote address 0x08001fb8 (100.00%) Done.

image

Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги(с новыми девайсами они неизбежны). Тогда эта статья для Вас.

Arduino тема всё больше захватывает умы человечества, но рано или поздно мы встречаемся с тем, что нам чего-то не хватает, например бюджета/размеров/пиновпортов/разрядности/производительности… Как говорил один мудрый человек — «Кто хочет, тот ищет возможности, кто не хочет — ищет причины».

Краткое изложение данной статьи в видео формате:


Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:

image

Для начала, сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:

image

Всё это в сумме делает данную плату крайне привлекательной во всём, кроме одного — новичку, как например мне, тема STM32 кажется слишком затратной по времени, есть целые сайты посвящённые программированию этих микроконтроллеров. А вот если подружить STM32 с Arduino IDE, то порог вхождения опускается до крайне низкого уровня. Хотя, как говорится, «В каждой бочке мёда, есть ложка дёгтя», но об этом чуть ниже.

Приступим к подготовке платы, для работы с Arduino IDE. Первое что необходимо сделать — залить в микроконтроллер специальный загрузчик, который позволит прошивать плату через аппаратный USB, причём прямо из среды разработки. Для этого необходимо перевести верхний джампер(он же «BOOT0»), в положение «1»:

image

Дело в том, что в STM32 с завода прошит, в так называемую системную память(system memory), специальный загрузчик, который позволяет прошивать плату через самый обычный USB to UART переходник, не прибегая к специфическим программаторам типа ST-Link V2.

image

Дальше нам понадобиться переходник с USB на UART. Стоит помнить, что STM32, это 3.3 В логика, совместимость с 5-ти вольтовой не гарантируется, поэтому рекомендовано использовать USB to UART, у которого есть возможность выбора режимов работы с 3.3/5В логикой. Я использовал дешёвый переходник на базе CH340G:

image


* как видно, производитель не стал заворачиваться со смывкой флюса, на работу, конечно, никак не влияет.

Плату подключил к USB to UART переходнику следующим образом:

image


* PA10/PA9 на плате подписаны просто как A10/A9 — эти порты являются первым аппаратным USART'ом, всего их на плате 3, так же тут 2 аппаратных I2C и 2 SPI.

Ради удобства запитал плату от 5 В, для питания от 3.3 В на плате есть пин «3.3». Внимание, 5 В может запросто вывести микроконтроллер из строя, так что уделите должное внимание подключению.

Качаем, устанавливаем и запускаем Flash Loader Demonstrator(есть в архиве к статье):

image

Выбираем номер COM-порта нашего переходника, в моём случае это COM43, потом нажимаем «Next»:

image

Так как у меня микроконтроллер новый, ещё муха не сидела на него никто ничего не записывал(разумеется кроме самого производителя), то тут по умолчанию стоит защита от чтения, программа нас предупреждает, что если нажать кнопку «Remove protection», Flash память будет очищена, то есть если бы там была какая-то прошивка — она удалится. В моём случае там ничего полезного нет, так что смело жму. Далее вижу следующее:

image

image

Так как моя отладочная плата основана на микроконтроллере STM32F103C8 — здесь 64 Кбайт Flash памяти, есть ещё STM32F103CB микроконтроллер, где в два раза больше Flash.

Дальше кликаем «Next»:

image

Опять «Next», и видим следующее окно:

image

Выбираем «Download to device» и жмём на ". ":

image

Меняем тип файлов на *.bin и открываем файл «generic_boot20_pc13.bin»(тоже присутствует в архиве) который можно взять из проекта STM32duino-bootloader.

Дальше кликаем на кнопку «Next», после прошивки загрузчика мы увидим зелёный свет:

image

Потом надо скачать, для среды разработки Arduino IDE, специальное STM32 ядро(так же есть в архиве к статье). Тут есть один нюанс, на момент написания статьи, ядро не работает на версиях среды разработки свыше 1.6.5, у меня стоит 1.6.5-r5 которую скачал тут.
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9.

image

В моём случае полный путь выглядит вот так — «C:\Users\RSK\Documents\Arduino\hardware»

Разумеется, что система устройство определить не сумеет, поэтому надо ещё установить драйвера на плату. Заходим в папку «Мои Документы\Arduino\hardware\Arduino_STM32\drivers\win»(или «drivers\win», в случае архива к статье), и запускаем от имени администратора файл «install_drivers.bat»:

image

После этого верхний джампер(тот что «BOOT0»), переводим в положение «0» и подключаем плату к компьютеру через microUSB кабель:

image

Она должна в диспетчере устройств определиться или как «Maple DFU» или «Maple Serial (COM*)»:

image

Не совсем понятно почему после первого подключения плата определяется по-разному, на разных компьютерах, но не суть, приступаем к настройке Arduino IDE.

Запускаем среду разработки, дальше Инструменты -> Плата -> Boards Manager:

image

Здесь нужно установить ядро для платы Arduino Due. Выбираем последнюю версию и нажимаем «Install»:

image

Потом Инструменты -> Плата -> «Generic STM32F103C», дальше Variant: «STM32F103C8 (20k RAM. 64k Flash)», Upload Method: «STM32duino bootloader», Порт — номер COM-порта платы, вообщем всё как на скрине:

image

Всё, плата готова к прошивке и программированию в среде разработки Arduino IDE. Давайте прошьём какой-то скетч из примеров, которые «вшиты» в ядро, заходим Файл -> Папка со скетчами -> hardware -> Arduino_STM32 -> STM32F1 -> libraries -> A_STM32_Examples -> Digital -> Blink:

image

Классический «Hello World» в мире микроконтроллеров. Изменяем PB1 на PC13, так как светодиод, что на плате, подключен к этому порту:

image


* К стати, загорается он по низкому уровню на ножке PC13.

Нажимаем кнопку «Вгрузить», после прошивки среда разработки выдаст что-то типа:

image

«Done!
Resetting USB to switch back to runtime mode
error resetting after download: usb_reset: could not reset device, win error: Не удается найти указанный файл.».

image

«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn't find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»

Это означает, что плату прошить не удалось.

Когда среда разработки выдаёт:

image

«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming. »

И больше ничего не происходит, попробуйте в этот момент перезагрузить плату клацнув кнопку ресет. По аналогии это как с Arduino Pro Mini.

А теперь про «ложку дёгтя», о которой я писал вначале статьи, почему-то не всегда получается прошить плату в среде разработки, даже больше, она не всегда определяется компьютером. Я для себя это решил следующим образом, перед тем как загрузить прошивку(перед нажатием кнопки «Вгрузить»), клацаю «Reset» на плате, и после прошивки, ещё раз перезагружаю плату. В этом случае процент вероятности, что плата прошьется, равен 99%. Непонятно почему работает именно так, но факт. Думаю, что рано или поздно этот косяк поправят, и всё будет автоматом перезагружаться как нужно. А чтобы это быстрее поправили, надо чтобы комьюнити этой замечательной STM32 отладочной платы росла, поэтому делитесь этой статьей с друзьями, особенно с друзьями программистами.

По поводу распиновки:

Лучшее что мне удалось найти, это распиновка самого микроконтроллера(открывайте в новой вкладке):

К порту нужно обращаться по полному имени, например:

digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);

Я порылся в файлах ядра, и нашёл один интересный файл:
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp

  • ШИМ, то есть функция analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, а это далеко не все, которые размечены на распиновке чипа;
  • АЦП, аля analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.

Так что имейте это ввиду. Хотя этого более чем достаточно от платы, стоимостью в 1.9 доллара.

Ещё заметил, что пины PA12/PA11 подключены к D+/D- USB, их лишний раз лучше вообще не трогать, ибо чуть что, на кону не 2-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.

Схема отладочной платы:

Ну и на последок:

image

Забыл добавить фото платы с обратной стороны:

image

Тут почти ничего нет, стабилизатор и немного резисторов с конденсаторами.

Так же не рассказал, что дополнительно пропаивал microUSB разъем:

image

Потому что не особо внушала доверие пайка, точнее, её полное отсутствие.


Привет друзья!
Решил выпустить небольшую серию видеоуроков о переходе с платформы Arduino на STM32.
Скажу сразу - я не профессионал. Я так же учусь. Надеюсь мои разборы хоть кому-то будут полезны
Данный курс нацелен больше на новичков. Тех, кто только-только начинают осваивать 32-битные МК от STMicroelectronics. Если есть чего предложить, показать - милости просим к нам в команду.

Список уроков:

SieOK


Переходим с Arduino на Stm32. Шаг за шагом.

Привет друзья!
Решил выпустить небольшую серию видеоуроков о переходе с платформы Arduino на STM32.

Если есть чего предложить, показать - милости просим к нам в команду.

Эдуард Анисимов

Никогда не верьте этому чуваку.
Пиздобол 146%. Информации много, но качество говно. Особенно видосики. 20 минут жуёт сопли и 3 минуты полезной информации.
Остальные два ресурса заслуживают внимания.
Я все сайты с полезной информацией перегоняю в pdf. На этого чувака напоролся на самого первого. Но когда нашёл ресурсы
DiMoon
Microsin
Hamper
и т.д. я понял что человек фуфло и без сожаления стёр весь каталог с его уроками.

А Олега сюда подтянул Алекс, что бы у людей, которым надоела ардуина, была альтернатива для занятия более интересной платформой.

Волков Олег

@Эдуард Анисимов,
Да, на narod stream очень много чего лишнего и не по делу, особенно собирание проекта в total commander. Много ошибок и прочего.
Но я все равно ему очень благодарен, т.к. он дал мне огромный рывок для старта. Особенно его пояснения по языку C.
Да и вообще в целом, ничего плохого про него сказать не могу. Да, человек явно работает на количество контента, а не на качество. Но это его дело.
Тут уж кому что нравится, тот то и смотрит. Главное усвоить материал и уметь им пользоваться.

Для тех, кто только начинает переходить на Stm32, обычно советую:
Книгу: "Си для встраиваемых систем".
Ну и курс этого же автора "Штурмуем STM32".
По языку Си имею всегда под рукой книгу: "Си для программистов с введением в C11"

Эдуард Анисимов

А я нет. Он пытался увести меня с правильной линии.
Я сам HAL уже забросил. На нём буду делать только то, что нужно сделать быстро.
Если интересую т материалы, могу скинуть или ссылки или готовые pdf что я уже успел сделать.
А за Ваши ссылки спасибо.

Волков Олег

А я нет. Он пытался увести меня с правильной линии.
Я сам HAL уже забросил. На нём буду делать только то, что нужно сделать быстро.
Если интересую т материалы, могу скинуть или ссылки или готовые pdf что я уже успел сделать.
А за Ваши ссылки спасибо.

Эдуард Анисимов

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

Волков Олег

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

bort707

Для тех, кто только начинает переходить на Stm32, обычно советую:
Книгу: "Си для встраиваемых систем".
Ну и курс этого же автора "Штурмуем STM32".

Судя по оглавлению, книжка выше - банальный букварь Си, в котором иногда (зачем-то?) упоминается стм32. Нафига за нее платить 15 баксов, мало в сети бесплатных учебников?

Если хочется реально разобраться в архитектуре СТМ - я вот такую книжку советую
Сarmine Noviello Mastering-stm32

Можно найти в инете бесплатно в ПДФ, если поискать.
А книжкам наших авторов я как-то не доверяю, на 90% это пиратские перевранные переводы иностранных книг. только еще с ошибками.
Лучше сразу оригинал читать.

Эдуард Анисимов

Если хочется реально разобраться в архитектуре СТМ - я вот такую книжку советую

bort707

m_sav

Эдуард Анисимов

@m_sav, Так давайте здесь это замутим.
Алекс добро дал. Подраздел для STM выделил.
Когда полезные материалы разрастутся, можно будет и дальше думать.

А сделать материал 100% как по ардуино невозможно.
У одних только таймеров столько режимов, что одна их инициализация занимает много страниц во множественных талмудах.

Эдуард Анисимов

Если хочется реально разобраться в архитектуре СТМ - я вот такую книжку советую
Сarmine Noviello Mastering-stm32

kostyamat

Эдуард Анисимов

kostyamat

@Эдуард Анисимов,
Да, действительно, сейчас работает. Ночью все, кроме главной, было 440.

Пс. Ваша подборка на я.диске кстати тоже куда-то делась.

Эдуард Анисимов

@kostyamat, Я свою подборку перезалил в распакованном виде. Теперь не нужно скачивать целиком архив. Можно выбрать что качать.

disk.yandex.ru

STM32

Эдуард Анисимов

В каталоге "Статьи" добавлен каталог :
Сенсорные кнопки.
Регистры периферии.

В разделе "книги" закачана книга "Кармин Новиелло - Освоение STM32" на русском.

Залит каталог "Схемы и прошивки для разных MCU.

Diman

Эдуард Анисимов

Подкинул файлов на диск.
Вот список.
Статьи\SPI\ STM32 SPI LCD - Вы всё делаете не так.pdf

Статьи\_Прерывания\ Изменение вектора прерывания.pdf
Статьи\_Прерывания\ Прерывания, события и NVIC.pdf
Статьи\_Прерывания\ Прерывания в STM32. Регистры..pdf
Статьи\_Прерывания\ Контроллер прерываний NVIC.pdf

Статьи\Автор - Microsin\ STM32F4xx интерфейс SPI.pdf

Статьи\_Память\ Проектирование стека и кучи в IAR.pdf
Статьи\_Память\ Азы распределения памяти и кода.pdf

Статьи\_Энергопотребление\ Оптимизация энергопотребления.pdf

Статьи\_Программирование\ Передача массивов.odt

Статьи\_Регистры периферии\ Регистры часов реального времени в микроконтроллерах STM32.pdf

Техническая документация STM\Общее\ AN2606 - STM32 microcontroller system memory boot mode.pdf
Техническая документация STM\Общее\ AN3070 - Managing the Driver Enable signal for RS-485.pdf
Техническая документация STM\Общее\ AN3155 - USART protocol used in the STM32 bootloader.pdf
Техническая документация STM\Общее\ AN3997 - Audio playback and recording using the STM32F4DISCOVERY.pdf
Техническая документация STM\Общее\ AN4076 - Two or three shunt resistor based current sensing circuit design in 3-phase inverters.pdf
Техническая документация STM\Общее\ AN4229 - How to implement a vocoder solution.pdf
Техническая документация STM\Общее\ AN4488 - Getting started with STM32F4xxxx MCU hardware development.pdf
Техническая документация STM\Общее\ AN4838 - Managing memory protection unit in STM32 MCUs.pdf
Техническая документация STM\Общее\ AN4989 - STM32 microcontroller debug toolbox.pdf
Техническая документация STM\Общее\ AN5020 - Digital camera interface (DCMI).pdf
Техническая документация STM\Общее\ AN5027 - Interfacing PDM digital microphones.pdf
Техническая документация STM\Общее\ AN5225 - USB Type-C Power Delivery.pdf

Техническая документация STM\Даташиты на Русском\ STM32F4xx - Datasheet.pdf

Техническая документация STM\Cortex-M3 STM32F10xx\ RM0008 - STM32F10xx RU.pdf
Техническая документация STM\Cortex-M4 STM32F3xx_F4xx\ RM0090 - STM32F4xx - RU.pdf

Книги\ Принципы программирования микроконтроллера STM32F407VGT6 d среде Keil.pdf
Книги\ STM32 - Внутреннее устройство.pdf

Из вкусного: Референс мануалы на серию 32F1xx и 32F4xx на русском языке.
Вся документация, кроме файлов с названиями на английском языке, переводы. Где то авторские, где то в свободной форме.

В этом руководстве (перевод [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

STM32F103C8T6 Blue Pill top

STM32F103C8T6 Blue Pill bottom

Отладчик 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 вставьте ссылку

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. Выбор может быть сделан на основе используемого на плате микроконтроллера.

Плата: (Board) -> STM32 Boards (selected from submenu) -> Generic STM32F1 Series. После этого меню Инструменты изменится, в нем появятся новые пункты. Выберите пункт Board part number: "Blue Pill F103C6 (32K)". Выбор может быть сделан на основе используемого на плате микроконтроллера. Поэтому, если на плате стоит STM32F103C8T6, то выберите Black Pill F103C8 или Generic F103C8. -->Пример возможного выбора:

Плата: "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"):

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

STM32F1 Blue Pill BOOT0 BOOT1

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

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

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

STM32F103 Blue Pill Pinout Diagram

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

Читайте также: