Stm32F103Cbt6 программирование. Программирование STM32: обзор способов и инструментов для прошивки микроконтроллеров

Как прошить микроконтроллер STM32. Какие есть способы программирования. Какие инструменты нужны для прошивки STM32. Чем отличается прошивка через bootloader и внешний программатор. Какие контакты используются для подключения программатора к STM32.

Содержание

Способы программирования микроконтроллеров STM32

Для прошивки микроконтроллеров семейства STM32 существует два основных способа:

  1. Через встроенный загрузчик (bootloader)
  2. С помощью внешнего программатора

Рассмотрим подробнее каждый из этих методов.

Программирование через встроенный загрузчик

Встроенный загрузчик (bootloader) — это небольшая программа, которая находится в памяти каждого микроконтроллера STM32. Она позволяет загружать пользовательскую программу без использования внешнего программатора.

Для активации режима загрузчика необходимо:

  • Подать определенный сигнал на вывод BOOT0 микроконтроллера
  • Подключить микроконтроллер к компьютеру через UART-интерфейс
  • Использовать специальную утилиту для прошивки, например STM32 ST-LINK Utility

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


Программирование с помощью внешнего программатора

Этот способ предполагает использование отдельного устройства-программатора для загрузки прошивки в микроконтроллер. Существует несколько вариантов программаторов:

  • Отладочная плата STM32 Discovery
  • Китайский аналог ST-LINK V2 mini
  • Оригинальный программатор ST-Link от STMicroelectronics

Для подключения программатора к микроконтроллеру используются следующие контакты:

  1. VCC — питание 3В
  2. GND — земля
  3. SWCLK — тактирование
  4. SWDIO — данные
  5. NRST — сброс (опционально)

Преимущества использования внешнего программатора:

  • Возможность отладки программы в реальном времени
  • Не требуется настройка загрузчика на микроконтроллере
  • Более универсальный метод программирования

Какой способ программирования STM32 выбрать?

Выбор метода программирования зависит от конкретной задачи:

  • Для простой прошивки готовой программы подойдет встроенный загрузчик
  • Для разработки и отладки оптимально использовать внешний программатор
  • При серийном производстве удобнее прошивать через загрузчик

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


Распространенные программаторы для STM32

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

ST-LINK/V2

Оригинальный программатор от STMicroelectronics. Поддерживает все микроконтроллеры STM32 и STM8. Имеет следующие особенности:

  • Высокая скорость программирования и отладки
  • Поддержка SWD и JTAG интерфейсов
  • Возможность питания целевой платы
  • Защита от перегрузки по току

ST-LINK/V2 mini

Бюджетный аналог оригинального программатора. Основные характеристики:

  • Поддержка SWD интерфейса
  • Компактные размеры
  • Низкая стоимость
  • Отсутствие защиты от перегрузки

Отладочная плата STM32 Discovery

Многие отладочные платы STM32 Discovery имеют встроенный ST-LINK/V2 программатор, который можно использовать для прошивки внешних микроконтроллеров. Преимущества:

  • Не требуется покупка отдельного программатора
  • Возможность использования платы для отладки собственных проектов

Подключение программатора к микроконтроллеру STM32

Для подключения программатора к микроконтроллеру STM32 необходимо соединить следующие контакты:


Контакт программатораКонтакт STM32Назначение
VCCVDDПитание 3.3В
GNDVSSЗемля
SWCLKPA14Тактирование SWD
SWDIOPA13Данные SWD
NRSTNRSTСброс (опционально)

При подключении важно соблюдать следующие правила:

  • Убедиться в соответствии уровней напряжения программатора и микроконтроллера
  • Использовать короткие провода для минимизации помех
  • Подключать общий провод (GND) в первую очередь

Программное обеспечение для прошивки STM32

Для загрузки программы в микроконтроллер STM32 можно использовать различное программное обеспечение:

STM32 ST-LINK Utility

Официальная утилита от STMicroelectronics для программирования и отладки микроконтроллеров STM32. Основные возможности:

  • Поддержка всех микроконтроллеров STM32
  • Простой и понятный интерфейс
  • Возможность чтения и записи памяти
  • Поддержка отладки через SWD и JTAG

OpenOCD

Открытое программное обеспечение для отладки и программирования микроконтроллеров. Преимущества:


  • Поддержка большого количества программаторов и микроконтроллеров
  • Возможность интеграции в среды разработки
  • Гибкая настройка под конкретные задачи

Среды разработки (IDE)

Многие современные среды разработки имеют встроенные средства для программирования и отладки микроконтроллеров STM32:

  • STM32CubeIDE — официальная IDE от STMicroelectronics
  • Keil µVision — популярная коммерческая IDE для микроконтроллеров
  • IAR Embedded Workbench — профессиональная среда разработки
  • Eclipse + GNU ARM Embedded Toolchain — бесплатное решение с открытым исходным кодом

Заключение

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

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



Использование платы STM32 Leaf Maple Mini в Windows Studio Code с PlatformIO

Рассмотрим, как подключить плату STM32 Leaf Maple Mini к Windows Studio Code с PlatformIO с использованием загрузчика bootloader 2.0 в режиме DFU, на Windows 10.



На плате Leaf Maple Mini зашит загрузчик позволяющий загружать нашу прошивку через USB порт, как это делается в Arduino IDE. Загрузка производится в режиме DFU mode, что требует установки драйверов VID_1EAF&PID_0003.

При подключении плата определяется системой как COM порт, но в режиме загрузки прошивки переключается в режим DFU mode.

Прежде чем пытаться что-то прошить в наш контроллер нам необходимо установить драйвер.


Установка драйверов на плату Leaf Maple Mini

Качаем набор компонентов для работы с платами STM32 для Arduino IDE

Подключаем нашу плату по USB

Переводим нашу плату в режим работы DFU mode:

Кратковременно нажимаем кнопку RESET и пока быстро мигает светодиод жмем кнопку

but=32 и удерживаем некоторое время.
Или зажимаем кнопку but=32 и кратковременно нажимаем RESET и держим некоторое время.

В диспетчере задач у нас должно появиться устройство Maple 003 которое требует установки драйверов.

Распаковываем скаченный ранее архив, идем в папку ~\Arduino_STM32-master\drivers\win\ запускаем от АДМИНИСТРАТОРА — install_drivers.bat, драйвер должен установиться. Жмем RESET на плате, теперь установиться драйвер COM порта.

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


Прошивка в плату Leaf Maple Mini загрузчика

Я буду зашивать с использованием ST-LINK V2, но мы так же может прошить, используя COM переходники.

Качаем и устанавливаем:

Драйвер ST-LINK_V2
STM32 ST-LINK Utility

Прошивки загрузчиков для плат STM32. Качаем — maple_mini_boot20. bin

Подключаем ST-LINK V2 к плате Leaf Maple Mini:

ST-LINK V2 Maple Mini
2 SWCLK (SWD clock) D21
4 SWDIO (SWD data input/output) D22
6 GND (Ground) GND
8 3.3V VCC

Запускаем STM32 ST-LINK Utility

Переводим нашу плату в режим DFU mode см.выше.

Жмем в программе Connect

Жмем на вкладку

Binary File и выбираем скачанный ранее файл maple_mini_boot20.bin

Жмем Program Verify

В открывшемся окне жмем Start

Начнется прошивка нашего загрузчика.

Теперь еще раз пробуем установить драйвера описанным выше способом.


Использование платы Leaf Maple Mini в Windows Studio Code

Запускам Windows Studio Code с установленной PlatformIO и добавляем платформы как на картинке

Создаем проект из примеров ST STM32 –> arduino-blink

Переходим в созданный проект

Правим platformio.ini

[env:maple_mini_b20]
platform = ststm32
framework = arduino
board = maple_mini_b20

Подключаем нашу плату по USB, она определиться системой как COM порт.

Жмем 3 см. картинку. Ждем окончания заливки прошивки в плату.

Если у вас выскакивает ошибка:

maple_loader v0.1
Resetting to bootloader via DTR pulse
Searching for DFU device [1EAF:0003]...
dfu-util - (C) 2007-2008 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY
Couldn't find the DFU device: [1EAF:0003]

Значит, вы не поставили драйвера на плату.


Дополнительно о плате Leaf Maple Mini:

Особенности микроконтроллера
  • STM32F103CBT6 in LQFP48 package
  • ARM®32-bit Cortex®-M3 CPU
  • 72 MHz max CPU frequency
  • VDD from 2.0 V to 3.6 V
  • 128 KB Flash
  • 20 KB SRAM
  • GPIO (34) with external interrupt capability
  • 12-bit ADC (2) with 10 channels
  • RTC
  • Timers (4)
  • I2C (2)
  • USART (3)
  • SPI (2)
  • USB 2.0 full-speed
  • CAN

Схема платы Leaf Maple Mini

Скачать схему платы Leaf Maple Mini


Еще информация по данной плате Leaf Maple Mini читать

Использование в Arduino IDE читать

Конечно, использовать DFU mode для заливки наших прошивок в плату по USB не есть хорошо, лучше прошивать, используя ST-LINK V2. Так же использование библиотек Arduino для работы с платой производительности нам не прибавит.

Разработку под STM32 лучше конечно производить в STM32CubeIDE — бесплатная среда разработки от STM, полностью поддерживает STM32CubeMX

Я использую Visual Studio 2019 Community с надстройкой VisualGDB – где Visual Studio 2019 Community – бесплатна, а вот VisualGDB стоит денег. Данная связка в последних версиях прекрасно работает с STM32CubeMX

IoT шлюз Ethernet-RS485 на базе STM32

Привет, Хабр!

Данный пост посвящён DIY разработке Ethernet-RS485 шлюза. Цель данного шлюза – обеспечение централизованного управления нодами Mysensors со стороны контроллера умного дома.

Недавно меня таки достали провода, дюпоны, навесная пайка и т.п. и было принято давно оттягиваемое решение — сделать свои платы с нуля, т.е. всё по серьёзному. 🙂
Сказано — сделано!

Первым делом была разработана и нарисована принципиальная схема шлюза, в которой я постарался учесть все свои хотелки и пожелания. Далее произведена компоновка и подгонка платы под требуемые размеры (50×50мм). И последний этап, это заказ плат на производстве. Я заказывал на фабрике JLCPCB, 5 плат — 2$ + доставка.

Данный шлюз построен на базе МК STM32F103CB(8)T6. В качестве Ethernet чипа выступает достаточно известная микросхема от WIZnet — W5500. Транспортом данного шлюза в сети Mysensors является проводной интерфейс RS485. В качестве драйвера RS485 был выбран чип — MAX13488EESA+T, в том числе и в связи с наличием у него режима автоматического выбора направления приёма/передачи.

Итак пройдёмся поподробнее по основным частям шлюза.

Сердцем шлюза является МК STM32F103CBT6 в корпусе 48LQFN. МК построен на ядре Cortex-M3, имеет 128Кб встроенной флэш памяти и 20Кб ОЗУ. Штатная частота МК — 72МГц, но если не использовать встроенный USB порт, то частоту можно разогнать и до 128МГц, он на ней вполне стабильно работает. МК питается от 3.3В. Для полноценной работы нужны два кварца, на 8МГц и 32. 768КГц. Для программирования и отладки имеется интерфейс SWD. МК можно заменить и на STM32F103C8T6, он на данный момент по памяти вполне проходит.

Ethernet чип W5500. Внутри имеет ядро Cortex M0, для связи с внешним миром присутствует порт SPI (скорость до 80 МГц). При скорости 100Mbps Full Link имеет потребление в 132мА. Есть поддержка Wake on LAN, для обозначения своего режима умеет управлять 4 светодиодами 4 (SPD / DUP / ACT / Link). В наличии 32 кбайт буферной памяти RAM для обеспечения процесса передачи TCP/IP пакетов, аппаратно обеспечивает до 8 независимых TCP/UDP сокетов (канальных соединений). Аппаратно поддерживает следующие коммутационные протоколы обработки проводного TCP/IP стека: TCP, UDP, MAC, ICMP, IPv4, ARP, IGMP, PPPoE. Диапазон рабочих температур -40…85°C. Напряжение питания — 3.3В.

И наконец драйвер RS485 — MAX13488EESA+T. Микросхема в корпусе SOIC-8 150mil. Скорость передачи данных до 16 Mb/s. Рабочее напряжение — 5В, потребляемый ток — 4.5 мA. Позволяет подключать до 128 узлов на одну линию RS485. Из главных особенностей это возможность включения режима автоматического определения направления приёма/передачи, т.е. данный драйвер может подключаться напрямую к порту UART и всё! Никаких лишних телодвижений совершать не надо.

Принципиальная схема шлюза разбита на три части:


Принципиальная схема

Схема RS485 части шлюза.


Схема МК и его периферии.


Схема части Ethernet.


Т.к. шлюз в сети Mysensors является единой точкой отказа, то к нему предъявляются повышенные требования по надёжности и безопасности. И в первую очередь он должен быть гальванически развязан от самой линии RS485. Для гальванической развязки линии данных была установлена микросхема — цифровой изолятор от TEXAS INSTRUMENTS — ISO7321CDR. Для развязки по питанию был использован изолированный DC/DC преобразователь от Traco Power – TME0505S. Защита драйвера RS485 от высоковольтных импульсов при необходимости реализовывается отдельной платой. Единственно, в виду своей компактности был оставлен защитный диод (подавитель ЭСР) VD1.

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


Рендеринг шлюза

Верхний слой.


Нижний слой.


3D — вид сверху.


3D — вид снизу.


Теперь поподробнее о схеме. Для функционирования шлюза, от МК нам необходим один порт USART и один порт SPI. МК STM32F103CBT6 имеет 3 порта USART с максимальной скоростью до 4.5Mbits/s. И два SPI порта. В результате компромисса (компоновка деталей на плате), для взаимодействия с драйвером RS485 был выбран порт USART1 (ноги PB6, PB7 с ремапом). А для взаимодействия с W5500 — порт SPI1 (ноги PA4-7).

Подключение Ethernet контроллера W5500 выполнено в соответствии с рекомендациями производителя. Единственное, что может вызвать некоторые сложности, это высокоточные резисторы, которых может не оказаться в наличии в местном радиоларьке. Но на сайте lcsc.com и ему подобных с данными резисторами всё в порядке. Для Ethernet разъёма был выбран широко распространённый бюджетный модуль — HR911105A, имеющий на борту трансформатор и два светодиода.

Самое сложное в данной плате, это запаять две 48-ножечные lqfp микросхемы. Если с этим справились, то дальнейшая сборка не представляет никаких сложностей. Настроек плата не требует и сразу после сборки готова к работе.

Хоть это и шлюз, но чтобы не пропадать добру на плате были разведены практически все пины МК, разведён ресет, и два светодиода (один из них RGB). Сделаны две площадки под микросхемы, одна под I2C EEPROM и вторая для цифрового термометра/измерителя влажности HDC1080. Термометр конечно будет измерять общую температуру по больнице, так как он установлен рядом с двумя чипами, но мало ли, вдруг кому понадобиться.

В качестве разъёма для RS485 был выбран, трёх пиновый зелёный разъём DB2EV-5.08-3P, с шагом 5.08мм. Он конечно великоват, но удобен в использовании. Остальные разъёмы за исключение microUSB выбраны — 1.25мм JST, они достаточно компактны и хорошо фиксируются.


Фото собранного шлюза


Для питания платы необходимы 5В, которые можно подать через разъём microUSB, либо через разъём Power. 5В питание необходимо драйверу RS485, микросхеме гальванической развязки и DC/DC преобразователю. Т.к. МК STM32 и Ethernet чип требуют питания 3.3В, на плате предусмотрен LDO регулятор — на базе микросхемы LDL1117S33R. На линиях питания 5 и 3.3В установлены танталовые и керамические конденсаторы. Большинство используемых смд компонентов — 0603.

Т.к. у всех всегда ситуации и подходы бывают разные, то некоторые вещи оставлены на откуп
пользователю. Если нам не нужна гальваническая развязка от линии RS485, то мы можем не устанавливать изолирующий DC/DC преобразователь — D1, микросхему опторазвязки — D3. В таком случае надо напаять «соплей» в предназначенные для этого места на плате.


Смотреть


По необходимости устанавливаем резисторы R31, R32 и R2, защитный диод VD3.

При первом включении на столе, шлюз нормально видел ноду, прошивки в неё залетали за 30 секунд, всё было хорошо. И да, планируемая мной скорость сети RS485 — 0.5-1Mbit. В доме будет 1Mbit, на улице 0.5Mbit. Так вот когда я поставил шлюз на его рабочее место в серверную, а ноду подключил к устройству на улице, я вполне ожидаемо столкнулся с тем, что они друг друга не увидели. С помощью осциллографа я мог наблюдать весьма удручающую картину линии RS485, но пара подтягивающих резисторов R31 и R32 быстро решила данную проблему. На фото шлюза, данные резисторы подпаяны проводками. Дело в том, что изначально я не планировал ставить их на шлюз, т.к. они нужны только на концах линии RS485, а шлюз у меня планировался в середине. Но когда подключена только одна нода, они всё же нужны и поэтому они были добавлены во второй ревизии. Терминирующий резистор на 120Ом устанавливается прямо в разъём RS485, так его проще переносить от устройства к устройству при наращивании линии.

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

Но — поживём увидим! 🙂

Таким образом была выполнена основная задача — создать компактный, высокоскоростной и надёжный Ethernet-RS485 шлюз. Чтобы не расплываться мыслями по древу, статья сосредоточена только на железной части, а программная часть сознательно вынесена за скобки.

Репозиторий с проектом шлюза

С радостью отвечу на конструктивные вопросы.

Для интересующихся постройкой УД на базе Mysensor существует русскоязычная группа в телеграмм — https://t.me/mysensors_rus и русскоязычный сайт — mysensors.ru.

P.S. Моя первая разработанная плата — универсальная нода Mysensors для сети RS485. Она про наполнению и разработке гораздо сложнее и интереснее данного шлюза. Если данная тема будет интересна, то моя следующая статья будет о ней.

P.P.S. Цель данной статьи показать, что нет ничего сложного в разработке и создании своих собственных плат и готовых устройств. Главное ставить цель и идти к ней!

P.P.P.S. Хочу заметить, что для меня это хобби и всего лишь вторая собственноручно разработанная плата, поэтому просьба сильно не пинать. 🙂

[Из песочницы] STM32L0538-DISCO: краткое описание + интересное применение

Уже довольно давно в продаже появилась новая плата из серии discovery от STMicroelectronics. Думаю, хабрасообществу будет интересно познакомиться с ней поближе. Под катом вас ожидает краткий обзор новой демоплаты и интересный пример её применения.Плата предназначена для демонстрации возможностей STM32L053C8, представителя серии ультранизкопотребляющих микроконтроллеров. Помимо него, на плате установлен ещё один чип от ST (STM32L152CCT6), который измеряет ток, потребляемый главным МК в различных режимах. Традиционно на плате реализован программатор/отладчик ST-Link (версии 2.1), позволяющий прошивать и отлаживать по интерфейсу SWD как целевой МК, так и внешние чипы. Ещё ST-Link 2.1 реализует преобразователь USB-COM, а также появляется в системе как съёмный диск, позволяя прошивать микроконтроллер простым копированием бинарного файла.

Бесполезное замечание Так как ST-Link тоже реализован на чипе от ST (STM32F103CBT6), получается, что купив одну отладочную плату, получаешь целых 3 разных МК на ней!

Основной особенностью платы является дисплей, выполненный по технологии электронных чернил. Дисплей не большой (2.04 дюйма, 172×72) и до собратьев, установленных в электронных книжках ему далеко, но он вполне подходит для отображения разнообразной информации.

Плата поставляется с демонстрационной прошивкой, которая работает в двух режимах (впрочем, толковый из них только первый): измерение и отображение на e-ink экране потребляемого STM32L053C8 тока или в режиме USB мыши. Выбор режимов осуществляется сенсорным слайдером.

Концепция применения платы Когда я получил плату и увидел на обесточенном экране логотип ST, то сразу захотел сделать автономное, практически не потребляющее энергии устройство, которое будет отображать какую-либо редко меняющуюся информацию. Про него можно вообще забыть, а оно всё равно будет что-то показывать спустя месяцы и даже годы. Например, сколько дней осталось до какого либо события. Так и родилась концепция устройства: электронно-бумажный счётчик дней обратного отсчета, который будет всё время напоминать о неумолимом приближении дедлайна, нового года, дня рождения (нужное подчеркнуть).Сказано — сделано! Через некоторое время отладочная плата превратилась в устройство. Для питания используется батарейка малой ёмкости. Можно использовать любую с напряжение 3 В, у меня это «таблетка» CR2032 в держателе. Микроконтроллер находится в спящем режиме с включенным модулем часов реального времени (RTC). При наступлении очередного дня, RTC будит контроллер, который обновляет счётчик обратного отсчета дней на экране. Так как экран потребляет энергию только в процессе перерисовки, все основное время батарейка питает часы в контроллере и лишь изредка энергия уходит на обновление счётчика. Для настройки используется USB (точнее UART через USB-COM преобразователь предоставляемый отладчиком на плате). Плата вместе с батарейкой отлично умещается в родную пластиковую упаковку. В процессе реализации добавилась ещё одна функция — нарастающий счётчик дней, который обнуляется нажатием кнопки User. Это может быть полезным для мотивации, например: «не курю 38 дней», «не пропускал тренировки 15 дней» и т.д. Ну или что-то вроде:»56 дней без ининцидентов».

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

Подробнее про аппаратные изменения (осторожно, много букв) Нужно запитать только STM32L053C8 и дисплей. Штатного способа этого сделать не предусмотрено. Есть контакт 5V_in, но от него будет питаться ещё и ST-Link вместе с токоизмерительным МК. Всё это питается через стабилизаторы, на которых тоже будут потери. Нам же нужно добавить батарейку, при этом максимально возможно сохранить функционал платы (можно конечно выпаять все лишнее, но это не наш путь).Перемычку SB13 нужно выпаять, чтобы отключить сигнал сброса T_NRST, который генерирует ST-Link. Без этого сигнала можно обойтись, STM32L053C8 будет прошиваться и без него (разве что придется нажимать на кнопку сброса, если он будет в спящем режиме).

Резистор R50 нужно убрать, так как через него токоизмерительный МК паразитно питается от шины VDD, на которую мы подадим напряжение батарейки.

Для работы RTC необходим источник тактовой частоты. Внешний «часовой» кварц на 32.768 кГц, на плате отсутствует (но под него предусмотрено место) и чтобы избежать лишних переделок, я сначала попробовал использовать встроенный в МК RC генератор. Точность такого решения оказалась абсолютно неприемлемой (часы убегали на полчаса в день), поэтому нужно впаять кварц X2, два конденсатора C47 и С50 (~10 пФ 0603) для него и подключить его к МК. Подключать кварц предполагается запаяв два резистора R70 и R71, я же обошёлся просто каплями припоя. Также желательно выпаять перемычки SB18 и SB19 (их можно впаять на место R70 и R71), чтобы сигнальные дорожки кварца не выходили на разъёмы платы.Ещё нужно перерезать одну дорожку (не люблю резать дорожки, но здесь это меньшее из зол). Дело в том, что STM32L053C8 через транзистор T6 управляет питанием дисплея и эту возможность необходимо сохранить, так как если запитать дисплей напрямую от батарейки и не выключать его на периоды бездействия, будет лишнее потребление. Транзистор T6 подаёт питание на дисплей с шины 3V3, которая подключена к токоизмерительному МК и его обвязке. Так как мы не хотим тратить на него энергию, мы вообще не будем питать шину 3V3 и подключим плюс батарейки на шину VDD. Значит и на исток транзистора T6 нужно подать шину VDD, а 3V3 убрать. Вот почему нужно отрезать эту линию от него и подать в эту точку напряжение батарейки.

Ещё придётся выпаять резистор R44. Его можно было бы и оставить, но тогда пришлось бы заниматься фигурным вырезанием меди, поэтому его проще выпаять и заменить выводным номиналом в 100 кОм. Этот резистор подтягивает затвор транзистора к питанию для предотвращения случайного открытия.

Батарейка припаивается плюсом к шине VDD, а минусом её нужно подключить к GND. Шина VDD это фактически пины питания STM32L053C8, так что напряжение от батарейки пойдет на него напрямую, без стабилизаторов напряжения и какой-либо защиты от переполюсовки. Нужно обязательно соблюдать полярность и подавать не больше 3.3 вольт (максимально допустимо 3.6).

И последняя доработка: замыкание перемычек SB2, SB3. Для установки времени и даты используется последовательный порт МК (USART1) подключенный к UART-USB преобразователю, реализованному на ST-LINK v2.1. Это подключение и осуществляется замыканием перемычек SB2, SB3.

После вышеописанных манипуляций, ток потребления платы в периода покоя (МК в режиме Standby with RTC), стал равен 0.7 мкА, что крайне немного и батарейки должно хватать надолго (годы). При этом сохраняется возможность использования встроенного ST-Link для прошивки STM32L053C8. Прошивать можно не отключая батарейку, главное чтобы джампер JP4 отсутствовал. Если же хочется работать с платой без батарейки, то нужно отсоединив батарейку, вернуть на место джампер JP4 (положение OFF), чтобы STM32L053C8 питался от платы. Но если подключена батарейка и одет джампер JP4, плату нельзя подключать к USB, потому что тогда напряжение с платы пойдет в батарейку! Программа Программа написана в EmBlocks 2. 30 (компилятор ARM-GCC) и базируется на примерах работы с периферией из пакета STM32Cube_FW_L0_V1.1.0. Вообще хотелось использовать CoIDE, но он ещё не поддерживает этот МК.Несколько слов про алгоритм работы программы и то как пользоваться устройством. После сброса, проверяется установлены ли дата и время. Если нет, то на экране появляется приглашение установить часы, используя терминал:

Для этого нужно подключить плату к компьютеру, используя USB разъём (центральный). В терминале задать скорость/чётность: 9600, 8n1, открыть соединение, и нажать на плате кнопку Reset. В терминале должно появится приглашение для установки даты и времени. Также нужно задать количество дней для обратного отсчета. После успешного конфигурирования на экране отображается 2 счётчика: увеличения и уменьшения количества дней. Затем микроконтроллер переходит в режим Standby (самый энергоэффективный). Пробудить его может наступление нового дня (в полночь), нажатие кнопки Reset или кнопки User. При наступлении нового дня, на экране обнавляются оба счётчика. Для сброса увеличивающегося счётчика нужно нажать кнопку User (категорически запрещено делать это в полночь!). Для просмотра текущей времени и даты нужно нажать кнопку сброс. Если нужно изменить время и дату (например для подстройки часов) или задать новое значение счётчика обратного отсчета, то это можно сделать, если после нажатия кнопки Reset, в течении 10 секунд, установить соединение по терминалу (нажать Enter). На экране при этом будет:

Исходники и готовый hex файл доступны на github.

Возможные усовершенствования:

поддержка кириллицы, чтобы можно было на самом экране описать событие, например: «До нового года осталось 365 дней»; отказаться от конфигурирования через терминал в пользу эмуляции съёмного диска. Тогда для настройки нужно будет отредактировать текстовый файл в котором задавать дату/время, новое значение счётчика и отображаемую фразу.

© Habrahabr.ru

Stm32f103c8t6 st link v2

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

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

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

Первым вариантом я не пользовался, но сложного в нём вроде ничего нет. Нужно скачать утилиту STM32 ST-LINK Utility и на вашем прошиваемом микроконтроллере выставить определённый сигнал на ножкеножках BOOT0BOOt1. Допустим возьмём для примера самый дешёвый и простой микроконтроллер 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

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

Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать STM32F103C8T6, используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2.5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.


Этот микроконтроллер не является самым мощным среди STM32, но и не самый слабый. Существуют различные платы с STM32, в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.

Микроконтроллер STM32F103C8. Характеристики

  • Ядро ARM 32-bit Cortex-M3
  • Максимальная частота 72МГц
  • 64Кб Флеш память для программ
  • 20Кб SRAM памяти
  • Питание 2.0 … 3.3В
  • 2 x 12-біт АЦП (0 … 3.6В)
  • DMA контролер
  • 37 входов / выходов толерантных к 5В
  • 4 16-розрядних таймера
  • 2 watchdog таймера
  • I2C – 2 шины
  • USART – 3 шины
  • SPI – 2 шины
  • CAN
  • USB 2.0 full-speed interface
  • RTC – встроенные часы

На плате STM32F103C8 доступны

  • Выводи портов A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB через который можно питать плату. На плате присутствует стабилизатор напряжения на 3.3В. Питание 3.3В или 5В можно подавать на соответствующие выводы на плате.
  • Кнопка Reset
  • Две перемычки BOOT0 и BOOT1. Будем использовать во время прошивки через UART.
  • Два кварца 8Мгц и 32768 Гц. У микроконтроллера есть множитель частоты, поэтому на кварце 8 МГц мы сможем достичь максимальной частоты контроллера 72Мгц.
  • Два светодиода. PWR – сигнализирует о подачи питания. PC13 – подключен к выходу C13.
  • Коннектор для программатора ST-Link.

Итак, начнем с того, что попробуем прошить микроконтроллер. Это можно сделать с помощью USB-Uart переходника на базе микросхемы FT232 через USART, или с помощью программатора ST-Link.

Скачать тестовый файл для прошивки можно здесь. Программа мигает светодиодом на плате.

Прошивка STM32 с помощью USB-Uart переходника под Windows

В системной памяти STM32 есть Bootloader. Bootloader записан на этапе производстве и любой микроконтроллер STM32 можно запрограммировать через интерфейс USART с помощью USART-USB переходника. Такие переходники чаще всего изготавливают на базе популярной микросхем FT232RL. Прежде всего подключим переходник к компьютеру и установим драйвера (если требуется). Скачать драйвера можно с сайта производителя FT232RL – ftdichip.com. Надо качать драйвера VCP (virtual com port). После установки драйверов в компьютере должен появиться виртуальный последовательный порт.

Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.

Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 – логический ноль. На плате это следующее положение перемычек:

После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.

Программное обеспечение для прошивки

Качаем с сайта st.com программу Flash Loader Demonstrator для STM32. Flash Loader Demonstrator – программа для прошивки STM32 через последовательный интерфейс.

После включения схемы с правильно выставленными перемычками контроллер готов к работе с Flash Loader Demonstrator.

Запускаем Flash Loader Demonstrator и выбираем порт с которым будем работать, и устанавливаем параметры порта.

После выбора параметров порта нажимаем Next после чего должны увидеть «светофор» и информацию по микроконтроллеру. Если этого не происходит, тогда проверяем корректность установленных параметров связи и проверяем действительно ли микроконтроллер введен в режим программирования.

Нажимаем Next,

На этой странице выбираем файл для загрузки в микроконтроллер. Файл может быть в формате bin или hex.

Нажимаем Next и ждем.

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

Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)

Устанавливаем stm32flash

Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0


рекомендуется к прочтению

Архитектуру STM32 можно мысленно разделить на две части. Первая часть, это ядро Cortex-M3, которое спроектировали в ARM и которое примерно одинаковое для всех. «Примерно», потому что, содержит опциональные модули которые могут быть у одного производителя и отсутствовать у другого. Вторая часть, это периферия знакомая по STM8, с тем отличием, что был добавлен USB2.0 интерфейс, хотя точнее было бы сказать, что этот интерфейс был «откручен» от STM8(такая у STM политика: хочешь аппаратный USB, используй STM32).

    Справочники и руководства которые нужны для работы c STM32F103x8/STM32F103xB:
  1. Справочное руководство по 32-битным микроконтроллерам серий STM32F10x Reference Manual. STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM®-based 32-bit MCUs или RM 0008
  2. Руководство на чипы STM32F103x8/STM32F103xB STM32F103x8 STM32F103xB Medium-density performance line ARM®-based 32-bit MCU with 64 or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfaces
  3. Ядро Cortex – МЗ компании ARM. Полное руководство. Книга не обязательная, но на мой взгляд очень полезная.
    Небльшой ликбез по ARM и Cortex-M3 в частности:
  • Cortex-M3 основан на архитектуре ARMv7 и является усеченным вариантом архитектуры ARMv7 специально для микроконтроллеров. По сравнению с полноценным ЦПУ Cortex-A, здесь отсутствует кеш и 32-битный альтернативный набор команд ARM. Также могут отсутствовать некоторые модули, такие как модуль зашиты памяти – MPU (Memory Protect Unit).
  • Cortex-M3 включает в себя 16-битный набор команд, оптимизированный для систем с малым объемом памяти, Thumb и 32-битный дополнительный набор Thumb-2. Здесь 16-битная команда означает, что ее двоичное представление будет занимать в памяти 16-бит, т.е. она более компактная. Программный код может состоять из произвольного набора 16-битных команд Thumb и 32-битных Thumb 2.
  • В Cortex-M3 имеется аппаратное деление и умножение. Урезанная, удешевленная версия Cortex-M0 базируется на архитектуре ARMv6 и таких инструкций не имеет. ARMv6 отличается от ARMv7 отсутствием набора инструкций Thumb-2. Cortex-M4, напротив, дополнен DSP модулем, а Cortex-M4F также включает в себя FPU модуль, т.е. он аппаратно поддерживает числа с плавающей запятой.
  • Номера процессоров ARM никак не согласованы с версиями архитектур. Процессоры ARM11 имеют архитектуру ARMv6, а ARM9 имели архитектуру ARMv4.
  • Cortex-M3 имеет единую адресную 32-битную шину, которая может адресовать 4Гб памяти. Процессор построен по гарвардской архитектуре и имеет отдельные шины для памяти данных SRAM и памяти программ Flash. Программа может быть запущена из SRAM, тогда будет задействована только одна шина и код будет выполняться медленнее.
  • Cortex-M3 имеет шестнадцать 32-битных РОН (регистров общего назначения) R0-R15. Команды из набора инструкций Thumb могут обращаться только к регистрам R0-R7. Команды из набора Thumb-2 могут обращаться ко всем регистрам. При этом, регистр r13 – это указатель стека, r14 – регистр связи(хранит адрес возврата из подпрограммы), r15 – счетчик команд.

Немного о STM32:

Выпускаемые линейки микроконтроллеров изображены на следующей картинке:

Это не полный перечень, но представление давать должен. Кроме линеек, микроконтроллеры делятся по размерам flash-памяти. Чем больше flash-пямять, тем больше остальной периферии. Для 103-й линейки это выглядит так:

Блок-схема устройства STM32F103 представлена на картинке ниже:

Во всем этом хозяйстве нас будет больше всего интересовать периферия подключенная к периферийным шинам APB1 и APB2. Также полезно будет запомнить внутреннюю шину AHB.

Имеющаяся в чипах периферия перечислена в следующей табличке:

Выбор «железа»

Чип который у меня оказался под рукой – STM32F103CBT6 запаянный в плату Maple Mini:

Заказав его год назад на Али, я ради интереса загрузил в него несколько скетчей, и набалововшись бросил на полку. За этот год проект Leaf Maple накрылся медным тазом, сайт поменял содержимое, а поддержку железа передали на следующий форум: STM32 for Arduino. Я особо не расстроился, т.к. не питал особых надежд на этот проект, и планировал плату использовать для Си-программирования.

Кстати, на упомянутом выше сайте есть хороший классификатор с образчиками результатов работы китайской промышленности, содержащих чипы STM32F103, очень рекомендую ознакомится: STM32F103 boards

Если у кого-то имеется под рукой «Blue Pill», то это не беда, там установлен чип STM32F103C8T6 который от STM32F103CBT6 отличается только уменьшенным до 64кБ размером flash-памяти. Еще там светодиод подключен на PC13, в то время как на MapleMini он на PB1, и кроме этого у Maple Mini имеется кнопка на PB8.

Зато на «Blue Pill» имеется штыревой разъем для подключения программатора ST-LINK, в то время как Maple Mini нужно устанавливать в макетку что бы прошить по SWD. Прозвонкой чипа было выяснено, что на Mapple Mini SWDIO контакт «висит» на 22-pin, а SWCLK на 21-м. Но заставить работать ST-LINK с Maple Mini оказалось не просто.

Прошивка чипов через программатор ST-LINK v2

STM32 можно прошить либо через UART встроенным загрузчиком, либо через SWD-интерфейс программатором ST-LINK. Меня интересовал второй вариант, т.к. был скромным владельцем клона ST-LINK v2.

В Windows прошить STM32 через ST-LINK можно воспользовавшись фирменной утилитой «STM32 ST-LINK Utility», или непосредственно из среды разработки IAR for ARM. В Linux можно воспользоваться консольной утилитой sy-flash.

Если у вас «Blue Pill» или еще какая-либо плата отличная от Leaf Maple, то никаких проблем не будет, их можно сразу прошивать. Моя же Maple Mini никак не хотела видеться программатором, пока я не догадался во время загрузки программы из IAR в чип, несколько раз нажать на кнопку Reset на плате. После чего Maple Mini начала свободно прошиваться, но родной USB-загрузчик был на этом этапе потерт. Но это мелочи.

Ок. Посмотрим как чипы прошиваются в Windows. Войдя на сайт http://my.st.com и залогинившись, введем в строку поиска «st-link». На выходе получим такую табличку:

Щелкнув мышкой по второй строчке и промотав открывшуюся страницу книзу, увидим список предлагаемого ПО для программатора:

STSW-LINK004 – это утилита для прошивки STM32 чипов. STSW-LINK007 утилита для обновления прошивки программатора, STSW-LINK009 – драйвера для различных версий Windows. Немного выше предлагаются свежие прошивки для самого программатора. ST-LINK v2.

Как установить драйвер для ST-LINK v2 я рассказывал здесь: STM8 + IAR + ST-LINK2: программирование, прошивка и отладка из под Windows, поэтому далее будем считать, что драйвер уже установлен.

После установки и запуска «STM32 ST-LINK Utility» следует подключить ST-LINK v2 к компьютеру или виртуальной машине(мой случай), а к ST-LINK в свою очередь, должен быть подключен чип который следует прошить:

После чего следует пройти по меню: «меню-> Target – > Settings. » и должно появится такое окно:

Во-первых, сам программатор ST-LINK V2 должен быть опознан программой, показана версия его прошивки. Во-вторых должен быть опознан чип подключенный к программатору. В третьих, рабочий протокол должен быть установлен как SWD, а не JTAG.

Когда я впервые воткнул ST-LINK полученный год назад с Али, мне вместо номера прошивки показывало что-то вроде «Old firmware», поэтому мне пришлось воспользоваться утилитой обновления прошивки ST-LINK, что бы флешеры нормально работали с моим клоном ST-LINK. К сожалению у меня не сохранились скрины.

Здесь у меня изначальная версия прошивки(цифра после буквы J) была то ли 20, то ли 21. В итоге меня обновили то текущей версии. Кстати, из под виртуальной машины обновляется прошивка без проблем.

Вернемся к STM32 ST-LINK Utility. После нажатия кнопки «Ок» в окне «Settings», появится рабочее окно программы:

Следует запомнить, что стартовый адрес флеш-памяти начинается с 0x08000000. Встроенная оперативка начинается c 0x20000000. Чтобы программа стартовала с оперативки, контакты boot0 и boot1 должны быть сконфигурированы специальным образом.

Щелкнув по вкладке «binary file» можно выбрать файл с прошивкой, затем пройдя по «меню->Target->Program. » эту прошивку можно прошить в микроконтроллер:

Наряду со знакомым форматом прошивок HEX, в stm32 широко используется бинарный raw-формат «*.bin».

Через меню «File->Save As» можно сохранить прошивку чипа в файл:

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

Еше интересной штукой являются Option Bytes знакомые по STM8:

Пока не будем их трогать.

Теперь, что касается st-flash для Linux, то там с одной стороны все проще, а с другой – сложнее. Сложнее, потому что глючит. Может к этим глюкам как-то можно привыкнуть, но я пока не сумел.

Пока я обнаружил такую закономерность, команда очистки флеш-памяти «st-flash erase» помогает избавиться от глюков:

Программирование STM32 с помощью IAR и SPL в Windows

Если на сайте http://my.st.com ввести в строку поиска «stm32f10x standard peripheral library» то нам предложат скачать SPL для чипов STM32F10x:

В отличии от SPL для STM8, библиотека разделена на CMSIS и саму SPL. CMSIS (Cortex® Microcontroller Software Interface Standard) – это стандарт описания периферии микроконтроллера, то что в STM8 размещалось в файлах stm8s.h/stm8l.h

Подключить SPL к IAR достаточно просто, в сети множество видео и пошаговых инструкций. Я лично делал по этому видео: STM32 Discovery IAR and StdPeriph Lib настройка и загрузка проекта

Проект компилируется и заливается в чип, после чего успешно работает. Наверное больше и не надо, но я предлагаю забрать результирующий объектный файл с расширением *.out и перенести его в Linux, для внимательного изучения:

Программирование STM32 с помощью Eclipse и SPL в Linux

В Linux попробуем посмотреть, что за файл генерирует на выходе IAR:

Как видим, это обыкновенный эльф. Смотрим дальше:

Из «эльфа» мы всегда можем получить файл прошивки в HEX формате:

или бинарный файл:

Также можно посмотреть ассемблерный код:

Даже можно попытаться загрузить на чип в режиме отладки. Для этого понадобиться сервер st-util который входит в набор утилит st-flash и сам отладчик gdb.

Подключаемся к ранее запущенному серверу:

Ставим точку останова и запускаем на исполнение:

Но при попытке распечатать исходный листинг программы выдаст сообщение об ошибке:

кое-что сделать конечно можно

На этом этапе думаю лучше оставить прошивку с IAR в сторону, и попытаться скомпилировать нормальный объектный файл в Linux.


некоторые не ищут легких путей.

Проблема в том, что нельзя вот так просто взять компилятор, исходный текст и скомпилировать прошивку для stm32. Почему? Потому что в опциях gcc компилятора можно указать только тип архитектуры «cortex-m3», а чипов на этой архитектуре выпускаются различными фирмами – тьма тьмущая. И у всех них разные карты памяти и периферия. Как минимум понадобиться скрипт линкера для вашего чипа.

О масштабах проблемы можно почитать например тут: ARM-ы для самых маленьких: тонкости компиляции и компоновщик. Более-менее толковый самопальный Makefile который мне удалось найти можно взять тут: Еще один шаблон проекта под STM32 на gcc.

После некоторых размышлений я решил взять в качестве основы сборочные файлы из какого-нибудь IDE. Традиционным IDE для ARM в Linux стал Eclipse, который ненавидят наверно все linux-пользователи за глючность и тормознутость. Справедливости ради, должен упомянуть, что генерации проектов существует специальная фирменная утилита STM32CubeMX. Но может ли она генерировать проекты для gcc или нет, я не знаю.

Поддержка ARM в Eclipse ставится через плагин: GNU ARM Eclipse

На странице установки предлагается несколько способов установки ARM плагина. Но, например, на LinuxMint мне этот плагин установить не удалось. В репозитории какая-то древняя версия Eclipse 3.8, это версия от 2012(!) года. И установка плагина заканчивается фейлом:

Поэтому пришлось вспомнить про старую добрую Slackware GNU/Linux. В этом году вышла новая версия 14.2.

Для начала нужно будет скачать ARM toolchain c сайта ARM:

Скачанный архив я распаковал в /usr/local

Теперь чтобы скачать Eclipse, зайдем в репозиторий и введем в строку поиска «eclipse-cpp»:

После чего попадаем на страницу с пакетом:

Т.к. уменя Слакваръ 64-битная, то для установки выполняем следующие манипуляции:

Поставив Eclipse мы сделали полдела. Еще нужно поставить jdk. C 6-й и 8-й версии JDK Eclipse отказывался работать и вылетал. С 7-й тоже глючит, но кое-как работает. В гугл вбиваем «java jdk 7 download» попадем на страницу: Java SE Development Kit 7 Downloads

Теперь можно запускать Eclipse:

Жмем OK, это будет рабочий каталог проектов:

Далее открываем Marketplace:

В строку поиска вводим ARM:

и щелкаем по «install»

Перед установкой нужно будет принять условия лицензии:

Если погода на Марсе будет солнечной, то в конце установки предложат перезагрузить Eclipse:

После перезапуска Eclipse создаем новый проект:

В открывшийся форме нужно будет заполнить имя нового проекта и выбрать его тип:

В следующей форме необходимо выбрать параметры чипа. Замечу, что по дефолту(поле Content) предлагается не пустой проект, а проект с blink’ом:

Следующую форму можно оставить как есть:

Здесь нужно указать путь к папке toolchain’ом:

Осталось закрыть окно «Welcome»

И перед нами открывается окно проекта:

Это совсем не тот простенький Blink который был в IAR. Здесь задержки формируются по таймеру и кроме этого используется модуль трассировки. Задать номер pin’а к которому подключен светодиод, можно в файле Blinky.h

Чтобы задать светодиод на PB1 нужно константы BLINK_PORT_NUMBER и BLINK_PIN_NUMBER установить в единицы. После чего можно скомпилировать проект:

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

Там будет объектный файл прошивки. Получаем бинарный файл:

Если, опять же все нормально, то светодиод начнет мигать с интервалом в одну секунду. Заливать прошивку можно и из Eclipse, но эта IDE меня интересует только как генератор проектов.

Попробуем взглянуть на makefile файл который лежит в этой же папке:


некоторые вещи бывает сложно объяснить

Пробуем еще раз загрузить полученный файл в отлдачик. Запускаем сервер:

подключаемся к серверу:

ставим точку останова:

Запускаем на выполнение:

Выполнение программы приостонавливается на точке останова. Смотрим листинг:

В этот раз все в прорядке. Однако если мы еще раз дадим команду continue, то будет возможно, неожиданный эффект:

Программа останавливается по сигналу SIGTRAP и дальше ни в какую не идет.

Проблема кроется в отладочном интерфейсе semihosting, которого как понимаю, в чипе просто нет, но который позволяет выводить отладочные сообщения через функцию trace_printf().

Чтобы решить эту проблему, нужно в Eclipce через меню->project->proporties, открыть вкладку Settings в «C/C++ Build»:

В настройке препроцессора следует удалить макроопределение OS_USE_TRACE_SEMIHOSTING_DEBUG. После чего пересобрать проект. и полученный объектный файл заново загрузить в отладчик:

Посмотрим что нам пытаются вывести:

здесь вроде все нормально

Посмотрим значение переменной seconds:

Почему то у меня после blink_on() светодиод гаснет, а после blink_off() наоборот загорается

Как считать прошивку с stm32

Изучаем 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

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

1. STM32. Программирование STM32F103. Тестовая плата. Прошивка через последовательный порт и через ST-Link программатор

Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать STM32F103C8T6, используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2. 5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.

Этот микроконтроллер не является самым мощным среди STM32, но и не самый слабый. Существуют различные платы с STM32, в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.

Микроконтроллер STM32F103C8. Характеристики

  • Ядро ARM 32-bit Cortex-M3
  • Максимальная частота 72МГц
  • 64Кб Флеш память для программ
  • 20Кб SRAM памяти
  • Питание 2.0 . 3.3В
  • 2 x 12-біт АЦП (0 . 3.6В)
  • DMA контролер
  • 37 входов / выходов толерантных к 5В
  • 4 16-розрядних таймера
  • 2 watchdog таймера
  • I2C — 2 шины
  • USART — 3 шины
  • SPI — 2 шины
  • CAN
  • USB 2.0 full-speed interface
  • RTC — встроенные часы

На плате STM32F103C8 доступны

  • Выводи портов A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB через который можно питать плату. На плате присутствует стабилизатор напряжения на 3.3В. Питание 3.3В или 5В можно подавать на соответствующие выводы на плате.
  • Кнопка Reset
  • Две перемычки BOOT0 и BOOT1. Будем использовать во время прошивки через UART.
  • Два кварца 8Мгц и 32768 Гц. У микроконтроллера есть множитель частоты, поэтому на кварце 8 МГц мы сможем достичь максимальной частоты контроллера 72Мгц.
  • Два светодиода. PWR — сигнализирует о подачи питания. PC13 — подключен к выходу C13.
  • Коннектор для программатора ST-Link.

Скачать тестовый файл для прошивки можно здесь. Программа мигает светодиодом на плате.

Прошивка STM32 с помощью USB-Uart переходника под Windows

Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.

Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 — логический ноль. На плате это следующее положение перемычек:

После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.

Программное обеспечение для прошивки

После включения схемы с правильно выставленными перемычками контроллер готов к работе с Flash Loader Demonstrator.

Запускаем Flash Loader Demonstrator и выбираем порт с которым будем работать, и устанавливаем параметры порта.

После выбора параметров порта нажимаем Next после чего должны увидеть «светофор» и информацию по микроконтроллеру. Если этого не происходит, тогда проверяем корректность установленных параметров связи и проверяем действительно ли микроконтроллер введен в режим программирования.

Нажимаем Next,

На этой странице выбираем файл для загрузки в микроконтроллер. Файл может быть в формате bin или hex.

Нажимаем Next и ждем.

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

Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)

Устанавливаем stm32flash

Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0

Получить информацию о чипе
Читаем с чипа в файл dump.
bin
Пишем в чип

Прошивка STM32 с помощью ST-Link программатора под Windows

При использовании программатора ST-Link выводы BOOT0 и BOOT1 не используются и должны стоять в стандартном положении для нормальной работы контроллера.

Качаем с сайта st.com Утилиту STM32 ST-LINK Utility. Устанавливаем ее. С ней должен быть установлен и драйвер для ST-Link. Если нет, качаем и устанавливаем драйвера ST-Link: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link009.html Подключаем ST-Link в USB- разъем компьютера, а соответствующие выводы программатора подключаем к выводам тестовой платы согласно маркировки.

Запускаем программу STM32 ST-LINK Utility

Выполняем пункт меню Target -> Connect

Выполняем пункт меню Target -> Erase Chip

Выполняем пункт меню File -> Open file. Выбираем файл для загрузки в микроконтроллер.

Выполняем пункт меню Target -> Programm & Verify.

После завершения прошивки и проверки, загруженная программа автоматически запустится.

Прошивка STM32 с помощью ST-Link программатора под Linux (Ubuntu)

Устанавливаем софт для работы с ST-Link

Пришлось устанавливать autoconf и libusb-1.0:

Как считать прошивку с stm32

11.05.2022г. ВНИМАНИЕ! Если у вас не отображаются иллюстрации к статьям, для просмотра сайта используйте TOR браузер

STM32F103 + SPL: Программирование, прошивка, отладка микроконтроллеров STM32 в средах Windows/IAR и Linux/Eclipse используя программатор ST-Link v2

разделы: STM32 , STM32duino , среда разработки , дата: 14 октября 2016г.


рекомендуется к прочтению

Архитектуру STM32 можно мысленно разделить на две части. Первая часть, это ядро Cortex-M3, которое спроектировали в ARM и которое примерно одинаковое для всех. «Примерно», потому что, содержит опциональные модули которые могут быть у одного производителя и отсутствовать у другого. Вторая часть, это периферия знакомая по STM8, с тем отличием, что был добавлен USB2.0 интерфейс, хотя точнее было бы сказать, что этот интерфейс был «откручен» от STM8(такая у STM политика: хочешь аппаратный USB, используй STM32).

    Справочники и руководства которые нужны для работы c STM32F103x8/STM32F103xB:
  1. Справочное руководство по 32-битным микроконтроллерам серий STM32F10x Reference Manual. STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM®-based 32-bit MCUs или RM 0008
  2. Руководство на чипы STM32F103x8/STM32F103xB STM32F103x8 STM32F103xB Medium-density performance line ARM®-based 32-bit MCU with 64 or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfaces Книга не обязательная, но на мой взгляд очень полезная.
    Небльшой ликбез по ARM и Cortex-M3 в частности:
  • Cortex-M3 основан на архитектуре ARMv7 и является усеченным вариантом архитектуры ARMv7 специально для микроконтроллеров. По сравнению с полноценным ЦПУ Cortex-A, здесь отсутствует кеш и 32-битный альтернативный набор команд ARM. Также могут отсутствовать некоторые модули, такие как модуль зашиты памяти — MPU (Memory Protect Unit).
  • Cortex-M3 включает в себя 16-битный набор команд, оптимизированный для систем с малым объемом памяти, Thumb и 32-битный дополнительный набор Thumb-2. Здесь 16-битная команда означает, что ее двоичное представление будет занимать в памяти 16-бит, т.е. она более компактная. Программный код может состоять из произвольного набора 16-битных команд Thumb и 32-битных Thumb 2.
  • В Cortex-M3 имеется аппаратное деление и умножение. Урезанная, удешевленная версия Cortex-M0 базируется на архитектуре ARMv6 и таких инструкций не имеет. ARMv6 отличается от ARMv7 отсутствием набора инструкций Thumb-2. Cortex-M4, напротив, дополнен DSP модулем, а Cortex-M4F также включает в себя FPU модуль, т.е. он аппаратно поддерживает числа с плавающей запятой.
  • Номера процессоров ARM никак не согласованы с версиями архитектур. Процессоры ARM11 имеют архитектуру ARMv6, а ARM9 имели архитектуру ARMv4.
  • Cortex-M3 имеет единую адресную 32-битную шину, которая может адресовать 4Гб памяти. Процессор построен по гарвардской архитектуре и имеет отдельные шины для памяти данных SRAM и памяти программ Flash. Программа может быть запущена из SRAM, тогда будет задействована только одна шина и код будет выполняться медленнее.
  • Cortex-M3 имеет шестнадцать 32-битных РОН (регистров общего назначения) R0-R15. Команды из набора инструкций Thumb могут обращаться только к регистрам R0-R7. Команды из набора Thumb-2 могут обращаться ко всем регистрам. При этом, регистр r13 — это указатель стека, r14 — регистр связи(хранит адрес возврата из подпрограммы), r15 — счетчик команд.

Немного о STM32:

Выпускаемые линейки микроконтроллеров изображены на следующей картинке:

Это не полный перечень, но представление давать должен. Кроме линеек, микроконтроллеры делятся по размерам flash-памяти. Чем больше flash-пямять, тем больше остальной периферии. Для 103-й линейки это выглядит так:

Блок-схема устройства STM32F103 представлена на картинке ниже:

Во всем этом хозяйстве нас будет больше всего интересовать периферия подключенная к периферийным шинам APB1 и APB2. Также полезно будет запомнить внутреннюю шину AHB.

Имеющаяся в чипах периферия перечислена в следующей табличке:

Выбор «железа»

Чип который у меня оказался под рукой — STM32F103CBT6 запаянный в плату Maple Mini:

Заказав его год назад на Али, я ради интереса загрузил в него несколько скетчей, и набалововшись бросил на полку. За этот год проект Leaf Maple накрылся медным тазом, сайт поменял содержимое, а поддержку железа передали на следующий форум: STM32 for Arduino. Я особо не расстроился, т.к. не питал особых надежд на этот проект, и планировал плату использовать для Си-программирования.

Кстати, на упомянутом выше сайте есть хороший классификатор с образчиками результатов работы китайской промышленности, содержащих чипы STM32F103, очень рекомендую ознакомится: STM32F103 boards

Если у кого-то имеется под рукой «Blue Pill», то это не беда, там установлен чип STM32F103C8T6 который от STM32F103CBT6 отличается только уменьшенным до 64кБ размером flash-памяти. Еще там светодиод подключен на PC13, в то время как на MapleMini он на PB1, и кроме этого у Maple Mini имеется кнопка на PB8.

Зато на «Blue Pill» имеется штыревой разъем для подключения программатора ST-LINK, в то время как Maple Mini нужно устанавливать в макетку что бы прошить по SWD. Прозвонкой чипа было выяснено, что на Mapple Mini SWDIO контакт «висит» на 22-pin, а SWCLK на 21-м. Но заставить работать ST-LINK с Maple Mini оказалось не просто.

Прошивка чипов через программатор ST-LINK v2

STM32 можно прошить либо через UART встроенным загрузчиком, либо через SWD-интерфейс программатором ST-LINK. Меня интересовал второй вариант, т.к. был скромным владельцем клона ST-LINK v2.

В Windows прошить STM32 через ST-LINK можно воспользовавшись фирменной утилитой «STM32 ST-LINK Utility», или непосредственно из среды разработки IAR for ARM. В Linux можно воспользоваться консольной утилитой sy-flash.

Если у вас «Blue Pill» или еще какая-либо плата отличная от Leaf Maple, то никаких проблем не будет, их можно сразу прошивать. Моя же Maple Mini никак не хотела видеться программатором, пока я не догадался во время загрузки программы из IAR в чип, несколько раз нажать на кнопку Reset на плате. После чего Maple Mini начала свободно прошиваться, но родной USB-загрузчик был на этом этапе потерт. Но это мелочи.

Ок. Посмотрим как чипы прошиваются в Windows. Войдя на сайт http://my.st.com и залогинившись, введем в строку поиска «st-link». На выходе получим такую табличку:

Щелкнув мышкой по второй строчке и промотав открывшуюся страницу книзу, увидим список предлагаемого ПО для программатора:

STSW-LINK004 — это утилита для прошивки STM32 чипов. STSW-LINK007 утилита для обновления прошивки программатора, STSW-LINK009 — драйвера для различных версий Windows. Немного выше предлагаются свежие прошивки для самого программатора. ST-LINK v2.

Как установить драйвер для ST-LINK v2 я рассказывал здесь: STM8 + IAR + ST-LINK2: программирование, прошивка и отладка из под Windows, поэтому далее будем считать, что драйвер уже установлен.

После установки и запуска «STM32 ST-LINK Utility» следует подключить ST-LINK v2 к компьютеру или виртуальной машине(мой случай), а к ST-LINK в свою очередь, должен быть подключен чип который следует прошить:

После чего следует пройти по меню: «меню-> Target — > Settings. » и должно появится такое окно:

Во-первых, сам программатор ST-LINK V2 должен быть опознан программой, показана версия его прошивки. Во-вторых должен быть опознан чип подключенный к программатору. В третьих, рабочий протокол должен быть установлен как SWD, а не JTAG.

Когда я впервые воткнул ST-LINK полученный год назад с Али, мне вместо номера прошивки показывало что-то вроде «Old firmware», поэтому мне пришлось воспользоваться утилитой обновления прошивки ST-LINK, что бы флешеры нормально работали с моим клоном ST-LINK. К сожалению у меня не сохранились скрины.

Здесь у меня изначальная версия прошивки(цифра после буквы J) была то ли 20, то ли 21. В итоге меня обновили то текущей версии. Кстати, из под виртуальной машины обновляется прошивка без проблем.

Вернемся к STM32 ST-LINK Utility. После нажатия кнопки «Ок» в окне «Settings», появится рабочее окно программы:

Следует запомнить, что стартовый адрес флеш-памяти начинается с 0x08000000. Встроенная оперативка начинается c 0x20000000. Чтобы программа стартовала с оперативки, контакты boot0 и boot1 должны быть сконфигурированы специальным образом.

Щелкнув по вкладке «binary file» можно выбрать файл с прошивкой, затем пройдя по «меню->Target->Program. » эту прошивку можно прошить в микроконтроллер:

Наряду со знакомым форматом прошивок HEX, в stm32 широко используется бинарный raw-формат «*.bin».

Через меню «File->Save As» можно сохранить прошивку чипа в файл:

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

Еше интересной штукой являются Option Bytes знакомые по STM8:

Пока не будем их трогать.

Теперь, что касается st-flash для Linux, то там с одной стороны все проще, а с другой — сложнее. Сложнее, потому что глючит. Может к этим глюкам как-то можно привыкнуть, но я пока не сумел.

Пока я обнаружил такую закономерность, команда очистки флеш-памяти «st-flash erase» помогает избавиться от глюков:

Программирование STM32 с помощью IAR и SPL в Windows

Если на сайте http://my.st.com ввести в строку поиска «stm32f10x standard peripheral library» то нам предложат скачать SPL для чипов STM32F10x:

В отличии от SPL для STM8, библиотека разделена на CMSIS и саму SPL. CMSIS (Cortex® Microcontroller Software Interface Standard) — это стандарт описания периферии микроконтроллера, то что в STM8 размещалось в файлах stm8s.h/stm8l.h

Подключить SPL к IAR достаточно просто, в сети множество видео и пошаговых инструкций. Я лично делал по этому видео: STM32 Discovery IAR and StdPeriph Lib настройка и загрузка проекта

Проект компилируется и заливается в чип, после чего успешно работает. Наверное больше и не надо, но я предлагаю забрать результирующий объектный файл с расширением *.out и перенести его в Linux, для внимательного изучения:

Программирование STM32 с помощью Eclipse и SPL в Linux

В Linux попробуем посмотреть, что за файл генерирует на выходе IAR:

Как видим, это обыкновенный эльф. Смотрим дальше:

Из «эльфа» мы всегда можем получить файл прошивки в HEX формате:

или бинарный файл:

Также можно посмотреть ассемблерный код:

Даже можно попытаться загрузить на чип в режиме отладки. Для этого понадобиться сервер st-util который входит в набор утилит st-flash и сам отладчик gdb.

Подключаемся к ранее запущенному серверу:

Ставим точку останова и запускаем на исполнение:

Но при попытке распечатать исходный листинг программы выдаст сообщение об ошибке:

кое-что сделать конечно можно

На этом этапе думаю лучше оставить прошивку с IAR в сторону, и попытаться скомпилировать нормальный объектный файл в Linux.


некоторые не ищут легких путей.

Проблема в том, что нельзя вот так просто взять компилятор, исходный текст и скомпилировать прошивку для stm32. Почему? Потому что в опциях gcc компилятора можно указать только тип архитектуры «cortex-m3», а чипов на этой архитектуре выпускаются различными фирмами — тьма тьмущая. И у всех них разные карты памяти и периферия. Как минимум понадобиться скрипт линкера для вашего чипа.

О масштабах проблемы можно почитать например тут: ARM-ы для самых маленьких: тонкости компиляции и компоновщик. Более-менее толковый самопальный Makefile который мне удалось найти можно взять тут: Еще один шаблон проекта под STM32 на gcc.

После некоторых размышлений я решил взять в качестве основы сборочные файлы из какого-нибудь IDE. Традиционным IDE для ARM в Linux стал Eclipse, который ненавидят наверно все linux-пользователи за глючность и тормознутость. Справедливости ради, должен упомянуть, что генерации проектов существует специальная фирменная утилита STM32CubeMX. Но может ли она генерировать проекты для gcc или нет, я не знаю.

Поддержка ARM в Eclipse ставится через плагин: GNU ARM Eclipse

На странице установки предлагается несколько способов установки ARM плагина. Но, например, на LinuxMint мне этот плагин установить не удалось. В репозитории какая-то древняя версия Eclipse 3.8, это версия от 2012(!) года. И установка плагина заканчивается фейлом:

Поэтому пришлось вспомнить про старую добрую Slackware GNU/Linux. В этом году вышла новая версия 14.2.

Для начала нужно будет скачать ARM toolchain c сайта ARM:

Скачанный архив я распаковал в /usr/local

Теперь чтобы скачать Eclipse, зайдем в репозиторий и введем в строку поиска «eclipse-cpp»:

После чего попадаем на страницу с пакетом:

Т.к. уменя Слакваръ 64-битная, то для установки выполняем следующие манипуляции:

Поставив Eclipse мы сделали полдела. Еще нужно поставить jdk. C 6-й и 8-й версии JDK Eclipse отказывался работать и вылетал. С 7-й тоже глючит, но кое-как работает. В гугл вбиваем «java jdk 7 download» попадем на страницу: Java SE Development Kit 7 Downloads

Теперь можно запускать Eclipse:

Жмем OK, это будет рабочий каталог проектов:

Далее открываем Marketplace:

В строку поиска вводим ARM:

и щелкаем по «install»

Перед установкой нужно будет принять условия лицензии:

Если погода на Марсе будет солнечной, то в конце установки предложат перезагрузить Eclipse:

После перезапуска Eclipse создаем новый проект:

В открывшийся форме нужно будет заполнить имя нового проекта и выбрать его тип:

В следующей форме необходимо выбрать параметры чипа. Замечу, что по дефолту(поле Content) предлагается не пустой проект, а проект с blink’ом:

Следующую форму можно оставить как есть:

Здесь нужно указать путь к папке toolchain’ом:

Осталось закрыть окно «Welcome»

И перед нами открывается окно проекта:

Это совсем не тот простенький Blink который был в IAR. Здесь задержки формируются по таймеру и кроме этого используется модуль трассировки. Задать номер pin’а к которому подключен светодиод, можно в файле Blinky.h

Чтобы задать светодиод на PB1 нужно константы BLINK_PORT_NUMBER и BLINK_PIN_NUMBER установить в единицы. После чего можно скомпилировать проект:

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

Там будет объектный файл прошивки. Получаем бинарный файл:

Если, опять же все нормально, то светодиод начнет мигать с интервалом в одну секунду. Заливать прошивку можно и из Eclipse, но эта IDE меня интересует только как генератор проектов.

Попробуем взглянуть на makefile файл который лежит в этой же папке:


некоторые вещи бывает сложно объяснить

Пробуем еще раз загрузить полученный файл в отлдачик. Запускаем сервер:

подключаемся к серверу:

ставим точку останова:

Запускаем на выполнение:

Выполнение программы приостонавливается на точке останова. Смотрим листинг:

В этот раз все в прорядке. Однако если мы еще раз дадим команду continue, то будет возможно, неожиданный эффект:

Программа останавливается по сигналу SIGTRAP и дальше ни в какую не идет.

Проблема кроется в отладочном интерфейсе semihosting, которого как понимаю, в чипе просто нет, но который позволяет выводить отладочные сообщения через функцию trace_printf().

Чтобы решить эту проблему, нужно в Eclipce через меню->project->proporties, открыть вкладку Settings в «C/C++ Build»:

В настройке препроцессора следует удалить макроопределение OS_USE_TRACE_SEMIHOSTING_DEBUG. После чего пересобрать проект. и полученный объектный файл заново загрузить в отладчик:

Посмотрим что нам пытаются вывести:

здесь вроде все нормально

Посмотрим значение переменной seconds:

Почему то у меня после blink_on() светодиод гаснет, а после blink_off() наоборот загорается

Курсы программирования микроконтроллеров stm32 для начинающих.

ARM

Приветствую всех любителей программирования, микроконтроллеров, да и электроники в целом на нашем сайте! В этой статье немного расскажу о том, чем мы будем заниматься тут, а именно об учебном курсе по микроконтроллерам ARM.

Итак, для начала разберемся, что же нужно знать и уметь, чтобы начать изучать ARM’ы. А, в принципе, ничего супер сложного и фееричного 😉 Конечно, на контроллеры ARM люди обычно переходят, уже наигравшись с PIC’ами и AVR’ками, то есть в большинстве своем опытные разработчики. Но я постараюсь максимально подробно и понятно описывать все то, что мы будем разбирать, чтобы те, кто впервые решил попробовать себя в программировании микроконтроллеров, могли легко разобраться в материале. Кстати, если будут возникать какие-нибудь вопросы, или просто что-то будет работать не так, как задумывалось, пишите в комментарии, постараюсь разобраться и помочь.

Теперь перейдем к техническим вопросам) Несколько раз я уже упомянул название «Учебный курс ARM», но, по большому счету, это не совсем верно. Микроконтроллера ARM как такового не существует. Есть контроллер с ядром(!) ARM, а это, согласитесь, все-таки не одно и то же. Так вот, такие девайсы выпускает ряд фирм, среди которых особо выделяются, STMicroelectronics и NXP Semiconductors. Соответственно выпускают они контроллеры STM и LPC. Я остановил свой выбор на STM32, они мне просто больше понравились =) У STM очень подкупает, что разобравшись с любым МК из линейки STM32F10x, не возникнет никаких проблем и с любым другим. Одна линейка – один даташит. Кстати есть огромное количество как дорогих, так и не очень, отладочных плат с контроллерами STM32, что очень радует, хотя первое время будем отлаживать наши программы в симуляторе, чтобы оценить возможности контроллера, прежде чем покупать железо. Вот, на всякий случай, официальный сайт STMicroelectronics – .

Как то плавно выехали на тему компилятора, так что скажу пару слов об этом. Я, недолго думая, выбрал Keil, не в последнюю очередь из-за мощного встроенного симулятора. Можно и на UART там посмотреть, и на любой регистр, и даже логический анализатор имеется в наличии. Словом, у меня Keil оставил в основном только приятные впечатления, хотя есть и минусы, конечно, но не катастрофические. Так что можете смело качать Keil uvision4 с офф. сайта (). Правда есть одно НО – IDE платная, но доступен демо-режим с ограничением кода в 32кБ, которых нам пока с лихвой хватит. Кому этого мало есть огромное количество кряков для Keil’а 😉 Устанавливается все без проблем – пару раз тыкаем далее и все отлично ставится и работает без дополнительных танцев с бубном.

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

Я очередной выпускник некоего московского вуза (не буду уточнять какого, но средненького). Полгода назад нам сообщили, что пора писать диплом. На тот момент я только-только начал осваивать микроконтроллеры и давалось мне это не то, чтобы нелегко, но со скрипом, который производит холодильник, когда ты, в одиночку, пытаешься аккуратно сдвинуть его, не повредив драгоценный ламинат (в моем случае линолеум).

Мое обучение началось, когда я два года назад заинтересовался темой микроконтроллеров и инженер, у которого поинтересовался насчет них, выдал мне плату 300х200мм и сказал, что в ней стоит контроллер STM32F217ZGT6 и на этой плате есть все необходимое для обучения. «В общем, освоишь ее — все остальное покажется фигней» (он, правда, не сказал, что для моргания светодиодом надо настроить SPI, о котором на тот момент я даже не слышал). Спустя три не очень напряженных месяца бесплотных попыток, осознания слабости навыков программирования и огромного количества прочитанных статей пришлось все же раскошелится на STM32VLDISCOVERY и способом копирования программ и экспериментов с ними дело наконец-то пошло, но все равно медленно.

За полтора года успел поработать разработчиком, искал вакансии, где работают с STM32 (так как считаю, что сейчас это наиболее перспективные микроконтроллеры своего класса), нахватался опыта и когда дело дошло до диплома, вспомнил о своих наболевших мозолях. Идея с темой пришла мгновенно: «Отладочная плата на STM32 и (полноценный) обучающий курс (для самых маленьких) к ней».

Именно по этому захотел написать цельный и законченный курс, чтобы так сказать другие не мучились и самому разобраться. Так что придя в институт и понимая, что для быстрого освоения и понимания нужен стимул (а точнее — хороший такой пинчище), я стал бить себя пяткой в грудь (рыть себе могилу), что не только напишу обучающий курс (в нашем универе пришлось назвать его методическим пособием), но и макет работающий предоставлю. Тему приняли, задание написал (могилу вырыл, надгробие заказал), дело было за малым, все написать и разработать (лечь в могилу, закопаться и поставить надгробие).

Жизнь показала, что времени у меня было отнюдь не полгода, но все же все время, отведенное на диплом, почти закончилось, совсем скоро защита, но как не удивительно все не только готово, но и почти на 100% протестировано (на живых людях в том числе).

На выходе получилось следующее:

1.
Сам курс (методическое пособие по-научному)

Вкратце о нем можно сказать, что на мой взгляд и по отзывам тестировщиков он полноценный, но немного суровый и не доработанный. Так как я решил, что не буду писать учебник по программированию на СИ, следовательно, и в курсе отсутствуют объяснения операторов, оттого и сказали, что местами курс суров. По поводу недоработанности честно скажу, я не все успел отладить к сдаче, чтобы об этом писать не только здесь, но и в методическом пособии к сдаче. Так же считаю, что можно лучше, но об этом чуть позже.

2. Отладочная плата на контроллере STM32F103RET6

Здесь все немного лучше, чем в первом пункте, плата разработана, заказана (из-за обстоятельств заказывать пришлось срочно) в Резоните, компоненты заказаны, спаяна ручками (честно скажу, никакое видео не передаст ощущения первой пайки LQFP64) и протестирована (большее ее часть заработала сразу же). Но это макет и, конечно, не обошлось без накладок: проводков, переходников и других различных «костылей», но заказать вторую ревизию я, к несчастью, не успею, да наверно и не стал бы, для защиты диплома, уверен и этого хватит. Так что ниже я расскажу более подробно об этой отладочной плате.

Придя на первую работу в качестве разработчика электроники, я столкнулся с одним интересным мнением и, как оказалось, оно весьма распространено. Это мнение звучало примерно так: «Вот я программист и программирую микроконтроллеры, схемотехнику не знаю и знать не хочу, паять, кстати, тоже не умею». Пообщавшись с группой программистов вне фирмы, понял, что человек с моей работы далеко не одинок в своем мнении и хоть я его и не поддерживаю, понять и уважать мнение окружающих стоит, тем более это отлично вписывалось в тогдашнюю концепцию отладочной платы «все на борту». В связи с этим плата получилось достаточно «жирненькая», получила название STM32SB (SB-StudyBoard) V1.0b. Ниже разберем, что в нее вошло.

1. Микроконтроллер
Исходя из того, что я работал с микроконтроллером STM32F103RET6, он и был выбран для проекта.

2. Схема питания и аппаратный USB контроллера
В этом микроконтроллере есть встроенный USB, который было решено вывести на отдельный разъем.

3. Спикер
Было решено ввести для освоения ШИМ модуляции и обучению написанию мелодий.

4. Цифровой индикатор и сдвиговый резистор
Для одновременного освоения динамической индикацией и сдвиговым регистром было решено их совместить.

5. Светодиоды
Светодиоды, что может быть лучше? Только трехцветные светодиоды, на которых можно освоить плавную смену цветов.

6. ЖК-дисплей
Стандартный ЖК-дисплей на 2 строки по 16 символов для освоения параллельного интерфейса.

7. Клавиатура
Матричная клавиатура, это нужно знать и уметь.

8. Расширитель портов ввода-вывода
Много портов ввода-вывода не бывает, а тут еще и I2C освоить можно.

9. Электронный термометр
Датчик температуры по 1-Wire, полезная вещь и ценный опыт работы с ним может пригодиться.

10. Электронный потенциометр
На этой вещице можно освоить полноценный SPI и попробовать сделать замеры изменения напряжения через АЦП.

11. Реле
Хоть это и на уровне поморгать светодиодом, но все же приятно услышать знакомый щелчок, правда?

12. Ключевые транзисторы
Так же на уровне моргания светодиодом, но вдруг кому принцип не понятен.

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

14. Преобразователь WIFI-UART(esp8266)
В схеме преобразователь участвует как разъем, также он указан и здесь. Используется уже довольно нашумевший модуль esp8266.

15. Преобразователь USB-UART
USB это всегда круто, сдесь используется чип CP2102.

16. JTAG и SWD
Ну куда же без этих вещей.

Такой широкий набор внешних устройств даст возможность освоить большинство приемов и попробовать поработать с большинством интерфейсов, не заморачиваясь закупкой элементов и не отходя от стола, что согласуется с концепцией не только «все на борту», но и «для самых маленьких» (не умеющих паять).

Конечно, не обошлось без накладок, но, как говорит один знакомый инженер, «мастерство инженера измеряется в количестве перерезанных дорожек на первой итерации платы».

Вот список моих «косяков», того, чего я не заметил, забыл или даже не знал при разработке этой платы:

1. Понял, что пины SWD расположены с странном порядке и хоть работе платы это не мешает. Услышал, на мой взгляд, правильное мнение, что их стоит располагать так, как они расположены на STM32VLDISCOVERY, чтобы избежать недоразумений у нового пользователя.

2. Так подключать одноцветные светодиоды, как на данной плате, не стоит, по причине того, что для моргания ими необходимо отремапить JTAG, но получился неожиданный для меня эффект индикации процесса загрузки прошивки.

3. Я разработал свой логотип для этой платы, который хотел перевести в PCB и разместить на плате, но забыл.

4. Для экономии места во второй ревизии платы я бы разместил некоторые не используемые пользователем SMD компоненты на нижней стороне платы.

5. Понял, что для более удобной разводки цепей с кварцевыми резонаторами было бы удобно заменить их на SMD.

6. Забыл подписать, где JTAG и SWD, так же у них не показано, как их подключать и если для JTAG и его разъемом BH-20 все не так сложно, то с SWD ситуация несколько опасней.

7. При разработке футпринта ЖК-дисплея вышел казус и отверстия оказались слишком малы для болтов М3.

8. У преобразователя CP2102 перепутаны выводы RX и TX. Так как я привык, что в документации приводится пример подключения относительно микроконтроллера, а не внешнего устройства, пришлось перерезать таки 2 дорожки.

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

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

11. Ну и, как водится, «хорошая мысля приходит опосля». Так, уже после получения платы я понял, что стоило сделать размер ее подходящий хоть под какой-нибудь корпус — видимо придется доработать во второй ревизии.

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

Напоследок покажу вам 3D модель этой платы:

И для сравнения фотографии ее же, как она получилась «в живую», вид с верху:

И вид с боку, чтоб было видно побольше «костылей»:

Извините, но весь проект до сдачи диплома выкладывать мне бы не хотелось, но после этой работы у меня встал вопрос, а стоит ли данный проект развивать? Меня посетила идея написать цикл статей, посвященных обучению, где был бы представлен такой вот полноценный курс по этой отладочной плате, где все написано простыми словами и объяснено на пальцах. Хотелось бы услышать от вас в комментариях насколько это было бы полезно и необходимо на настоящее время.

Спасибо за внимание!

Опубліковано 09.08.2016

Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать , используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2.5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.


Этот микроконтроллер не является самым мощным среди STM32 , но и не самый слабый. Существуют различные платы с STM32 , в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.

Микроконтроллер STM32F103C8. Характеристики

  • Ядро ARM 32-bit Cortex-M3
  • Максимальная частота 72МГц
  • 64Кб Флеш память для программ
  • 20Кб SRAM памяти
  • Питание 2. 0 … 3.3В
  • 2 x 12-біт АЦП (0 … 3.6В)
  • DMA контролер
  • 37 входов / выходов толерантных к 5В
  • 4 16-розрядних таймера
  • 2 watchdog таймера
  • I2C – 2 шины
  • USART – 3 шины
  • SPI – 2 шины
  • USB 2.0 full-speed interface
  • RTC – встроенные часы

На плате STM32F103C8 доступны

  • Выводи портов A0-A12 , B0-B1 , B3-B15 , C13-C15
  • Micro-USB через который можно питать плату. На плате присутствует стабилизатор напряжения на 3.3В. Питание 3.3В или 5В можно подавать на соответствующие выводы на плате.
  • Кнопка Reset
  • Две перемычки BOOT0 и BOOT1 . Будем использовать во время прошивки через UART .
  • Два кварца 8Мгц и 32768 Гц. У микроконтроллера есть множитель частоты, поэтому на кварце 8 МГц мы сможем достичь максимальной частоты контроллера 72Мгц.
  • Два светодиода. PWR – сигнализирует о подачи питания. PC13 – подключен к выходу C13 .
  • Коннектор для программатора ST-Link .

Итак, начнем с того, что попробуем прошить микроконтроллер. Это можно сделать с помощью через USART, или с помощью программатора ST-Link .

Скачать тестовый файл для прошивки можно . Программа мигает светодиодом на плате.

Прошивка STM32 с помощью USB-Uart переходника под Windows

В системной памяти STM32 есть Bootloader . Bootloader записан на этапе производстве и любой микроконтроллер STM32 можно запрограммировать через интерфейс USART с помощью USART-USB переходника. Такие переходники чаще всего изготавливают на базе популярной микросхем FT232RL . Прежде всего подключим переходник к компьютеру и установим драйвера (если требуется). Скачать драйвера можно с сайта производителя FT232RL – ftdichip.com . Надо качать драйвера VCP (virtual com port). После установки драйверов в компьютере должен появиться виртуальный последовательный порт.


Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.

Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 – логический ноль. На плате это следующее положение перемычек:

После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.

Программное обеспечение для прошивки

Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0

Получить информацию о чипе

Результат:

Читаем с чипа в файл dump.

bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

Пишем в чип

sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

Результат:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser: Raw BINARY Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) — RAM: 20KiB (512b reserved by bootloader) — Flash: 128KiB (sector size: 4×1024) — Option RAM: 16b — System RAM: 2KiB Write to memory Erasing memory Wrote and verified address 0x08012900 (100.00%) Done. Starting execution at address 0x08000000… done.

Прошивка STM32 с помощью ST-Link программатора под Windows

При использовании программатора ST-Link выводы BOOT0 и BOOT1 не используются и должны стоять в стандартном положении для нормальной работы контроллера.

(Книжка на русском языке)

Маркировка STM32

Device familyProduct typeDevice subfamilyPin countFlash memory sizePackageTemperature range
STM32 =
ARM-based 32-bit microcontroller
F = General-purpose
L = Ultra-low-power
TS = TouchScreen
W = wireless system-on-chip
60 = multitouch resistive
103 = performance line
F = 20 pins
G = 28 pins
K = 32 pins
T = 36 pins
H = 40 pins
C = 48/49 pins
R = 64 pins
O = 90 pins
V = 100 pins
Z = 144 pins
I = 176 pins
B = 208 pins
N = 216 pins
4 = 16 Kbytes of Flash memory
6 = 32 Kbytes of Flash memory
8 = 64 Kbytes of Flash memory
B = 128 Kbytes of Flash memory
Z = 192 Kbytes of Flash memory
C = 256 Kbytes of Flash memory
D = 384 Kbytes of Flash memory
E = 512 Kbytes of Flash memory
F = 768 Kbytes of Flash memory
G = 1024 Kbytes of Flash memory
I = 2048 Kbytes of Flash memory
H = UFBGA
N = TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Industrial temperature range, –40…+85 °C.
7 = Industrial temperature range, -40…+ 105 °C.
STM32F103C8T6

Как снять защиту от записи / чтения?

Если вы получили плату с STM32F103, а программатор ее не видит, это означает, что китайцы защитили Флеш память микроконтроллера. Вопрос “зачем?” оставим без внимания. Чтобы снять блокировку, подключим UART переходник, будем программировать через него. Выставляем перемычки для программирования и поехали:

Я это буду делать из под Ubuntu с помощью утилиты stm32flash.

1. Проверяем видно ли микроконтроллер:

Sudo stm32flash /dev/ttyUSB0

Должны получить что-то такое:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) — RAM: 20KiB (512b reserved by bootloader) — Flash: 128KiB (sector size: 4×1024) — Option RAM: 16b — System RAM: 2KiB

2. Снимаем защиту от чтения а затем от записи:

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) — RAM: 20KiB (512b reserved by bootloader) — Flash: 128KiB (sector size: 4×1024) — Option RAM: 16b — System RAM: 2KiB Read-UnProtecting flash Done. sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) — RAM: 20KiB (512b reserved by bootloader) — Flash: 128KiB (sector size: 4×1024) — Option RAM: 16b — System RAM: 2KiB Write-unprotecting flash Done.

Теперь можно нормально работать с микроконтроллером.

ST-LINK/V2 позволяет программировать и отлаживать контроллеры STM32 и STM8, и поддерживается такими популярными средами разработки как Keil uVision, IAR EWARM, CoIDE, IAR EWSTM8 и другими. Оригинальный программатор стоит около 50$ (в чайне видел такой же за 35$). Также у этого программатора куча китайских клонов, различающихся степенью урезаности (отсутствием компонентов), вплоть до свистков за 7$. Кроме того, программатор распаян на платах STM*Discovery, опять же в урезанной версии и умеющий работать только с STM32 или только с STM8 в зависимости от того, какая дискавери.

Но иногда проще и интереснее сделать программатор самому, особенно если для этого не нужно много усилий. Все детали мне обошлись меньше чем в 5$ в местном магазине радиодеталей. Прошить сам программатор можно по интерфейсу UART (например с помощью любого преобразователя USB- UART).

Что умеет программатор/отладчик ST-LINK-V2:

  • Прошивка и отладка STM32 по интерфейсу SWD (пины SWCLK и SWDIO) + RST (не обязательно)
  • Необязательный пин SWO для последовательного терминала с внешним STM32 без дополнительных UART-ов и т.д. (Можно выполнять printf/scanf на STM32 с помощью программатора)
  • Прошивка и отладка STM8 по интерфейсу SWIM
  • Выдача внешнего питания 3. 3В от программатора
  • Подключение по mini-usb

Для контроллеров STM32 и STM8 у меня уже есть программатор Versaloon , но его недостаток в том, что он не умеет отлаживать STM8 (только прошивает) и не поддерживается популярными средами разработки. Вообще по конструкции ST-LINK/V2 очень похож на versaloon. В программаторе используется тот же микроконтроллер STM32F103C8, ну и плюс минимальная обвязка. Основу схемы я взял из статьи Highlander-а в сообществе easyelectronics. Highlander поделился всей информацией, которая нужна для сборки программатора, за что ему огромное спасибо.

Поддерживаемые чипы

Программатор может использоваться для прошивки микросхем STM32:

  • STM32F100xx, STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx, STM32F107xx, STM32F2xxx, STM32F4xxx,
  • STM32L15xx6, STM32L15xx8,STM32L15xxB, STM32L151xC, STM32L151xD, STM32L152xC, STM32L152xD, STM32L162xD,
  • STM32TS60,
  • STM32W108C8, STM32W108xB, STM32W108xC, STM32W108xZ
  • STM8AF51x, STM8AF52x, STM8AF61x, STM8AF62x,STM8AH51x, STM8AH61x,
  • STM8S003K3, STM8S003F3, STM8S005C6, STM8S005K6, STM8S007C8, STM8S103xx, STM8S105xx, STM8S207xx, STM8S208xx, STM8S903F3, STM8S903K3,
  • STM8L101xx, STM8L15x, STM8L16x,
  • STM8TL52x4,STM8TL53x4

Проект

Схему я перерисовал в eagle, резисторы и конденсаторы у меня в корпусе 0805 (которые лежали в магазине). Также я заменил сборки стабилитронов на одиночные стабилитроны, которые удалось купить. Кроме того по причине ненадобности я убрал возможность переключения выходного напряжения между 5В и 3.3В, оставил только 3.3В. Из интерфейсов программирования STM32 я оставил только SWD, убрав громоздкий JTAG(ни разу его не использовал для Cortex-M3 и не думаю что когда- нибудь буду).

В результате схема выглядит так:

Необходимые компоненты:

Количество Описание Номинал Корпус Комопненты
9Конденсатор0.1u0805C1-C3, C5, C8-C10, C12,C13
1Резистор1. 5k0805R3
1Резистор100805R12
2Резистор100k0805R6, R11
2Конденсатор электролит, тантал10uEIA3528, CASE BC4, C11
22-х пиновые штырьки 0.1″1×21X02JP1, JP2
2Конденсатор20p0805C6, C7
8Резистор220805R4, R5, R13-R18
3Резистор2200805R7-R9
1Регулятор напряжения LM11173V3 FixedSOT223IC2
2Резистор4. 7k0805R1, R2
2Резистор5100805R19, R20
7SMD-Стабилитрон5V1SOD80CVD1-VD7
1Резистор6800805R10
1Стандартный кварц HC49UV8 MHzHC49U-VY1
1Разъем BH-10 или штырьки 5×2BH-102X5JP3
1ИндуктивностьBLM18AG121SN1D0805L1
1СветодиодGreen3 ммLED1
1СветодиодRed3 ммLED2
1ST STM32F101/103 48pin LQFP-48STM32F103C8T6LQFP-48IC1
1Mini-USB «B» коннектор 5 пиновUSB-MINIB-5PINUSB-MINIBJP4

Вместо индуктивности можно на крайний случай просто запаять перемычку, или резистор в 0 Ом. Регулятор напряжения должен быть любой в корпусе SOT223 на 3.3 В фиксированный, например у меня LD1117-3.3. Вместо STM32F103C8T6(64K flash) можно также взять более дорогой STM32F103CBT6 (128K flash). Электролиты конденсаторы можно брать в диапазон 4.7-47мкФ.

В принципе из схемы можно также убрать стабилитроны и поменять корпус компонентов на 0603 и в результате уменьшить форм-фактор до маленького свистка на подобии Versaloon Nano. Ну а я ограничился платой, вставляемой в дешевый пластиковый корпус 57х38х19:

Карта запайки компонентов:

Распиновка разъема:

Разъем может быть обжат под цветной шлейф, так, чтобы цвета совпадали с теми что на картинке. Тогда концы шлейфа можно зацепить на контакты BLS и подключать их по картинке. Однако удобнее сделать шлейф- переходник на 4-х пиновое SWIM-гнездо HU-4 (под штекер WH-4 на плату с целевым контроллером STM8) и HU-5 для SWD.

Конструирование

Плата хоть и двухсторонняя, но достаточно простая в изготовлении. Две, лазерно распечатанные стороны платы на листе фотобумаги (я использую фотобумагу плотностью 120г/м2) сопоставляются на свету и скрепляются степлером. Затем обезжиренный кусочек двухстороннего текстолита аккуратно вставляется в этот конверт, и утюжится при достаточной температуре (чтобы тонер не поплыл и пленка фотобумаги не запекалась важно не перегреть):


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


После травления платы можно начинать сверлить:

  • Для переходных я использовал сверла 0.5мм;
  • для 4х отверстий под светодиоды — 0.7мм;
  • отверстия под разъем BH-10, двух штырьков джампера, двух крепежных отверстий под USB — 1мм;
  • для двух боковых крепежных отверстий — 3 мм

Чтобы не повредить площадки, отверстия лучше надсверливать с одной стороны, а затем досверливать с другой.

После сверления, при помощи обычной наждачной шкурки были сформированы контуры платы:


Лужение платы я выполнил паяльником, смазав плату обычным глицерином. Для запайки переходных хорошо подошла медная жила, изъятая из телефонного провода, обзываемого в народе «лапшой». После запайки можно слегка пройтись шкуркой по заостренным отроскам.


Если вы хотите сделать корпус для устройства, то самое время этим заняться. Для начала прикладываем плату, как указанно ниже на фото и сверлим поверх существующих обведенные отверстия. Затем переворачиваем эту половинку корпуса и вставляем в нее разъемы.


Вставленные разъемы нужно обвести канцелярским ножом или чем-то подобным. После обведения можно убрать разъемы и прорезать отверстия. Для светодиодов можно просто просверлить 3-х миллиметровые отверстия. Также для крепежных болтов М3 нужно подобрать или изготовить стойки(я отрезал по кусочку толстой изоляции)



После примерки корпуса можно выполнить запайку всех компонентов нижнего слоя, прорезать отверстие для разъема USB и выполнить примерку снова.


Если все подходит, можно запаивать верхний слой и помещать все окончательно в корпус:

Также можно скотчем приклеить небольшую наклейку с подписью пинов разъёма (лучше цветную):

Прошивка программатора

Для прошивки нужен UART интерфейс с компьютером с уровнями TTL. Я использовал вот такой самодельный преобразователь USB-UART. Если же у вас в компьютере есть RS232, то можно обойтись несложным переходником в TTL на каком-нибудь MAX232. А вообще всяких USB-UARTO-в сейчас в продаже очень много и цена на уже готовые преобразователи не превышает 2$.

Прошивка может быть выполнена из Windows с помощью утилиты Flash Loader Demonstrator (она есть в архиве). Пользователям Linux придется запустить виртуальную систему в Virtualbox (в виртуальную систему можно пробросить как преобразователи USB-UART, так и RS232 порт).

Перед началом прошивки прогрмматора возможно понадобится выпаять резистор R20 (который соединяет красный светодиод и линию U1_BL_TX). Мне выполнить прошивку без этого действия не удалось. Хотя подозреваю что это зависит от UART-а.

Итак последовательность действий по прошивке:

1. Установить на джампер Boot

2. Подключить землю, RX, TX UART-a. RX преобразователя нужно подключить к TX на разъеме программатора, а TX преобразователя соответственно к RX программатора. Если есть откуда, подключите питание к пину 3.3В на разъеме программатора (тогда при прошивке программатора можно будет не подключать его к USB). Подключить UART к компьютеру. Если питание к пину 3.3В не подключено, то нужно также подключить программатор к компьютеру, что бы запитать его. Посмотреть какой COMх порт занял ваш UART преобразователь.

3. Запустить Flash Loader Demonstrator. Выбрать COMx порт, остальные настройки оставить как есть:

4. Нажать Next. Если UART подключен правильно, питание подано, то должно появится такое окно:

Если появляется ошибка, то проверьте физический контакт. Опять повторюсь что на этом этапе может помешать светодиод, соединяющей линию TX с землей, по этому его стоит временно отключить выпаяв R20.

5. Нажимаем Next два раза. В следующем окне указываем путь к прошивке firmwareSTLinkV2.J16.S4.bin:

6. Опять нажимаем Next и ожидаем завершения прошивки. После успешного завершения программирования окно должно приобрести такой вид:

7. Отключаем преобразователь и питание с программатора.

8. Теперь самое главное: нужно обновить прошивку, иначе программатор не заработает. Для начала установим драйвер windriverst- link_v2_usbdriver.exe.

9. Подключаем программатор. Когда запустится мастер установки нового оборудования, выбираем «автоматический поиск драйверов».

10. Запускаем upgradeST-LinkUpgrade.exe(папка upgrade обязательно должна быть распакована). В открывшемся окне прожимаем Device Connect, Yes. Должно появится окно Upgrade is successful.

Те кто знаком с восьмибитными контроллерами типа AVR и PIC, наверняка хорошо знают о такой нужной вещи как встроенная EEPROM память. Она позволяет сохранять в нее некоторые данные и потом считывать их после выключения/включения контроллера. Энергонезависимая память одним словом. Перейдя на контроллеры STM32 я с удивлением обнаружил, что такой памяти у них просто нет! Но как потом оказалось, существует аж целых две альтернативы такой памяти. Первая — использовать backup домен. Это не совсем энергонезависимая память, чтоб информация не разрушалась после выключения основного питания, к определенному выводу контроллера должна быть подключена батарейка (вроде тех, которые стоят в материнских платах). Об этом я подробнее расскажу в следующей статье. А сейчас мы рассмотрим второй способ энергонезависимого хранения пользовательских данных — flash память контроллера.

ЦАП в STM32

ЦАП (или DAC по-буржуйски) это АЦП с точностью до наоборот — он преобразовывает некоторые цифровые данные в их аналоговое представление (читай напряжение). Говоря еще проще — ЦАП позволит нам относительно плавно изменять напряжение на ноге контроллера. Области практического применения: генерация звука, и сигналов произвольной формы. Можно прикрутить к контроллеру SD карточку и сделать wav плеер. Производительности контроллера точно хватит, ибо я делал такое даже на AVR, а у них кстати нет ни какого встроенного ЦАПа и я прикручивал внешний. Работать с ЦАПом очень легко, и в этой статейке я попробую рассказать все, что мне известно о ЦАПе в STM32. На картинке ниже — генерация синуса при помощи ЦАПа:

Генерация ШИМ в STM32

В предыдущей статье про базовые таймеры , мы в очередной раз мигали светодиодами, а в этот раз пойдем гораздо дальше и попробуем вкурить как заставить контроллер STM32 генерировать ШИМ. Для этого нам придётся использовать один из таймеров общего назначения, ведь именно у них есть всё что для этого нужно. Весь остальной функционал этих таймеров конечно впечатляет, но в моей практике он пока не пригодился. Хотя возможно, что в будущем мне пригодятся такие полезные фичи как функция подсчёта внешних импульсов и возможность аппаратно обрабатывать повороты энкодера. Но пока займемся ШИМом. Есть вот такая схема из контроллера, трех резисторов и RGB светодиода которым мы будем управлять. Управление заключается в том, чтоб плавно зажечь и погасить каждый цвет. Разумеется можно взять три разных светодиода если нет RGB.

Basic таймеры в STM32

Таймеры — это такая периферия контроллера STM32 позволяющая нам очень точно отсчитывать интервалы времени. Это пожалуй одна из самых важных и наиболее используемых функций, однако есть и другие. Следует начать с того, что в контроллерах STM32 существуют таймеры разной степени крутости. Самые простые это Basic timers . Они хороши тем, что очень просто настраиваются и управляются при помощи минимума регистров. Все что они умеют это отсчитывать временные интервалы и генерировать прерывания когда таймер дотикает до заданного значения. Следующая группа (general-purpose timers ) гораздо круче первой, они умеют генерировать ШИМ, умеют считать испульсы поступающие на определённые ножки, можно подключать энкодер итд. И самый крутой таймер это advanced-control timer , думаю что его я использовать не буду еще очень долго так как мне пока без надобности управлять трехфазным электродвигателем. Начать знакомство с таймерами следует с чего попроще, я решил взяться за Basic таймеры. Задача которую я себе поставил: Заставить таймер генерить прерывания каждую секунду.

Прерывания в STM32

Загрузить USB-загрузчик STM32F103C8T6 | Запрограммируйте STM32 через порт USB

В этом уроке я покажу вам, как загрузить загрузчик USB на плату Blue Pill STM32F103C8T6. Используя USB-загрузчик STM32F103C8T6, вы можете легко запрограммировать Blue Pill Board, просто используя встроенный USB-порт без необходимости использования какого-либо внешнего оборудования.

[адсенс1]

Важное примечание: Я настоятельно рекомендую вам ознакомиться с « НАЧАЛО РАБОТЫ С STM32F103C8T6 », прежде чем продолжить, так как есть много конфигураций, настроек, подключений и пояснений, которые очень важны.

Outline

Введение

Одна вещь, которая делает Arduino UNO (или любую плату Arduino в этом отношении) особенной, — это простота программирования. Просто подключите Arduino к компьютеру и загрузите программу с помощью Arduino IDE. Это так просто (при условии, что у вас есть правильные драйверы и выбран правильный USB-порт).

Чего нельзя сказать о плате STM32F103C8T6 Blue Pill Board. Если вы помните в « Начало работы с STM32F103C8T6 », я показал вам, как загрузить программу на плату Generic STM32F103C8T6 с помощью внешнего адаптера USB-Serial.

Загрузить программу с помощью адаптера FTDI не так уж и сложно, но каждый раз, когда вы хотите загрузить программу, вы должны переключаться в режим программирования, а для нормальной работы вам необходимо переключаться обратно в рабочий режим (переключение контакты BOOT0 между HIGH и LOW).

Было бы проще, если бы мы могли просто использовать встроенный порт microUSB на плате Blue Pill для загрузки программы. USB-загрузчик STM32F103C8T6 предоставляет такое решение, при котором вы можете просто подключить Blue Pill к компьютеру через USB-порт и загрузить программу. В качестве дополнительного преимущества вам не нужно возиться с контактами BOOT, поскольку вы можете оставить его в рабочем режиме.

[адсенс2]

Необходимые компоненты

  • STM32F103C8T6 Blue Pill Board
  • Преобразователь USB в последовательный порт (например, программатор FTDI)
  • Соединительные провода
  • Резистор 1,8 кОм (дополнительно)
  • ПК

Принципиальная схема

Соединения между STM32 Blue Pill и преобразователем USB в последовательный интерфейс аналогичны тем, которые я описал в Руководстве по началу работы. Ниже приведено эталонное изображение для соединений.

Загрузка USB-загрузчика STM32F103C8T6

Чтобы загрузить программу через USB-порт на Blue Pill, на MCU должен быть установлен USB-загрузчик. Благодаря вкладу LeafLabs (Maple Bootloader) и rogerclarkmelbourne, репозиторий загрузчиков доступен для ряда плат. Исходный код доступен на GitHub по ссылке this .

Чтобы упростить задачу, репозиторий состоит из загружаемых двоичных файлов загрузчиков (подробнее об этом я расскажу в следующих разделах).

Выполнение подключений

Первым шагом является подключение платы STM32 Blue Pill к адаптеру USB-Serial, как показано на рисунке выше. Кроме того, на выводах BOOT0 установлен ВЫСОКИЙ уровень, т. е. плата переведена в режим программирования.

Как только это будет сделано, вы можете подключить преобразователь USB к последовательному порту к ПК и проверить наличие COM-порта.

Загрузите двоичный файл загрузчика

Как упоминалось ранее, этот репозиторий состоит из разных двоичных файлов для разных типов плат STM32. Все эти двоичные файлы классифицируются на основе подключения светодиода USER. Например, мы знаем, что пользовательский светодиод на вашей Blue Pill подключен к контакту 13 порта C, то есть к PC13.

Следовательно, двоичный файл имеет соответствующее имя « generic_boot20_pc13.bin ». Для всех общих плат на базе Blue Pill STM32F103C8T6 вы можете использовать этот двоичный файл. Вы можете скачать бинарный файл с по этой ссылке GitHub.

Если у вас другая/нестандартная плата. Затем загрузите соответствующий двоичный файл из списка двоичных файлов, представленных в репозитории GitHub.

Загрузка двоичного файла загрузчика USB в STM32

После того, как аппаратные соединения выполнены и вы загрузили необходимый двоичный файл, вы готовы загрузить загрузчик USB STM32F103C8T6 в MCU. Для этого вы можете использовать STM32CubeProgrammer.

Если вы помните в руководстве « Начало работы с STM32F103C8T6 », я загрузил программное обеспечение STM32CubeProgrammer с официального сайта STMicroelectronics. Если вы следовали этому руководству, то вы уже загрузили это программное обеспечение, которое в моем случае можно найти в папке «C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin». Перейдите в аналогичное место на вашем ПК и откройте файл «STM32CubeProgrammer. exe».

В правой части страницы выберите «UART» в качестве режима связи и выберите соответствующий COM-порт. В моем случае это COM4. Оставьте все остальное с настройками по умолчанию и нажмите «Подключиться».

После успешного подключения программа прочитает содержимое флэш-памяти и отобразит его. Затем нажмите на символ со стрелкой загрузки. Это откроет опцию «Стирание и программирование».

Нажмите «Обзор» и найдите ранее загруженный двоичный файл, т. е. файл generic_boot20_pc13.bin. Начальный адрес будет автоматически заполнен «0x08000000». Если нет, введите это значение. Наконец, нажмите «Начать программирование». Программное обеспечение начнет загружать загрузчик USB во флэш-память MCU, и вы можете увидеть журнал ниже.

После загрузки двоичного файла появится сообщение «Загрузка файла завершена». Нажмите «ОК» и, наконец, нажмите «Отключить» в правом верхнем углу. На этом загрузка USB-загрузчика STM32F103C8T6 во флэш-память MCU завершена. На этом этапе вы можете отключить USB-последовательный адаптер от платы Blue Pill, а также переключить контакт BOOT0 обратно в LOW, т.е. в рабочий режим, поскольку вам это не нужно.

Использование ST Flash Loader Tool для загрузки загрузчика USB

Вместо использования программного обеспечения STM32CubeProgrammer вы можете использовать альтернативный инструмент под названием ST Flash Loader. Это также официально предоставлено STMicroelectronics, и вы можете скачать его с по этой ссылке .

Вы должны войти на веб-сайт ST, чтобы загрузить инструмент, и после завершения загрузки извлеките содержимое zip-файла и дважды щелкните файл «flash_loader_demo_v2.8.0.exe». Это установит Flash Loader Tool.

После установки инструмента откройте его из папки «C:\Program Files (x86)\STMicroelectronics\Software\Flash Loader Demo», дважды щелкнув файл «STMFlashLoader Demo.exe».

Прежде чем продолжить, убедитесь, что плата STM32 Blue Pill Board подключена к USB-последовательному программатору через соединения USART, а на выводе BOOT0 установлен ВЫСОКИЙ уровень.

Если вы уже подключили USB-последовательный адаптер к компьютеру, выберите правильный COM-порт из раскрывающегося списка и нажмите «Далее». Если все пойдет хорошо, вы получите сообщение «Цель доступна для чтения. Пожалуйста, нажмите «Далее», чтобы продолжить». Нажмите «Далее».

На следующей странице отображается информация, относящаяся к цели. Нажмите «Далее».

На следующей странице выберите опцию «Загрузить на устройство» и выберите загруженный двоичный файл. После этого начальный адрес будет автоматически заполнен как 8000000.

Когда вы нажмете «Далее», инструмент начнет загрузку двоичного файла загрузчика USB в MCU.

Если все пойдет хорошо, вы получите сообщение «Операция загрузки успешно завершена». Вы можете закрыть инструмент.

Убедитесь, что на контакте BOOT0 установлен НИЗКИЙ уровень, и отключите преобразователь USB в USART от платы STM32.

Программирование STM32F103C8T6 через порт USB

Установка необходимых драйверов

Прежде чем продолжить, вам необходимо загрузить некоторые драйверы. Сначала загрузите инструмент, связанный с STM32 для Arduino, по ссылке по этой ссылке . Нажмите «Клонировать или загрузить» и нажмите «Загрузить ZIP». Извлеките содержимое и переименуйте папку в «Arduino_STM32». Скопируйте эту папку и вставьте ее в каталог «C:\Users\TrailBlazer\Documents\Arduino\hardware».

ПРИМЕЧАНИЕ. В приведенном выше пути «TrailBlazer» — это мое имя пользователя. Замените его своим. Если каталог Arduino\hardware отсутствует, создайте его.

Откройте командную строку с правами администратора и перейдите в каталог «C:\Users\TrailBlazer\Documents\Arduino\hardware\Arduino_STM32\drivers\win». Сначала запустите файл «install_drivers.bat». Это установит драйвер Maple DFU и серийный драйвер Maple.

Кроме того, запустите файл «install_STM_COM_drivers.bat», чтобы установить последовательный драйвер STM.

Настройка Arduino IDE

Если ваша Arduino IDE уже открыта, закройте ее, подключите STM32 Blue Pill к ПК через кабель microUSB и перезапустите IDE. В Arduino IDE перейдите в «Инструменты» и внесите необходимые изменения в селектор платы, как указано в руководстве «Начало работы с STM32F103C8T6».

Но вам нужно изменить параметр «Метод загрузки» на «Maple DFU Bootloader 2.0». Остальные настройки останутся прежними.

Загрузка программы

В качестве примера программы напишите простой Blinky Sketch для STM32F103C8T6 Blue Pill Board. Убедитесь, что светодиод выбран как PC13, и нажмите «Загрузить». Программа будет загружена через USB-порт платы STM32.

Заключение

Здесь показано пошаговое руководство по загрузке USB-загрузчика для STM32F103C8T6 Blue Pill Board и его программированию с использованием встроенного порта microUSB.

Прими синюю таблетку, история закончится

Введение

Эти платы STM32F103 китайского производства ласково известны как Blue Pills, название которых вдохновлено Цитата из фильма «Матрица» «Вы принимаете синюю таблетку, история заканчивается, вы просыпаетесь в своей постели и верите во все, во что хотите верить».

Модуль STM32 Blue Pill невероятно дешев, и его можно заказать примерно за 1,50 фунта стерлингов (2 доллара США), включая почтовые расходы и упаковку. Соединенное Королевство. В основе модуля лежит STM32F103C8T6, процессор ARM Cortex-M3 с тактовой частотой 72 МГц, 64 КБ флэш-памяти и 10 КБ оперативной памяти. БАРАН. В более новых модулях используется усовершенствованный ЦП STM32F103CBT6, который имеет 128 КБ флэш-памяти, 20 КБ ОЗУ и несколько дополнительных встроенных модулей. периферия.

Теоретически можно запрограммировать модуль, просто используя кабель USB Micro B, при условии, что программа загрузчика была предварительно загружена. Но, к сожалению, модули Blue Pill покидают завод без установки какой-либо прошивки загрузчика. Ниже описано как загрузчик Maple, специально написанный для модуля Blue Pill, можно запрограммировать с помощью подходящего ключа. После загрузки встроенный мини-разъем USB можно использовать для простой и удобной загрузки новой прошивки в модуль.

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

  • Переходник USB-TTL
  • Ключ ST-LINK

Программный пакет, выбранный здесь для программирования, является STM32CubeProg, так как его можно загрузить бесплатно после того, как вы сообщите свой адрес электронной почты. После установки вместе с программным обеспечением драйвера это очень просто для использования и без проблем работает с другими утилитами STM32Cube. Загрузите загрузчик клена, generic_boot20_pc13.bin который предназначен для работы с модулем Blue Pill, включая красный светодиод модуля, подключенный к порту ввода-вывода PC13.

Всякий раз, когда модуль Blue Pill программируется с помощью ключа, модуль должен быть установлен в режим PROGRAM путем установки перемычки BOOT0. до 1 (высокий).

Режим работы Программный режим
Ключ USB-TTL для программирования загрузчика

Подключите ключ USB к TTL к Blue Pill, как показано ниже.

Проводка между USB-ключом TTL и Blue Pill
Кабель Переходник USB-TTL Синяя таблетка STM32
Зеленый TXD (контакт 2) А10
Желтый RXD (контакт 3) А9
Черный Земля (контакт 4) Г
Красный +5В (контакт 5)

STM32F103 — это устройство с питанием 3,3 В, однако некоторые выводы рассчитаны на 5 В, в том числе A9. и А10 и так безопасно подключать стандартные 5V TTL-сигналы на эти контакты, не повреждая микроконтроллер.

Примечание. Макетную плату использовать не обязательно, так как соединения можно выполнить непосредственно к контактам на самой Blue Pill.

Вставьте ключ в USB-порт вашего компьютера.

Запустите приложение STMCubeProgrammer. Выберите UART из выпадающего списка и нажмите кнопку «Подключиться». Нажмите на значок «Стирание и программирование», нажмите кнопку «Обзор» и перейдите к месту, где generic_boot20_pc13.bin был сохранен ранее. Чтобы запрограммировать загрузчик, нажмите кнопку «Начать программирование».

По окончании программирования в журнале должна быть запись «Загрузка файла завершена».

Ключ ST-LINK для программирования загрузчика

Подключите ключ ST-LINK к Blue Pill, как показано ниже.

Проводка между ST-LINK Dongle и Blue Pill
Кабель Ключ ST-LINK Синяя таблетка STM32
Оранжевый SWDIO (контакт 2) СВИО
Черный Земля (контакт 4) ЗЕМЛЯ
Коричневый SWCLK (контакт 6) СВКЛК
Красный 3,3 В (контакт 8) 3В3

Примечание. На самом деле макетная плата не требуется, так как соединения выполняются непосредственно с контактами на самой Blue Pill.

Вставьте ключ в USB-порт вашего компьютера.

Запустите приложение STMCubeProgrammer. Выберите ST-LINK из выпадающего списка и нажмите кнопку «Подключиться». Нажмите на Значок «Стирание и программирование», нажмите кнопку «Обзор» и перейдите к месту, где ранее был сохранен файл generic_boot20_pc13.bin . Чтобы запрограммировать загрузчик, нажмите кнопку «Начать программирование».

По окончании программирования в журнале должна быть запись «Загрузка файла завершена».

USB Forever More

Прошивка для модуля Blue Pill теперь может быть написана, а затем скомпилирована с использованием наборов инструментов, таких как Arduino IDE или STM32Cube IDE. и запрограммирован в модуль Blue Pill, используя только порт USB. Arduino IDE идеально подходит для новичков и может использоваться при написании стандартных программ Arduino, таких как эскизные программы. STM32Cube IDE больше подходит для опытных пользователей, предоставляя разработчику возможность написания кода на чистом металле или, если требуется некоторый уровень абстракции, использование библиотеки STM32 HAL.

Помните, что когда модуль Blue Pill программируется с помощью USB-порта, модуль должен быть установлен в режим OPERATE путем установки параметра BOOT0. перемычка на 0 (низкий уровень).

PEmicro STMicroelectronics STM32 STM32F103CB Программирование, отладка и тестирование флэш-памяти


  1. Информация об устройстве STMicroelectronics STM32F103CB
  2. Загрузить Алгоритмы программирования флэш-памяти PEmicro STM32F103CB
  3. Внутрисхемное программирование (высокая и низкая громкость)
  4. Разработка программного обеспечения и поддержка отладки
  5. Оборудование для отладки/программирования для STM32F103CB
  6. Разработка пользовательских приложений для внутрисхемных испытаний

Внутрисхемное программирование (большие и малые объемы)

Помимо поддержки программирования флэш-памяти в процессе разработки, PEmicro предлагает превосходную поддержку повторяющегося внутрисхемного программирования для устройств ARM Cortex во время производства. Независимо от того, программируются ли небольшие партии вручную нетехническим персоналом или огромное количество продукции производится с помощью автоматизированного оборудования, внутрисхемные программаторы Cyclone от PEmicro идеально подходят для этой работы. Cyclone надежен, недорог, быстр и чрезвычайно прост в использовании. Он может программировать с использованием протоколов JTAG или SWD. Cyclone также включает в себя такие функции, как программирование, проверка, сериализация, устранение ошибок, вычисления CRC, обрезка, безопасность и многое другое.

Программатор Cyclone является автономным устройством и не требует ПК для программирования. Программированием можно управлять нажатием одной кнопки или полностью автоматизировать производственный процесс с помощью нашего автоматизированного API управления. Образы программирования можно загружать в Cyclone через последовательный порт, USB или Ethernet и управлять ими через эти же интерфейсы. Одно нажатие кнопки может начать программирование с четкими индикаторами успеха или неудачи. PEmicro предоставляет программный пакет автоматизированного управления для интеграции программного управления в производственный процесс.

PEmicro предлагает две категории внутрисхемных программаторов, поддерживающих STMicroelectronics STM32F103CB:

  • Cyclone LC � Наши программаторы Cyclone LC — это прочные, надежные и гибкие производственные программаторы, которые могут быть полностью автоматизированы, управляться удаленно и использоваться в автономном режиме.
  • Cyclone FX � Это наши флагманские программаторы, которые добавляют к платформе Cyclone множество высокотехнологичных функций, в том числе молниеносную скорость (что экономит драгоценное время на производственной линии), расширенные функции безопасности, обеспечивающие гибкость с тем, как защитить вашу интеллектуальную собственность, большую внутреннюю память, расширяемую память с помощью SD-карты и уникальные надстройки, такие как сканирование штрих-кода, доступны через USB-хост и порты расширения.

Cyclone Control Suite

Cyclone LC и Cyclone FX включают в себя Cyclone Control Suite, который состоит из трех отдельных инструментов, помогающих пользователю контролировать и автоматизировать процесс программирования. Пользователям Cyclone FX доступны некоторые дополнительные функции, такие как групповое программирование. Пользователи Cyclone LC могут приобрести отдельную лицензию, если им нужен доступ к этим расширенным функциям.

Разработка программного обеспечения и поддержка отладки

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

  • Отладчик GDB в Eclipse — PEmicro предоставляет бесплатный подключаемый модуль для Eclipse, который легко интегрирует аппаратную поддержку PEmicro для многих различных устройств ARM в Eclipse. Плагин включает в себя сервер GDB, поэтому отдельное программное обеспечение не требуется. Поддержка GDB включает флэш-программирование, инициализацию, обрезку, аппаратные точки останова, программные точки останова и многое другое. Поддерживаются Linux и Windows. Плагин GDB Eclipse от PEmicro для STM32F103CB доступен бесплатно!
  • Поддержка коммерческих инструментов — оборудование PEmicro и отладка для этого устройства поддерживаются многими ведущими наборами инструментов, включая: IAR Workbench, EMPROG Thunderbench, комплект для разработки микроконтроллеров Keil и другие. Нажмите, чтобы просмотреть дополнительную информацию о сторонних IDE.

Оборудование для отладки/программирования

PEmicro имеет два основных типа оборудования, которые могут управлять, отлаживать и программировать STM32F103CB: отладочные кабели USB Multilink и автоматические внутрисхемные программаторы Cyclone.

USB Multilinks

Аппаратные кабели USB Multilink предназначены в первую очередь для разработки. PEmicro предлагает недорогой пробник для отладки Multilink ACP, который поддерживает устройства ARM от широкого круга производителей. Для тех, кто также работает с дополнительными 8-/16-/32-разрядными устройствами NXP или STMicroelectronics, мы предлагаем универсальный отладочный зонд Multilink Universal. А для тех, кто ищет значительное увеличение скорости (до 10 раз) или способность Multilink питать цель, мы предлагаем наш флагманский отладочный пробник USB Multilink Universal FX.

Эти высокоскоростные интерфейсы USB представляют собой полнофункциональные и надежные решения для разработки . В дополнение к программному обеспечению для разработки и тестирования, PEmicro предлагает программное обеспечение для флэш-программирования PROG для процессоров ARM Cortex, которое работает в Windows и может использоваться вместе с этими Multilinks для флэш-программирования многих устройств ARM Cortex.

Программаторы Cyclone

Внутрисхемные программаторы Cyclone LC или Cyclone FX от PEmicro можно использовать во время разработки, и они добавят такие возможности, как Ethenet и последовательное подключение, а также возможность переключения целевого питания. Но они тоже прежде всего полноценные программаторы , которые идеально подходят для суровых производственных условий. Они поставляются со всем программным обеспечением и утилитами, необходимыми для быстрого программирования целевых процессоров. Они могут быть интегрированы в автоматизированный процесс или управляться нажатием одной кнопки без использования ПК. Программисты Cyclone FX добавляют к платформе Cyclone множество первоклассных функций, в том числе молниеносную скорость (которая экономит драгоценное время на производственной линии), расширенные функции безопасности, которые дают вам гибкость при защите вашей интеллектуальной собственности, большую внутреннюю память и расширяемое хранилище с помощью SD-карты.

Разработка специального приложения для внутрисхемного тестирования

Подпрограммы библиотеки интерфейса UNIT от PEmicro позволяют пользователю создавать приложения для Windows или Linux, которые могут полностью контролировать работу встроенного процессора STM32F103CB через один из аппаратных интерфейсов PEmicro.

Библиотека интерфейсов UNIT

Приложение для ПК может получать доступ к памяти, периферийным устройствам и другим ресурсам встроенного процессора через порт отладки. Приложения могут использовать эту возможность для выполнения тестов целевого оборудования, расчета данных целевой калибровки, или UNIT может быть просто способом разработки полностью пользовательского приложения, которое управляет целевым устройством в режиме отладки. Преимущество использования режима отладки заключается в том, что процессору не нужно запускать код приложения или даже программировать приложение для ПК, чтобы полностью использовать возможности процессора. Информацию об этом тестовом продукте, поддерживающем STM32F103CB, можно найти на странице продукта UNITACMP. PEmicro также написала информационный документ для экспертов, в котором описывается, как использовать библиотеку UNIT для создания внутрисхемного теста для плат, содержащих устройство, подобное STM32F103CB.

ARM является зарегистрированным товарным знаком ARM Limited или ее дочерних компаний.


© 2022 P&E Microcomputer Systems Inc.
Условия использования веб-сайта и Соглашение о продаже

STM32F103C8T6, 2 флэш-памяти по 64 КБ? — Mecrisp Stellaris Неофициальная документация 1.0

Технически только STM32F103CBT6 содержит 128 КБ флэш-памяти, STM32F103C8T6 имеет только 64 КБ в соответствии со спецификациями устройства STM.

Очень популярная плата Bluepill содержит микроконтроллер с маркировкой «STM32F103C8T6», многие устройства имеют 128 КБ флэш-памяти. Это породило мнение, что STM помещает 128 КБ Flash в каждые STM32F103C8T6.

Но так ли это?

ДА, похоже, что это , читайте дальше…

STM32F103C8T6 #1 с 128kB Flash

Этот Bluepill имеет микроконтроллер с маркировкой «STM32F103C8» и явно работает с бинарным файлом Mecrisp-Stellaris 90kB Forth, доказывая, что он имеет 128kB Flash. Данные взяты из EEVblog. ID чипа неизвестен.

 без рамы. 19112 ок.
без вспышки . -24692 ок.
бесплатно (байт)
FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО:  БЕСПЛАТНО: -24692
RAM.... ВСЕГО ПРЕДУСТАНОВКИ: 20000 ИСПОЛЬЗУЕТСЯ: 888 БЕСПЛАТНО: 19112
 

Сравните плату Olimex P103 с микроконтроллером STM32F103CBT6. MCU показывает 128 КБ, как и ожидалось, и мигает 9Бинарный файл размером 0 КБ с использованием стандартных конфигураций OpenOCD, как и ожидалось.

 stm32id
Координаты Die xy: 107741012
Номер вафли: 72
Lot_num в кодировке ascii [23:0]: 0x00555285 | У Р .
Lot_num в кодировке ascii [55:24]: 0x87237267 | . # р г
Ok.
бесплатно (байт)
FLASH.. ВСЕГО ОТЧЕТНО: 131072 ИСПОЛЬЗОВАНО: 97028 БЕСПЛАТНО: 34044
RAM.... ВСЕГО ПРЕДУСТАНОВКИ: 20000 ИСПОЛЬЗУЕТСЯ: 892 БЕСПЛАТНО: 19108
 

STM32F103C8T6 #2 с указанной флэш-памятью 64 КБ

Эта плата имеет MCU с маркировкой «STM32F103C8» и явно не может прошить двоичный файл 90 КБ (с использованием стандартных конфигураций OpenOCD), что указывает на то, что у нее только 64 КБ флэш-памяти… но так ли это?

У меня есть 10 таких китайских плат lc-mini. Это не Блупиллы, но они очень похожи.

Стандартная конфигурация OpenOCD

Стандартная утилита прошивки OpenOCD считывает указанный чипом размер флэш-памяти 64 КБ и принимает его (как и должно быть).

Ошибка двоичного файла 90 КБ
 %./flash-eb13e308316527be6a8963098c7291d5.sh
Открытый встроенный отладчик 0. 10.0
Под лицензией GNU GPL v2
 ** Программирование начато **
автоматическое стирание включено
Информация: идентификатор устройства = 0x20036410
Информация: размер флэш-памяти = 64 Кбайт.
Предупреждение: для адреса 8010000 не найден флеш-банк
записал 65536 байт из файла ./eb13e308316527be6a8963098c7291d5.bin за 2,032206 с (31,493 КиБ/с)
** Программирование завершено **
** Проверка запущена **
Ошибка: несоответствие контрольной суммы — попытка двоичного сравнения
diff 0 адрес 0x08010000. Был 0xff вместо 0x00
diff 1 адрес 0x08010001. Было 0xff вместо 0x06
...
diff 127 адрес 0x0801007f. Было 0xff вместо 0x06
Больше 128 ошибок, остальные не печатаются.
** Подтвердить не удалось **
вызвана команда выключения
 
62,6 КБ Двоичный файл ПРОШЕЛ
 ./flash-ae9236b921613c07b1967f21ff20ee97.sh
Открытый встроенный отладчик 0.10.0
 ** Программирование начато **
автоматическое стирание включено
Информация: идентификатор устройства = 0x20036410
Информация: размер флэш-памяти = 64 Кбайт. 
записал 63488 байт из файла ./ae9236b921613c07b1967f21ff20ee97.bin за 3,485837 с (17,786 КиБ/с)
** Программирование завершено **
** Проверка запущена **
проверено 62672 байта за 0,919840 с (66,537 КиБ/с)
** Подтверждено ОК **
** Сброс цели **
Информация: JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (производитель: 0x23b (ARM Ltd.), часть: 0xba00, версия: 0x3)
Информация: JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020 (STMicroelectronics), часть: 0x6410, версия: 0x1)
вызвана команда выключения
 
ЧипID
 stm32id
Координаты Die xy: 108003154
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00545267 | Т Р г
Lot_num в кодировке ascii [55:24]: 0x87195634 | . . В 4
бесплатно (байт)
FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО: 62672 БЕСПЛАТНО: 2864
RAM.... ВСЕГО ПРЕДУСТАНОВКА: 20000 ИСПОЛЬЗУЕТСЯ: 880 БЕСПЛАТНО: 19120
 

Получение флэш-памяти размером 128 КБ!

Стандартная утилита перепрошивки OpenOCD считывает указанный размер флэш-памяти чипа и использует его, НО изменение конфигурации, чтобы указать OpeoOCD на ИГНОРИРОВАТЬ указанный размер флэш-памяти чипа и вместо этого использовать 128 КБ, приводит к загрузке двоичного образа 90 КБ!

stm32f1x.

cfg Модификация
 # Размер флэш-памяти будет проверен
установить _FLASHNAME $_CHIPNAME.flash
# флэш-банк $_FLASHNAME stm32f1x 0x08000000 0 0 0 $_TARGETNAME
флэш-банк $_FLASHNAME stm32f1x 0x08000000 0x20000 0 0 $_TARGETNAME
 

Результаты

 ** Начато программирование **
автоматическое стирание включено
Информация: идентификатор устройства = 0x20036410
Информация: игнорирование измеренного значения флэш-памяти, использование сконфигурированного размера банка
Информация: размер флэш-памяти = 128 Кбайт.
записал 91136 байт из файла ./eb13e308316527be6a8963098c7291d5.bin за 4,948380 с (17,986 КиБ/с)
** Программирование завершено **
** Проверка запущена **
проверено  байт за 1,311107 с (67,214 КиБ/с)
** Подтверждено ОК **
** Сброс цели **
Информация: JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (производитель: 0x23b (ARM Ltd.), часть: 0xba00, версия: 0x3)
Информация: JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020 (STMicroelectronics), часть: 0x6410, версия: 0x1)
вызвана команда выключения
 
ChipID

Обратите внимание, что это STM32F103C8T6 # 2, тот же идентификатор, что и выше, который изначально не смог выполнить двоичную флэш-память 90 КБ!

Моя «бесплатная» программа Forth, очевидно, должна быть изменена, чтобы учесть эти выводы 🙂

 stm32id
Координаты Die xy: 108003154
Номер вафли: 80
Lot_num в кодировке ascii [23:0]: 0x00545267 | Т Р г
Lot_num в кодировке ascii [55:24]: 0x87195634 | .  . В 4
Ok.
бесплатно (байт)
FLASH.. ВСЕГО ОТЧЕТНО: 65536 ИСПОЛЬЗОВАНО:  БЕСПЛАТНО: -24692
RAM.... ВСЕГО ПРЕДУСТАНОВКИ: 20000 ИСПОЛЬЗУЕТСЯ: 888 БЕСПЛАТНО: 19112
 

Все 10 из этих STM32F103C8T6 с питанием :ref:`китайские платы lc-mini` успешно записали образ размером 90 КБ, они *все* имеют 129 КБ флэш-памяти.

Спасибо «Бинго»!

My thanks to “Bingo600” from EEVblog for convincing me to try this out 🙂

STM32F103CBT6 Minimum System Board Microcomputer STM32 ARM Core Board

Click to enlarge

₹733.90 (Excluding All Taxes)

  • Модель: STM32F103CBT6
  • Ядро: ЦП ARM 32 Cortex-M3
  • Режим отладки: SWD
  • Рабочая частота 72 МГц.
  • 128 КБ флэш-памяти, 20 КБ SRAM.

STM32F103CBT6 Минимальная системная плата Микрокомпьютер STM32 ARM Core Board количество

Лучший продукт

Сравнить

Добавить в список желаний

Артикул: ST2001DV0167 Категории: Макетные платы, STM Board Теги: Усовершенствованная машина RISC, Микрокомпьютер ARM, STM32, Основная плата STM32 ARM, Основная плата STM32, STM32F103CBT6

  • Описание продукта
  • ИНФОРМАЦИЯ О ТОВАРЕ
  • информация о доставке
  • Перевозка и доставка

Описание продукта

Минимальная системная плата STM32F103CBT6 Микрокомпьютер STM32 ARM Core Board

Это минимальная системная плата STM32F103CBT6 Микрокомпьютер STM32 ARM Core Board. Эта плата представляет собой недорогую минимальную системную плату для разработки микроконтроллера ARM STM32F103C8T6. Этот продукт известен как STM Microcomputer, STM32, ARM, Advanced RISC Machine, STM32F103CBT6, Advanced RISC Machine, ARM Microcomputer, STM32 ARM Core Board, STM32 Core Board, STM32F103CBT6, STM32F103CBT6 Минимальная системная плата Микрокомпьютер, STM32F103CBT6 Maple Mini STM32 ARM Core Board, STM32F103CBT6 Клен Мини.

Знакомство с продуктом

  • Это основной чип, основанный на базовой плате CS32F103CBT6 ARM, имеет следующие характеристики:
  • Плата основана на самой простой схеме микроконтроллера, схеме кристалла 8M и 32768, схеме питания USB.
  • Основная плата разделена на два ряда, ведущих ко всем портам ввода/вывода.
  • С интерфейсом загрузки отладки моделирования SWD, простым и удобным, скорость отладки.
  • С помощью USB-интерфейса Mirco вы можете использовать USB-связь и источник питания, USB-интерфейс, совместимый с обычным интерфейсом зарядного устройства для мобильных телефонов Andrews.
  • Кристалл RTC
  • марки Epson, легкий запуск, более стабильный.
  • С двойным штифтом, но штифт не сваривается по умолчанию, пользователь в соответствии со своими сценариями применения выбирает собственное направление сварки. Если требуется сварка, сообщите об этом владельцу.
  • Keil может быть использован для компиляции, компилятор IAR может быть загружен через процедуры J-Link или USART 1, процедуры владельца и процедуры отладки, есть проблемы, можно проконсультироваться с владельцем.

Описание микросхемы:

  • Деталь №: STM32F103CBT6
  • Тип упаковки: LQFP
  • Количество контактов: 48
  • Ядро: Cortex-M3
  • Рабочая частота: 72 МГц
  • Ресурсы хранения: 128 КБ флэш-памяти, 20 КБ SRAM
  • Ресурсы интерфейса
  • : 2x SPI, 3x USART, 2x I2C, 1x CAN, 37x портов ввода/вывода,
  • Аналого-цифровое преобразование: 2x АЦП (12-разрядный / 16-канальный)
  • Таймеры: 3 общих таймера и 1 расширенный таймер
  • Загрузка отладки: Поддержка интерфейса отладки JTAG/SWD для загрузки, поддержка IAP.
  • RT9193: чип регулятора 3,3 В, максимальный выход 300 мА.

 Описание интерфейса:

  • Интерфейс SWD: поддержка моделирования, загрузки и отладки.
  • USB-интерфейс Mirco: источник питания и USB-связь, не поддерживает загрузку.
  • Интерфейс USART1: USART1 можно использовать для загрузки программы или использовать USART1 для связи.
  • контактный интерфейс MCU: ведет все контакты порта ввода-вывода, легко подключается к периферийным устройствам.
  • Интерфейс ввода и вывода питания 5 В и 3,3 В: обычно используется внешний источник питания или с другими модулями для общей обработки заземления

Характеристики/характеристики:

  • Модель: STM32F103CBT6
  • Ядро: ЦП ARM 32 Cortex-M3
  • Режим отладки: SWD
  • Рабочая частота 72 МГц.
  • 128 КБ флэш-памяти, 20 КБ SRAM.
  • Питание 2,0–3,6 В, ввод/вывод.
  • Сброс (POR/PDR).
  • кварц 4-16 МГц.
  • Бортовой мини-интерфейс USB, вы можете дать питание платы и USB-связь
  • Длина: 54 мм
  • Ширина: 22 мм
  • Вес: 9 г
В комплект входят:
  • Минимальная системная плата STM32F103CBT6 1 микрокомпьютер STM32 ARM Core Board
Спецификация: STM32F103CBT6.pdf
Примечание:
  • Более четкие детали см. в данной Спецификации .
  • Изображения продукта показаны только в иллюстративных целях и могут отличаться от фактического продукта.

ИНФОРМАЦИЯ О ПРОДУКТЕ

Сведения о доставке

Доставка и доставка

Мы делаем все возможное, чтобы добраться до каждого уголка Индии, используя несколько лучших курьерских служб, работающих в стране, таких как FedEx, Delhivery, DTDC, BlueDart, XpressBees, Ecom Express, и т. д. по отзывам для курьера-партнера по месту нахождения заказчика. Некоторые внутренние районы Индии, которые не покрываются этими курьерскими службами, покрываются нами через India-Post. Мы ежедневно прилагаем все усилия, чтобы отправить заказ в тот же день, когда он был заказан, или в течение следующих 24 часов с момента размещения заказа. Большинство заказов, размещенных до 13:00, отправляются и отправляются в тот же день. Заказы размещаются почтой, которая запланирована на отгрузку на следующий день. Такие же усилия прилагаются в течение всей недели, включая будни, а иногда и выходные и праздничные дни. Мы обеспечиваем местный самовывоз (самовывоз для местных клиентов) в будние дни и частично в выходные дни.

Вам также может понравиться…

SEGGER — Эксперты по встраиваемым системам — Загрузки .66eV7.66dV7.66cV7.66bV7.66aV7.66V7.64eV7.64dV7.64cV7.64bV7.64aV7.64V7.62cV7.62bV7.62aV7.62V7.60hV7.60gV7.60fV7.60eV7b.60cV7.60dV7.60dV7.60dV7.60dV7.60dV7.60dV7.60dV7.60 .58eV7.

58dV7.58cV7.58bV7.58aV7.58V7.56dV7.56cV7.56bV7.56aV7.56V7.54dV7.54cV7.54bV7.54aV7.54V7.52dV7.52cV7.52aV7.52aV7.52bV7.52V72.50a .22V7.20bV7.20aV7.20V7.00aV7.00V6.98eV6.98dV6.98cV6.98bV6.98aV6.98V6.96V6.94dV6.94cV6.94bV6.94aV6.94V6.92V6.90aV6.90V6.88cV6.88bV6.88aV6.88V6.86gV6b6cV6.86dV6.86eV6.86eV6.86 86aV6.86V6.84bV6.84aV6.84V6.82gV6.82fV6.82eV6.82dV6.82cV6.82bV6.82aV6.80eV6.80dV6.80cV6.80bV6.80aV6.80V6.72eV6.72dV6.72cV6.72b 70fV6.70eV6.70dV6.70cV6.70bV6.70aV6.70V6.64bV6.64aV6.64V6.62dV6.62cV6.62bV6.62aV6.62V6.60fV6.60eV6.60dV6.60cV6.60bV6.6.56bV6.60aV6.60V6.60 — 46bV6.46aV6.46V6.44iV6.44hV6.44gV6.44fV6.44eV6.44dV6.44cV6.44bV6.44aV6.44V6.42fV6.42eV6.42dV6.42cV6.42bV6.42aV6.42gV6.40bV6.4hV6.4hV6.40 34EV6.34dv6.34cv6.34bv6.34av6.34v6.32iv6.32hv6.32gv6.32fv6.32ev6.32dv6.32cv6.32bv6.32av6.32v6.30kv6.30jv6.30.30 .32av6.32v6.30kv6.30jv6.30.30v6av6.32v6.30kv6.30jv6.30. 30bV6.30aV6.30V6.22gV6.22fV6.22eV6.22dV6.22cV6.22bV6.22aV6.22V6.20iV6.20hV6.20gV6.20fV6.20eV6.20dV6.20cV6.20bV6.20aV6.20V6.18d V6. 18cV6.18bV6.18aV6.18V6.16jV6.16iV6.16hV6.16gV6.16fV6.16eV6.16dV6.16cV6.16bV6.16aV6.16V6.14hV6.14gV6.14fV6.14eV6.14dV6.14bV6.1.14cV6 12jV6.12iV6.12hV6.12gV6.12fV6.12eV6.12dV6.12cV6.12bV6.12aV6.12V6.10nV6.10mV6.10lV6.10kV6.10jV6.10iV6.10gV6.10fV6.10eV6.10dV6.10cV6.10bV6.10aV6.10V6. 00iV6.00hV6.00gV6.00fV6.00eV6.00dV6.00cV6.00bV6.00aV6.00V5.40cV5.40bV5.40V5.12kV5.12jV5.12iV5.12hV5.12gV5.12fV5.5V.12eV5.12cV5.12dV5.12 10uv5.10tv5.10sv5.10rv5.10qv5.10pv5.10ov5.10nv5.10mv5.10lv5.10kv5.10jv5.10iv5.10hv5.10gv5.10fv5.10ev5.10dv5.10cv5.10bv5.10av5.10v5.02lv5.02kv5.02jv5. 02iV5.02hV5.02gV5.02fV5.02eV5.02dV5.02cV5.02bV5.02aV5.02V5.00lV5.00kV5.00jV5.00iV5.00hV5.00gV5.00fV5.00eV5.00dV5.00cV5.09abV5.00bV5.000002 [27.09.2022][20.09.2022][14.09.2022][09.09.2022][31.08.2022][30.08.2022][18.08.2022] [2022-08-18][2022-08-10][2022-08-03][2022-07-28][2022-07-22][2022-07-19][2022-07-14][ 07.07.2022][05.07.2022][28.06.2022][21.06.2022][15.06.2022][30.05.2022][19.05.2022][2022 -05-18][2022-05-10][2022-05-03][2022-04-20][2022-04-08][2022-04-07][2022-04-01][2022- 23-03][08-03-2022][23-02-2022][16-0222][09-02-2022][02-022022][25-01-2022][01-2022 -20][17. 01.2022][07.01.2022][22.12.2021][16.12.2021][14.12.2021][07.12.2021][12.12.2021 02][24-11-2021][16-11-2021][11-11-2021][04-11-2021][29-10-2021][28.10.2021][18.10.2021][11.10.2021][07.10.2021][28.09.2021][20.09.2021][14.09.2021] [2021-09-07][2021-09-01][2021-08-17][2021-08-10][2021-08-03][2021-07-28][2021-07-27][ 08.07.2021][01.07.2021][17.06.2021][09.06.2021][02.06.2021][21.05.2021][07.05.2021][2021 -04-28][2021-04-16][2021-04-08][2021-03-29][2021-03-26][2021-03-16][2021-03-12][2021- 03-05][2021-03-02][2021-02-19][2021-02-12][2021-02-05][2021-01-05][2021-01-02][2021-01-01][2021-01 -08][2020-12-18][2020-12-14][2020-12-11][2020-12-04][2020-11-27][2020-11-18][2020-11- 12][2020-11-06][2020-10-23][2020-10-16][2020-10-09][2020-10-09][2020-10-06][2020-10-02][2020-09-28][2020-09-24][2020-09-21][2020-09-07][2020-09-04] [2020-08-28][2020-08-24][2020-08-21][2020-08-13][2020-07-31][2020-07-23][2020-07-21][ 13.07.2020][26.06.2020][19.06.2020][05.06.2020][29.05.2020][25.05.2020][20.05.2020][2020 -05-15][2020-05-08][2020-05-04][2020-04-30][2020-04-28][2020-04-23][2020-04-08][2020- 17-04][16-04-2020][07-04-2020][03-04-2020][30-03-2020][27-03-2020][20-03-2020][03-2020 -19][2020-03-13][2020-03-02][2020-02-21][2020-02-17][2020-01-31][2020-01-24][2020-01- 20][17 января 2020 года][09 января 2020 года][23. 12.2019][20.12.2019][17.12.2019][16.12.2019][12.12.2019][06.12.2019][25.11.2019] [2019-11-22][2019-11-07][2019-10-31][2019-10-28][2019-10-16][2019-10-15][2019-10-11][ 08.10.2019][02.10.2019][27.09.2019][06.09.2019][26.08.2019][22.08.2019][02.08.2019][2019 -07-30][2019-07-26][2019-07-22][2019-07-12][2019-07-05][2019-06-28][2019-06-14][2019- 13.06.13 [13.06.2019] 07.06.2019 [03.06.2019] [31.05.2019] [27.05.2019] [23.05.2019] [05.05.2019] -17][2019-05-03][2019-04-18][2019-04-12][2019-04-05][2019-03-27][2019-03-22][2019-03-15][2019-03-08][2019-03-01][2019-02-26][2019-02-21][2019-02-15][2019-02-11][2019- 02-05][2019-02-01][2019-01-30][2019-01-22][2018-10-26][2018-10-09][2018-09-26][2018-09 -05][2018-08-30][2018-08-30][2018-08-23][2018-08-13][2018-08-08][2018-08-07][2018-07- 24][2018-07-05][2018-06-15][2018-06-12][2018-06-08][2018-05-28][2018-05-11][2018-05-08 ][30.04.2018][20.04.2018][09.04.2018][29.03.2018][23.03.2018][16.03.2018][12.03.2018] [2018-03-02][2018-02-23][2018-02-16][2018-02-09][2018-02-02][2018-01-31][2018-01-30][ 17. 01.2018][12.01.2018][08.01.2018][14.12.2017][08.12.2017][06.12.2017][28.11.2017][2017 -11-24][2017-11-17][2017-10-27][2017-10-20][2017-10-13][2017-10-06][2017-09-29][26-09-2017][22-09-2017][15-09-2017][08-09-2017][01-09-2017][21-08-2017][2017-08- 18 [11 августа 2017 г.] [03 августа 2017 г.] [24 июля 2017 г.] [21 июля 2017 г.] [14 июля 2017 г.] [10 июля 2017 г.] [03 июля 2017 г.] ][27.06.2017][21.06.2017][16.06.2017][09.06.2017][06.06.2017][02.06.2017][10.05.2017] [2017-05-09][2017-05-04][2017-04-27][2017-04-19][2017-03-31][2017-03-09][2017-02-27][ 23.02.2017][15.02.2017][03.02.2017][01.02.2017][27.01.2017][13.01.2017][06.01.2017][2016 -12-21][2016-12-16][2016-12-05][2016-12-02][2016-11-25][2016-11-18][2016-11-10][2016- 07.11.][2016-11-04][2016-10-31][2016-10-25][2016-10-19][17.10.2016][14.10.2016][06.10.2016][28.09.2016][26.09.2016][19.09.2016][14.09.2016] [2016-09-02][2016-09-01][2016-08-17][2016-08-11][2016-08-04][2016-07-29][2016-07-28][ 27.07.2016][25.07.2016][22.07.2016][13.07.2016][12.

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

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