Arduino stm32f103c8t6 установка загрузчика

Прошивка платы STM32F103C8T6 с помощью usb/ttl и st-link v2. Подготовка программы arduino IDE для работы с платой.

Данную плату можно приобрести тут:

Итак. Не будем здесь описывать для чего нужна данная плата. Думаю те кто ей заинтересовался знают о ее возможностях.

Но распиновку устройства все-же покажу для наглядности:

Я лишь покажу здесь как подключить usb/ttl или st-link для прошивки устройства. И как подготовить программу arduino ide для прошивки stm32.

Чтоб начать работу данной платы с arduino ide. Нам необходимо подключить usb/ttl конвертер к плате следующим образом:

ВАЖНО! Микроконтроллер stm32 имеет 3.3 вольтовую логику. Следовательно и usb/ttl должен быть таковым. Я же прошивал на видео обычным, который имеет 5 вольтовую логику. Но это не правильно. Всегда есть риск спалить устройство.

Также нужно поставить джампер как показано на картинке.

Итак, после того как подключили конвертер к плате и поставили перемычку правильно. Нам нужно скачать несколько приложений:

  1. Программа STM32 Flash loader demonstrator. Она нужна для первой прошивки микроконтроллера, чтоб он смог в дальнейшем прошиваться через arduino ide. Скачать программу можно с официального сайта перейдя по ссылке: https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/flasher-stm32.html#
  2. STM32duino-bootloader. Тут находится прошивка необходимая для первой прошивки устройства. Качаем сразу целиком архив со страницы проекта на github: https://github.com/rogerclarkmelbourne/STM32duino-bootloader
  3. Arduino_STM32. Это платы stm32 которые необходимо добавить в arduino ide для того чтоб выбрать нужную плату во время заливки скетча. Скачиваем архив со страницы github: https://github.com/rogerclarkmelbourne/Arduino_STM32. Кладем содержимое архива по пути: Документы/arduino/hardware/

После того как все скачали, разархивируем архивы. Устанавливаем программу STM32 Flash loader demonstrator. Она не устанавливается на рабочий стол. Ее можно найти по слову deminstrator gui. После того как установили приложение. Откроем его.

И откроется первое окно, в котором выбираем COM порт которым определился usb/ttl конвертер. И нажимаем кнопку далее.

В этом окне если у Вас в первом блоке есть красные надписи, то нажимаем кнопку “Remove protection” и нажимаем Next. Ну и если у Вас все также как у меня на скрине, то ничего не делаем а сразу нажимаем “Next”.

Тут выбираем какая у нас плата. Возможно выбрать из двух вариантов. на 64К и на 128К. В моем случае это на 64К. Как определить? Если у Вас микроконтроллер STM32F103C8 то это 64К. А если STM32F103CB то это 128К.

После того как выбрали контроллер, нажимаем “Next”

В этом окне выбираем “Download from file” и переходим в распакованный архив STM32duino-bootloader. Там в папку binaries и выбираем файл gd32f1_pc13.bin .

Ну и тоже нажимаем далее. После этого начнется загрузка .bin файла.

После загрузки закрываем программу.

И открываем Arduino ide.

Если Вы ахив Arduino_stm32 положили корректно по пути Документы/arduino/hardware/ То при открытии программы Arduino ide в Инструменты в выборе платы должна появиться возможность выбора платы:

И для того чтоб плату заливался скетч необходимо выбрать “Generic STM32F103C series

Теперь что касается прошивки. У меня работает 2 метода. Первый это прошивка через usb/ttl. Для этого нужно выбрать в “Upload method” нужно выбрать ” serial:

И все у Вас замечательно загрузится в микроконтроллер.

Но платы STM32F103C8T6 часто предлагают на aliexpress сразу с программатором st-link v2. С ним скетч в плату загружается гораздо быстрее. У него сразу 3.3 вольтовая логика, какраз которую хочет наш контроллер. По этому правильнее будет грузить программы в контроллер через st-link. Для этого подключим его к плате следующим образом:

После подключения, в “Upload method” нужно выбрать “STLink” и все. Теперь будет загружаться все через данынй свисток.

На этом все. Спасибо за внимание. Надеюсь статья помогла Вам.

Источник

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Как запрограммировать STM32 с помощью Arduino IDE

С момента своего появления Arduino IDE демонстрирует желание поддерживать все виды платформ, от клонов Arduino и вариаций разных производителей до плат сторонних производителей, таких как ESP32 и ESP8266. По мере того, как все больше людей знакомятся с Arduino IDE, среда начинает поддерживать больше плат, которые не основаны на чипах ATMEL, и в сегодняшнем уроке мы рассмотрим одну из таких плат. Мы рассмотрим, как программировать плату на основе STM32, а именно STM32F103C8T6, с помощью Arduino IDE.

Плата STM32, которая будет использоваться в этом учебном материале, является не чем иным, как платой разработки на основе микросхемы STM32F103C8T6 на базе микроконтроллера STM32F1, обычно называемой «Blue Pill» в соответствии с синим цветом печатной платы. Blue Pill работает на мощном 32-битном процессоре ARM STM32F103C8T6 с тактовой частотой 72 МГц. Плата работает с логическими уровнями 3,3 В, но ее контакты GPIO были протестированы на устойчивость к 5 В. Хотя она не поставляется с WiFi или Bluetooth, как варианты ESP32 и Arduino, все же она предлагает 20 КБ ОЗУ и 64 КБ флэш-памяти, что делает данное решение достаточным для крупных проектов. Она также имеет 37 выводов GPIO, 10 из которых можно использовать для аналоговых датчиков, поскольку они имеют АЦП, а также другие для SPI, I2C, CAN, UART и DMA. Для платы, которая стоит около 3 долларов это впечатляющие характеристики.

Частота, с которой работает Blue pill, примерно в 4,5 раза выше, чем у Arduino UNO. В качестве примера того, как использовать плату STM32F1, мы подключим ее к TFT-дисплею 1,44 дюймов и запрограммируем ее рассчитать константу «Пи». Мы отметим, сколько времени понадобилось микроконтроллеру, чтобы получить значение, и сравнить его со временем, которое требуется Arduino Uno для выполнения той же задачи.

Схема подключения для этого примера следующая:

Как и в случае с большинством плат, выпущенных не Arduino, необходимо выполнить небольшую настройку, прежде чем плату можно будет использовать с Arduino IDE. Это включает в себя установку файла платы либо через менеджер плат Arduino, либо загрузку из Интернета и копирование файлов в папку оборудования. Маршрут к Board Manager является менее утомительным, и поскольку STM32F1 входит в число перечисленных плат, мы пойдем по этому пути. Начнем с добавления ссылки для платы STM32 в списки предпочтений Arduino. Перейдите в Файл — Настройки, (File — Preferences) затем введите этот URL (http://dan.drown.org/stm32duino/package_STM32duino_index.json) в поле, как указано ниже, и нажмите кнопку ОК.

Теперь зайдите в Инструменты — Плата — Менеджер плат (Tools — Board — Board manager), откроется диалоговое окно с панелью поиска. Найдите STM32F1 и установите соответствующий пакет.

Процедура установки займет несколько секунд. После этого плата должна быть доступна для выбора в списке плат Arduino IDE.

Код будет написан так же, как мы писали бы любой другой скетч для проекта Arduino, с той лишь разницей, что здесь немного иначе ссылаются на контакты. Чтобы иметь возможность легко разработать код для этого проекта, мы будем использовать две библиотеки, которые представляют собой модификации стандартных библиотек Arduino, чтобы сделать их совместимыми с STM32. Мы будем использовать модифицированную версию библиотек Adafruit GFX (https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/Adafruit_GFX_AS) и Adafruit ST7735 (https://github.com/KenjutsuGH/Adafruit-ST7735-Library).

Код для STM32, написанный в Arduino IDE, выглядит следующим образом:

Загрузка скетча в STM32f1 выполняется немного сложнее по сравнению со стандартными платами, совместимыми с Arduino. Чтобы загрузить код на плату, нам нужен конвертер данных USB в данные последовательного интерфейса на основе FTDI. Подключите конвертер USB к последовательному порту STM32, как показано на схеме далее.

Затем мы затем изменим положение перемычки состояния платы в положение 1 (как показано на рисунке ниже), чтобы перевести плату в режим программирования. Нажмите кнопку сброса на плате один раз после этого, и мы будем готовы загрузить код.

На компьютере убедитесь, что вы выбрали «Generic STM32F103C board» и выбрали последовательный порт для метода загрузки, после чего вы можете нажать кнопку загрузки. После завершения загрузки установите перемычку состояния в положение «0», это переведет плату в режим работы, и теперь она должна начать работать на основе загруженного кода. В этот момент вы можете отключить FTDI и подать питание на плату через USB. Если код не запускается после включения питания, убедитесь, что вы правильно восстановили перемычку и подали питание на плату.

Вы должны увидеть состояние дисплея, как показано на следующем изображении.

Нажмите кнопку, чтобы начать расчет. Вы должны видеть, как индикатор выполнения постепенно скользит до конца. В конце процесса значение числа Пи отображается вместе со временем, которое потребовалось для расчета.

Тот же код реализован на Arduino Uno. Результат показан на изображении ниже.

Сравнивая эти два значения, мы видим, что «Blue Pill» более чем в 7 раз быстрее, чем Arduino Uno. Это делает ее идеальным для проектов, которые включают в себя тяжелую вычислительную обработку и временные ограничения. Небольшой размер этой платы также служит здесь преимуществом, так как она только немного больше, чем Arduino Nano, и ее можно использовать там, где Nano не будет достаточно быстрым.

Источник

Дешевая STM32 плата + Arduino IDE UPD 17.08.2017

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

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

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

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

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

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

  • Рабочая частота 72 МГц, против 16 у ардуино;
  • Объем Flash памяти 64 Кбайта, против 32;
  • Оперативной памяти, она же RAM(где хранятся переменные), у STM32 целых 20 Кбайт, у ардуинки всего лишь 2;
  • Быстрый 12-ти битный АЦП, в то время как у Arduino плат, что на базе AVR микроконтроллеров(это как правило большинство) используется 10-ти битный. Это означает, что в случае STM32, функция analogRead(*); будет возвращать 0..4095 против 0..1023, что в первом случае ведёт к более точным измерениям;
  • 16-ти битный аппаратный ШИМ, против 8-ми у Arduino плат, то есть, функция analogWrite(*);pwmWrite(*); может принимать значение 0..65535, против убогих 0..255. Это позволит ещё точнее управлять нашими двигателями, сервами и прочими девайсами, которые рулятся при помощи ШИМ;
  • Аппаратная работа с USB, чем не может похвастаться не одна Arduino плата стоимостью менее 2 долларов;
  • Напряжение питания — от 2 до 3.6В(прямо таки заточено под 2 AA батарейки), против 2.7. 5В у ардуино плат;
  • Цены на момент написания статьи — 1.9 доллара против 1.8(алиэкспресс).

Очевидно, что отладочная плата на базе STM32 выигрывает по всём параметрам у Arduino Nano, исключением является разве что стоимость, но согласитесь 10 центов — хорошая цена за большую производительность, а про периферию, которой нафарширован STM32, так я вообще молчу, чего только стоят DMA или интегрированные в микроконтроллер часы реального времени.

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

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

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

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


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

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

G GND;
5V 5V;
PA10 TXD;
PA9 RXD.


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

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

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

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

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

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

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

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

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

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

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

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

Дальше разархивируем содержимое по адресу Мои Документы\Arduino\hardware:

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

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

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

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

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

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

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

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

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

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


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

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

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

Но прошивка то загрузилась успешно, хотя не всегда так, иногда Arduino IDE выдаёт другие сообщения.

Когда видите, сообщение типа:

«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»

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

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

«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);

Ещё рекомендую зайти на сайт docs.leaflabs.com/docs.leaflabs.com/index.html там есть много чего интересного по теме программирования в Arduino IDE, правда на английском языке.

Я порылся в файлах ядра, и нашёл один интересный файл:
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-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.

Источник

Adblock
detector