Отладочная плата для stm32 своими руками

Добавил пользователь Валентин П.
Обновлено: 19.09.2024

Уже много лет радиолюбители применяют восьмиразрядные микроконтроллеры семейств PIC и AVR. Они популярны благодаря низкой цене, наличию подробной документации, простоте программирования и лёгкости монтажа. Однако довольно часто бывают случаи, что мощности такого микроконтроллера для решения поставленной задачи недостаточно. Самый простой пример - частотомер или генератор сигналов на микроконтроллере, где максимальная измеряемая или генерируемая частота напрямую зависит от скорости обработки или вывода информации.

Помимо скорости, восьмиразрядные микроконтроллеры имеют и другие ограничения, например, во многих моделях AVR всего один аппаратный последовательный порт, что не позволяет получать информацию от внешнего устройства и одновременно пересылать результаты её обработки потребителю. Не говоря уже о таких "банальных" вещах, как вывод информации на графический индикатор, требующий больших ресурсов как скорости, так и памяти. После анализа ряда таких ограничений у автора возникла мысль о переходе на микроконтроллеры семейства STM32.

Для примера рассмотрим два микроконтроллера одной ценовой категории - STM32F103C6 и ATmega328P.

Тактовая частота, МГц

Объём FLASH-памяти. Кбайт

Объём ОЗУ, Кбайт

Число 16-разрядных таймеров

Число линий ввода-вывода

Ориентировочная цена, руб.

Их сравнительные параметры приведены в табл. 1. Результаты сравнения даже несколько удивляют. 32-разрядный микроконтроллер не только мощнее восьмиразрядного практически по всем параметрам, но при этом дешевле. Разумеется, паять микроконтроллер с шагом выводов 0,5 мм в домашних условиях не так-то просто. К счастью, в большинстве случаев этого и не требуется - на рынке имеется множество разновидностей отладочных плат с микроконтроллерами семейства STM32, достаточных для различных применений. Рассмотрим их более подробно.

Эта плата (она изображена на рис. 1), пожалуй, наиболее удобна для начинающих изучение микроконтроллеров STM. Во-первых, она имеет большой набор периферийных устройств. Помимо микроконтроллера, на плате установлены микроэлектромеханический акселерометр, микрофон, аудиоЦАП, два разъёма USB, кнопка и четыре светодиода.

Выводы микроконтроллера выведены на контактные площадки для монтажа штыревых разъёмов у левого и правого краёв платы, что позволяет легко подключать к ним все необходимые внешние устройства. Установленный на плате микроконтроллер STM32F407VGT6 имеет весьма неплохие параметры: 1 Мбайт FLASH-памяти, 192 Кбайт ОЗУ и тактовую частоту 168 МГц.

И наконец, плата оборудована встроенным отладчиком ST-LINK/V2, который можно использовать для отладки программ не только на имеющемся на плате микроконтроллере, но и на микроконтроллерах того же семейства, находящихся на других платах. Переключение на них выполняется с помощью съёмной перемычки и разъёма SWD.

Цена платы - около 800 руб., что можно считать вполне приемлемым.


STM32F103RBT6 Development Board

Следующим интересным вариантом является отладочная плата с микроконтроллером STM32F103RBT6 (рис. 2).

Он несколько слабее, чем установленный на предыдущей плате - тактовая частота 72 МГц, 128 Кбайт FLASH-памя-ти и 20 Кбайт ОЗУ, однако периферийные устройства весьма интересны. Имеются сенсорный TFT-экран с разрешением 320x240 пкс и диагональю 2.8', встроенный USB-порт для обмена информацией с компьютером, разъём для карты памяти SD, часовой кварц на 32768 Гц, отсек для элемента питания часов реального времени и разъём ST-LINK для отладки программ.

Цена этой платы также около 800 руб., но следует заметить, что встроенного отладчика на ней нет. Для загрузки программ необходимо либо приобрести отдельный отладчик ST-LINK, либо использовать вместо него рассмотренную выше плату STM32F4-DISCOVERY

Бросается в глаза внешнее сходство этой платы (рис. 3) с широко известными модулями Arduino. И это не случайно.

Отладочная плата имеет микроконтроллер STM32F103CBT6, работающий на тактовой частоте 72 МГц, имеющий 128 Кбайт FLASH-памяти и 20 Кбайт ОЗУ, что, несомненно, больше, чем в любом модуле Arduino. И тем больший плюс, что среда разработки практически не изменилась.

Отдельно заметим, что несмотря на миниатюрные размеры, Maple Mini предоставляет весьма разнообразную периферию: 34 линии ввода/вывода, два интерфейсных канала SPI и два I2C, три последовательных порта. Это позволяет с успехом применять её в различных любительских разработках. Благодаря малым размерам Maple Mini может быть встроена непосредственно в разрабатываемое устройство.

Оригинальную плату Maple Mini можно приобрести за 35 долл. США на сайте её разработчиков. Ещё 5 долл. США будет стоить доставка. Копия платы, изготовленная в Китае, обойдётся вдвое дешевле.

Существуют несколько вариантов сред разработки, которые можно использовать для подготовки программ для микроконтроллеров семейства STM32:

- коммерческие IAR Embedded Workbench, AtollicTrueSTUDIO, Keil и др. Эти полнофункциональные продукты довольно дороги, с ценой лицензии от 1000 евро, но имеются и демонстрационные бесплатные версии с ограничением на объём разрабатываемой программы, для большинства несложных проектов их вполне хватает;

- бесплатная Eclipse с компилятором ARM-GCC требует нетривиальной настройки компилятора перед использованием. Единственный плюс на сегодняшний день - возможность работы не только в Windows, но и в Linux;

- бесплатная CooCox IDE (CoIDE) на базе того же редактора Eclipse. Выполняет загрузку и отладку программ через ST-LINK. В отличие от предыдущего варианта, CoIDE не требует каких-либо специальных настроек и работает сразу же после установки. Этот вариант наиболее удобен, им и стоит воспользоваться.

Воспользуемся CooCox IDE для создания примера программы для платы STM32F4-DISCOVERY реализующей классическое для первой программы для любого микроконтроллера мигание светодиодов. На плате STM32F4-DIS-COVERY имеются четыре светодиода, подключены они к выводам PD12- PD15 микроконтроллера. Сделаем так, чтобы они мигали поочерёдно.

Шаг 1. Запускаем среду разработки CoIDE, создаём проект. Из выпадающего списка, показанного на рис. 4, выбираем микроконтроллер STM32F407VG.

Шаг 2. Как показано на рис. 5, выбираем компоненты, которые будут использованы в проекте. Основные из них - это GPIO (ввод-вывод), С Library (базовые функции языка С) и M4 Core (функции ядра процессора). При активизации того или иного компонента CoIDE автоматически копирует нужные файлы в папку проекта, что очень удобно.

Шаг 3. Ввод текста программы. Он довольно короткий и приведён в табл. 2.

Как можно видеть, всё просто и очевидно. Те, кто писал программы для микроконтроллеров AVR, наверняка увидят знакомые конструкции - инициализацию портов с указанием направления (ввод или вывод), главный цикл, в котором выполняются нужные действия. В целом же синтаксис программы полностью соответствует языку С, литературы по которому более чем достаточно. Статей по программированию для STM32 в Интернете также немало. Много примеров поставляется вместе с отладочной платой, их тоже можно использовать как образцы.

После ввода текста программы нажатием на экранную кнопку "Download to flash" она загружается в микроконтроллер. Светодиоды на плате начинают мигать. Отдельно стоит отметить возможности отладки - в любом месте программы может быть поставлена точка останова, можно запускать программу по шагам, просматривая значения переменных.

Разумеется, этот пример не идеален. Например, для управления миганием светодиодов можно воспользоваться прерываниями от таймера, что освободит главный цикл программы для других задач. Желающие могут разобраться с этим самостоятельно.

В целом, после первого знакомства микроконтроллеры семейства STM32 оставили весьма приятное впечатление. Всё оказалось не так сложно, а удобство среды разработки, процесса отладки и большое число стандартных функций чем-то даже напомнили переход от Ms DOS к Windows - общие моменты вроде те же, но все гораздо удобнее и функциональнее.

Но главным недостатком этого семейства для любительских разработок всё-таки остаётся слишком мелкий шаг выводов. Спроектировать и спаять плату с шагом выводов 0,5 мм в домашних условиях - задача весьма нетривиальная. Но при существующих ценах каждому радиолюбителю вполне доступны отладочные платы с уже смонтированными микроконтроллерами.

Стоит ли переделывать всё на STM и 32-разрядную архитектуру? Конечно же, нет. Есть задачи, для решения которых и ATtiny вполне достаточно. Но, например, для анализа спектра в самодельном SDR-приёмнике или приёма- передачи больших объёмов информации по сети гораздо эффективнее сразу применить мощный микроконтроллер, чтобы не упереться в недостаток памяти или производительности при совершенствовании устройства.

Автор: Д. Елюсеев, г. Санкт-Петербург

Мнения читателей

Нет комментариев. Ваш комментарий будет первый.

Вы можете оставить свой комментарий, мнение или вопрос по приведенному выше материалу:

Уроки STM32

В уроке получим минимальную информацию об отладочной плате STM32F103C8T6. Добавим к плате компоненты необходимые для загрузки программ в микроконтроллер (прошивка FLASH).

В наших уроках будем использовать отладочную плату на базе микроконтроллера STM32F103C8T6.

Часто ее называют ”Blue pill”, в переводе – синяя таблетка или пилюля.

STM32F103C8T6

STM32F103C8T6

STM32F103C8T6

По моей партнерской ссылке плата стоит всего 175 руб.

Технические характеристики платы STM32F103C8T6.

В последующих уроках мы будем подробно изучать функциональные возможности микроконтроллера и платы. Сейчас коротко, только общие характеристики.

Микроконтроллер STM32F103C8T6,
ядро ARM Cotrex M3
Число разрядов 32 бита
Максимальная частота 72 мГц
Объем памяти программ (FLASH) 64 / 128 кБайт
Объем памяти данных (RAM) 20 кБайт
Выводы 37
Таймеры общего назначения 3
Расширенный таймер с ШИМ управления двигателем 1
Системный таймер 1
Сторожевые таймеры 2
UART 3
SPI 2
I2C 2
CAN 1
USB 1
Контроллеры прямого доступа к памяти 7
АЦП 2 АЦП, 10 каналов, время преобразования 1 мкс
Часы реального времени есть
Аппаратный модуль расчета CRC есть
Напряжение питания микроконтроллера 2 … 3,6 В
Напряжение питания платы 5 В
Ток потребления до 50 мА
Размеры платы 53 x 22,5 мм

Выводы микроконтроллера непосредственно соединены с выводами платы.

Распиновка STM32F103C8T6

Сейчас обращаем внимание на следующее:

  • Микроконтроллер питается от напряжения 3 В и высокие уровни выходных и входных дискретных сигналов у него тоже 3 В. Но часть выводов, обозначенных на схеме закрашенной точкой, допускают при использовании в качестве входов подключение сигналов с уровнями 5 В. Так называемые толерантные к 5 В входы. Остальные входы рассчитаны на напряжение не более напряжения питания, обычно 3 В. Повышение этого напряжения свыше 4 В приведет к повреждению микроконтроллера.
  • При использовании в качестве выходов, выводы микроконтроллера допускают вытекающий и втекающий ток не более 20 мА. Рекомендуется не более 8 мА. Но 3 вывода, отмеченные восклицательным знаком, могут быть использованы только в схемах с втекающим током и не более 3 мА.
  • К выводу PC13 подключен светодиод общего назначения. Светится он при низком уровне сигнала.

Система питания платы.

Схема цепей питания выглядит так.

Схема питания STM32F103C8T6

Узел вырабатывает напряжение 3,3 В, необходимое для питания микроконтроллера. Используется стабилизатор XC6204.

Он получает питание 5 В либо с USB порта, либо с вывода платы 5 V. Эти цепи соединены непосредственно без защитного диода. Поэтому использовать плату с одновременным питанием от этих двух источников нельзя.

Ток потребления микроконтроллера зависит от частоты тактирования и использования периферийных устройств.

Частота, мГц Ток потребления, мА
Все периферийные устройства включены 72 50
48 36
36 29
24 20
16 15
8 9
Все периферийные устройства выключены 72 33
48 25
36 20
24 14
16 11
8 7

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

Вот полная принципиальная схема платы.

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

Загрузка программы в микроконтроллер с помощью системного бутлоадера.

Четырех контактный разъем на торце платы предназначен для загрузки программ с помощью аппаратного программатора, например StLink. Но в микроконтроллере существует программный загрузчик, позволяющий зашить программу через UART 1 (выводы A9 и A10). Он называется системным загрузчиком и зашивается в память микроконтроллера на этапе производства.

За режим работы платы отвечают 2 желтые перемычки.

Это обычный режим работы. При включении или сбросе запускается программа из FLASH.

Перемычки STM32F103C8T6

При таком положении перемычек запускается системный загрузчик. Это режим прошивки FLASH-памяти микроконтроллера.

Перемычки STM32F103C8T6

При таком положении перемычек программа загружается в ОЗУ. Используется на этапе отладки для сохранения ресурса программирования FLASH-памяти.

Соответствие состояния входов BOOT и режимов работы микроконтроллера STM32. Перемычка BOOT0 на рисунках расположена сверху.

BOOT1 BOOT0 Режим запуска программы
0 0 Внутренняя FLASH
1 0
0 1 Системная память
1 1 Внутреннее ОЗУ

Таким образом, процесс программирования через системный бутлоадер выглядит так:

  • подключить выводы A9 и A10 к COM порту компьютера;
  • установить перемычку BOOT0 в режим запуска из системной памяти;
  • сбросить микроконтроллер;
  • запустить на компьютере программу прошивки FLASH микроконтроллера;
  • вернуть перемычки в состояние запуска программы из FLASH;
  • сбросить микроконтроллер.

Во первых в современных компьютерах не часто встречается COM порт. Во вторых слишком много манипуляций с перемычками и сбросом. Утомительное занятие.

Я упростил этот процесс так.

Плату подключил к компьютеру через мост USB-UART. Я использовал PL2303, но можно применить любой другой модуль, даже плату Ардуино со встроенным преобразователем интерфейсов. Например, Arduino Nano. Надо только соединить вход сброса с землей для того, чтобы микроконтроллер не влиял на сигналы преобразователя интерфейса CH340.

Вместо перемычки BOOT0 я установил кнопку. Еще одну кнопку припаял на сигнал сброса. Штатной кнопкой сброса пользоваться неудобно.

Вот моя схема отладочного модуля.

Схема прошивки STM32F103C8T6

Резистор 10 кОм припаян между выводами трех контактного разъема PLS, установленного вместо перемычки BOOT0.

Питание плата STM32 получает от моста USB-UART. На нем надо установить перемычку питания в положение 5 В.

У меня все это выглядит так.

Прошивка STM32F103C8T6

Прошивка STM32F103C8T6

Прошивка STM32F103C8T6

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

  • Нажимаю и удерживаю кнопку ПРОШИВКА, кратковременно нажимаю кнопку СБРОС.
  • Загружаю программу во FLASH микроконтроллера.
  • Отпускаю кнопку ПРОШИВКА.
  • Нажимаю кнопку СБРОС.

Все это делается пальцами одной руки.

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


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

Контроллеры STM32 можно прошить двумя путями.
1) Через встроеный бутлоадер (бутлоадер, это такая маленькая программка внутри каждого микропроцессора STM32, которая прикидывается программатором — это если по простому). Прошивка в таком варианте происходит через UART (для связи с компьютером используется переходник USB>COM)

2)Внешним программатором. Из внешних программаторов на данный момент есть большой выбор. Это может быть и ваша отладочная плата STM32 Discovery, и китайский аналог ST-LINK V2 mini, и оригинальный ST-Link.

Первым вариантом я не пользовался, но сложного в нём вроде ничего нет. Нужно скачать утилиту STM32 ST-LINK Utility и на вашем прошиваемом микроконтроллере выставить определённый сигнал на ножке\ножках BOOT0\BOOt1. Допустим возьмём для примера самый дешёвый и простой микроконтроллер STM32F030F4P6 в корпусе TSSOP20. У него есть ножка BOOT0, которую если мы замыкаем на массу — то у нас контроллер будет прошиваться через SWD (то есть от внешнего программатора), а если на эту ножку подать напряжения питания, то контроллер будет стартовать с встроенного бутлоадера, и ждать пока мы его прошьём через UART, то есть с помощью программы ST-LINK Utility.

Вторым вариантом намного проще работать, так как помимо того что вы можете прошивать свои микроконтроллеры так ещё и в режиме реального времени отлаживать свои программы (дебажить))
Для прошивки в таких случаях используется всего 4 ножки (по минимуму)
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO

Такой вариант подключения для прошивки используется в том случае, если вы не сконфигурировали ножки SWCLK и SWDIO в качестве портов ввода-вывода. Если же вы эти ножки используете в качестве портов ввода-вывода, то прийдётся ещё подключать "физичесу" линию сброса. — RST . В таком варианте у нас получается 5 проводов для подключения
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO
5)NRST

Вот так выглядит распиновка на плате STM32F4Discovery разъёма для программирования внешних микроконтроллеров. Пин VDD_Target является пином, для снятия показаний напряжения с прошиваемого устройства. Этот если по простому — для согласования уровня напряжений между программатором и прошиваемым устройством.


Вот так выглядит разъём программатора ST-LINK V2 mini. В нём есть дополнительные средства для работы с STM8 и т.д, поэтому для работы с STM32 нам нужны пины
1)Vcc — питание 3 Вольт
2)SWDIO
3)VSS(Gnd) — масса
4)SWCLK
10)NRST


Вот так выглядит схема подключения для прошивки нашего простейшего микроконтроллера STM32F030F4P6


Как видите, никаких заморочек нет. На этом думаю всё, если будут вопросы, то пишите в коментах, я добавлю эти нюансы в статью.


Компания STMicroelectronics прекратила поддержку библиотеки SPL, которая использовалась в этом курсе. Поэтому я создал новую рубрику, посвященную работе уже с новыми инструментами, так что буду рад видеть вас там - STM32CubeMx. Также вот глобальная рубрика по STM32 - ссылка.

Одна из предыдущих статей (вот она) была посвящена тому, как прошивать контроллер на отладочной плате STM32VLDiscovery, но этого же нам мало ) Давайте попробуем прошить сторонний микроконтроллер, используя STM32VLDiscovery в качестве ST-Link программатора. То есть из Discovery мы сделаем программатор микроконтроллеров для других плат. У меня вот, например, лежит отличная отладочная плата Mini STM32 с контроллером STM32F103VET6, его то как раз я и буду прошивать. И сразу переходим от слов к делу.

Для начала подготовим Discovery для прошивки внешнего контроллера. Для этого надо убрать два джампера:

Теперь находим SWD разъем на плате, вот он:

Если расположить плату как на рисунке, то верхний пин является первым, то есть в соответствии с таблицей – VDD_TARGET:

Его мы кстати использовать сегодня не будем. Подключать внешний контроллер мы будем тремя проводами – это общий провод (земля), тактовый сигнал SWD (SWD Clock) и SWD Data. Осталось понять, где какие пины у микроконтроллера, который мы собираемся прошить. Для этого берем даташит и лезем в распиновку. Там нас интересуют пины SWDIO и SWCLK. Для моего контроллера STM32F103VET6:

Вот оно то, что надо – пины PA13, PA14. Осталось только соединить! Подключаем три проводка к разъему SWD на Discovery - второй пин разъема заводим на PA14, четвертый на PA13, ну и перекидываем землю на внешний микроконтроллер, который мы собираемся прошивать. Запитываем наш программируемый контроллер как обычно, STM32VLDiscovery пусть использует питание от USB. Вот, собственно, и все. Прошиваем точно так же, как мы прошивали контроллер на плате Discovery, об этой статье я уже говорил чуть выше, в самом начале )

Вот, в принципе, и все, что мы хотели сделать, получилось как задумывалось. Это оказалось довольно-таки просто, но, согласитесь, штука полезная. У многих есть STM32VLDiscovery, так почему же не использовать ее в качестве программатора микроконтроллеров STM32 на других платах. На сегодня это все, до скорых встреч, оставайтесь на связи!

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