Stm32 cube programmer как прошить
Плата Blue Pill STM32F103C8T6 ARM®32-bit Cortex®-M3 CPU Core Плата Blue Pill STM32F103C8T6 ARM®32-bit Cortex®-M3 CPU Core
По факту получается, что базовая плата Blue Pill с чипом STM32F103C8T6 может быть приобретена менее чем за 2$ у друзей из поднебесной . К этому комплекту еще необходим программатор ST-Link V2, и как и для всего остального на него существует максимально дешевая китайская копия . Программатор понадобиться в первую очередь для записи программ и внутрисхемной отладки по интерфейсу JTAG с поддержкой, разработанного ARM протокола SWD (Serial Wire Debug).
Кроме использования ST-Link существует возможность записывать программы через выводы A9, A10 платы (ножки 30, 31 USART1 микроконтроллера), для этого понадобиться преобразователь USB-UART типа FTDI FT232RL или подобный.
Но, так как этот способ не полнофункциональный с точки зрения внутрисхемной отладки, в дальнейшем речь пойдет о прошивке именно через программатор ST-Link. Это развяжет нам руки в использовании всего функционала среды разработки. Подключение показано ниже, тут все просто — надо соединить соответствующие выводы: GND→GND; CLK→SWCLK; DIO→SWDIO; 3.3→3.3V
Подсоединение платы Blue Pill к программатору ST-Link Подсоединение платы Blue Pill к программатору ST-LinkПрежде чем начать предметно разбирать Cube IDE я приведу составленную мной таблицу сравнения характеристик микроконтроллеров от различных базовых плат Arduino c STM32F103C8.
Таблица сравнения некоторых базовых МК AVR с STM32F103 Таблица сравнения некоторых базовых МК AVR с STM32F103Во многом именно эти числа и побудили меня на изучение гораздо более производительной и функциональной платформы.
Итак, для успешного начала работы нам необходимо скачать установочный файл с официальной страницы CubeIDE на сайте ST. Для скачивания доступно несколько вариантов под Linux, macOS и Windows. Конкретно я загружал и устанавливал под форточку, но полагаю интерфейсы программы аналогичны для всех операционных систем.
На момент написания статьи доступна версия программы 1.3.0, что может нам говорить о том, что некоторые детские болезни ПО уже удалось преодолеть. Это к тому, что CubeIDE сравнительно новая программа, анонсированная в 2019 г., и поэтому у сообщества STM-щиков, естественно, есть настороженность по поводу наличия в ней багов и недоработок.
Кстати, после установки программа предложила себя обновить и после моего согласия версия получилась уже 1.3.1. И хотя я еще не дошел до чтения истории ревизий, могу предположить, что в данном случае это можно считать положительным моментом.
Итак, для создания нового проекта нам потребуется пройти по основному меню: File→New→STM32 Project
После этого мы попадем в меню выбора микроконтроллера и тут наиболее быстрый способ — это написать в строке поиска нужный нам чип, в данном случае STM32F103C8. После того как среда разработки найдет его, в окне появится краткое описание и некоторые параметры его производительности и наличие внутренних модулей.
После нажатия на Next появиться окно с возможностью присвоить название, выбрать рабочий путь проекта, а так же выбрать опции проекта. Для первых шагов пункты опций можно оставить по умолчанию.
Далее IDE может спросить нас об открытии кодогенератора STM32CubeMX, возражать не имеет смысла, он в последствии будет нашим лучшим помощником.
И после этого будет создан наш первый проект, окно будет выглядеть примерно так, и главную площадь будет занимать собственно наш программируемый чип. Графическое представление именно то, что мне особенно понравилось в программировании STM-ок через эту среду.
Первым делом, нам нужно объяснить МК откуда им будет получено тактирование во время работы. На платах Blue Pill установлен кварцевый резонатор с частотой 8 MHz, он уже подключен к выводам PD0, PD1. Чтобы обозначить это для IDE, в разделе System Core заходим в RCC (Reset and clock conrol) выбираем высокоскоростное тактирование (HSE) и далее кварцевый резонатор. После этого соответствующие ноги МК будут подсвечены зеленым с указанием их назначения.
Настройка регистра RCC на внешний кварцевый резонатор. Настройка регистра RCC на внешний кварцевый резонатор.В микроконтроллере STM32F103 есть блок фазовой автоподстройки частоты (PLL) он служит для создания основной частоты работы микропроцессора путем умножения частоты внешнего или внутреннего источника тактирования на программно определяемый множитель.
Для завершения настройки нам необходимо проверить во вкладке Clock Configuration, что частота HSE установлена в 8 MHz, а частота работы МК составляет 72 MHz.
Для первого нашего проекта мы по классике помигаем установленным на плате светодиодом. Он подключен к выводу PC13. Для его настройки правой кнопкой по выводу выберем GPIO_Output (вывод общего назначения_выход). В разделе настройки GPIO присвоим пользовательское название вывода (User Label) как LED13. В таблице конфигурации GPIO проверяем внесенные изменения.
Теперь дадим команду кодогенератору сформировать файлы проекта на основании тех настроек, что мы сделали.
После этого мы уже можем писать свою программу в файле main.c. Там будут вставлены функции для настройки выводов и тактирования:
Теперь в файле main.c находим функцию main(void) и бесконечный цикл в ней while (1). Это и есть место для нашей первой программы.
STM32CubeProgrammer CLI
Подготовка к работе
Примечание. Чтобы запустить интерфейс командной строки в macOS, вам нужно вызвать STM32CubeProgrammer.app/Contents/MacOs/bin/STM32_Programmer_CLI.
Подробное описание интерфейса пользователя и команд STM32CubeProgrammer можно найти в руководстве пользователя UM2237 [3].
В общем случае алгоритм обновления стека будет следующим:
- устанавливаем связь с целевым микроконтроллером по выбранному интерфейсу;
- считываем текущую версию FUS;
- если есть необходимость – обновляем версию FUS до актуальной;
- используя команды FUS, обновляем прошивку стека.
Подключение к целевому контроллеру
Для того чтобы определить, какие коммуникационные интерфейсы в настоящий момент подключены к компьютеру, полезно выполнить STM32_Programmer_CLI.exe с командой «-l.» Команда отобразит все интерфейсы, потенциально пригодные для взаимодействия с микроконтроллерами STM32. На рисунке 1 показан пример вывода команды:
Рис. 1. STM32_Programmer_CLI, список портов
Из примера видно, что в настоящий момент к компьютеру подключен микроконтроллер в режиме DFU (порт USB1) и программатор ST-LINK.
В данной статье мы будем использовать два режима работы: встроенный загрузчик DFU и программатор ST-LINK. В первом случае мы должны указать порт «USB1», во втором – «SWD».
На рисунке 2 показан пример вывода команды для STM32WB55, подключенного через USB в режиме DFU:
Рис. 2. STM32_Programmer_CLI. Подключение к DFU по USB
Выполнение команды подтверждает отсутствие аппаратных проблем. На экран выводятся версия DFU, параметры подключения и целевого микроконтроллера.
При подключении через ST-LINK дополнительно выводятся параметры программатора (рисунок 3).
Рис. 3. STM32_Programmer_CLI. Подключение через SWD
Определение версии FUS
Первая ячейка SRAM2 содержит адрес таблицы данных DIT. В этой таблице содержатся сведения о сетевом стеке и FUS: тип, версия, занимаемая память. Полное описание таблицы можно найти в указаниях по применению AN5185 [4]. Версия FUS смещена на 12 байт от начала таблицы, то есть для того, чтобы получить версию FUS, нужно из первых четырех байт памяти SRAM2 (адрес 0x20030000) взять адрес таблицы, прибавить к нему 12 (0xC) и считать непосредственно версию FUS. По умолчанию адрес таблицы – 0x20030024, таким образом, адрес ячейки с версией – 0x20030030.
Подробную карту памяти и список адресов регистров микроконтроллера STM32WB можно найти в руководстве RM0434 [5].
Команда чтения данных из памяти имеет формат:
- <address> – абсолютный адрес;
- <size> – число считываемых байт.
Команда чтения версии FUS примет вид:
Рис. 4. STM32_Programmer_CLI. Чтение версии FUS
На рисунке 4 показан результат чтения версии. Значение 01 01 00 00 нужно интерпретировать как FUS версии 1.1.0.0 – старший байт (биты 24…31) – основная версия. Это значение обновляется при внесении ключевых изменений, когда обратная совместимость нарушена. Биты 26…23 кодируют минорную часть – значение обновляется, если добавлены существенные изменения, но обратная совместимость сохранена. Биты 8…15 кодируют подверсию, это значение обновляется, если внесены несущественные изменения. Наконец, младший байт описывает номер сборки. Как правило, номер сборки в версии опускается.
Однако, поскольку значение DIT не всегда актуализировано, имеет смысл при чтении версии вычитывать всю таблицу либо считать содержимое первых четырех байт, они должны содержать «магическое число» 0xA94656B9 [4], при любом другом значении таблица не верна.
Команда чтения состояния DIT и вывод консоли (рисунок 5) показаны ниже:
Рис. 5. STM32_Programmer_CLI. Чтение статуса DIT
Команда чтения таблицы целиком:
Вывод команды показан на рисунке 6.
Рис. 6. STM32_Programmer_CLI. Чтение DIT
При необходимости обновить данные в таблице можно выполнить два раза команду:
Обновление FUS
В настоящий момент актуальная версия FUS v1.1.0. Обновление до версии v1.1.0 возможно только с v1.0.2, обновление с более ранних версий проводится в два этапа:
- обновление до v1.0.2;
- обновление с v1.0.2 до версии v1.1.0.
Для обновления FUS используется специальная команда «fwupgrade».
Общий формат команды:
Бинарные файлы прошивок сетевого стека и FUS можно получить, установив актуальную версию пакета STM32CubeWB (подробнее о STM32CubeWB в [2]). Файлы расположены в каталоге Projects/STM32WB_Copro_Wireless_Binaries. Файл Release_Notes.html содержит краткие инструкции по загрузке бинарных файлов в память STM32WB, таблицу со списком предоставленных бинарных файлов и адреса, по которым каждый файл должен быть записан в соответствующий микроконтроллер.
Примечание. Использование указанных адресов строго обязательно!
Команда для обновления FUS до версии v1.0.2:
Команда для обновления FUS с версии v1.0.2 до v1.1.0 будет иметь вид:
Примечание. В команде требуется указать полный путь до бинарного файла прошивки.
Загрузка сетевого стека
После того как FUS обновлен до актуального состояния, можно загрузить прошивку сетевого стека. Используется команда «-fwupgrade», указывается путь к файлу прошивки и адрес в памяти:
На рисунке 7 показан пример вывода в консоль команды загрузки.
Примечание. Адрес загрузки бинарного файла должен строго соответствовать указанным в таблице «Release_Notes.html».
Рис. 7. STM32_Programmer_CLI. Загрузка стека
Особенности работы с портом SWD
Как уже говорилось выше, полноценный доступ к функционалу FUS может быть реализован только с помощью сопроцессора CM4F. Однако и с помощью ST-LINK можно загрузить или обновить сетевой стек. В этом случае алгоритм обновления будет выглядеть следующим образом:
- устанавливаем связь с целевым микроконтроллером по SWD-интерфейсу;
- безусловно обновляем FUS до версии v1.0.2. Если текущая версия FUS более старшая, то обновление завершится ошибкой, при этом FUS останется прежним;
- безусловно обновляем FUS до актуальной версии. Если текущая версия FUS уже актуальна, то обновление завершиться ошибкой, при этом FUS останется неповрежденным;
- используя команды FUS, обновляем прошивку стека.
Примечание. Если происходит повторное обновление стека, то пункты 2 и 3 алгоритма можно пропустить.
При подключении по swd используется режим UR (Under Reset), в данном режиме при подключении к целевому микроконтроллеру происходит перехват вектора сброса перед выполнением любых инструкций. Кроме того, должны быть установлены байты настройки (Option Byte) следующим образом:
- nSWboot0 = 0;
- nboot1 = 1;
- nboot0 = 1.
Команда обновления FUS до версии v1.0.2:
Команда обновления FUS до версии v1.1.0:
Команда загрузки сетевого стека:
Примечание. Адрес загрузки стека и FUS должны строго соответствовать указанным в таблице «Release_Notes.html».
Как запрограммировать беспроводной стек в защищенную область памяти STM32WB55
Подробная пошаговая инструкция по программированию стека, управляющего сетевым протоколом беспроводного двухъядерного микроконтроллера STM32WB производства STMicroelectronics, в защищенную область Flash-памяти и ОЗУ данного МК при помощи STM32CubeProgrammer версии 2.4.0 или выше.
Особенность архитектуры микроконтроллеров STM32WB подразумевает наличие защищенной области во Flash-памяти и ОЗУ для работы сетевого сопроцессора Cortex®-M0+ (далее CM0+). Ядро CM0+ управляет приемопередатчиком и выполняет программный стек сетевого протокола. Подробнее о работе системы STM32WB можно почитать в предыдущих статьях автора: «Отладочная плата P-NUCLEO-WB55 для STM32WB55: возможности и особенности» [1] и «Как создать прототип BLE-приложения на STM32WB с помощью STM32CubeWB» [2]. В данной статье мы рассмотрим способы обновления прошивки сетевого стека.
Механизм обновления стека. Сервис FUS
Обновить исполняемый код CM0+ может только специальный сервис FUS (Firmware Upgrade Services). Этот сервис – часть встроенного в микроконтроллер программного обеспечения, которое размещается в защищенной части Flash-памяти. FUS исполняется сопроцессором CM0+ и может быть активирован программно пользовательским сопроцессором Cortex®-M4 (далее CM4F) либо с помощью команд встроенного загрузчика, например, DFU (который также выполняется на CM4F). Бинарный файл FUS предоставляется компанией STMicroelectronics, имеет цифровую подпись и не может быть модифицирован пользователем.
Сервис FUS гарантирует, что в качестве сетевого стека будут использоваться только проверенные, зашифрованные и подписанные STMicroelectronics прошивки. Если это необходимо, FUS позволяет производителю оборудования на базе STM32WB сделать свою дополнительную подпись.
Задачи FUS:
- установка, обновление или удаление беспроводного стека сопроцессора CM0+;
- обновление самого себя;
- управление ключом аутентификации пользователя. Эта возможность потребуется, если разработчик пожелает добавить цифровые подписи для своих прошивок;
- взаимодействие с сопроцессором CM4F (программа пользователя или бутлоадер).
Сведения об установленном FUS и сетевом стеке хранятся в специальной таблице (Device Info Table, далее – DIT), расположенной в SRAM2a. Нужно понимать, что SRAM2a – это оперативная память, и значения, содержащиеся в ней, должны обновляться каждый раз при включении микроконтроллера. SRAM2a – это защищенная область, только CM0+ имеет возможность делать в ней записи.
Для того чтобы в DIT появились актуальные данные, должен быть запущен FUS. Рассмотрим два случая:
Используя DIT, можно контролировать версию и статус FUS и сетевого стека.
Графический режим STM32CubeProgrammer
В программе ST32CubeProgrammer, начиная с версии 2.4.0, добавлена возможность работы с FUS и обновления сетевого стека в графическом режиме.
Утилита STM32CubeProgrammer по своей сути есть графическая надстройка над командным интерфейсом STM32_Programmer_CLI, поэтому алгоритм и принципы работы с FUS принципиально не отличается от рассмотренных в предыдущей главе.
Подключение по USB через DFU
Запускаем STM32CubeProgrammer, выбираем интерфейс USB, активируем соединение кнопкой «Connect» (рисунок 8).
Рис. 8. STM32CubeProgrammer. Подключение USB DFU
Переходим в раздел «Firmware Upgrade Services» (рисунок 9).
Рис. 9. STM32CubeProgrammer. Переход в раздел «Firmware Upgrade Services»
В данном разделе собраны опции для работы с FUS. Кнопка «Read FUS State» прочитает состояние и версию FUS, кнопка «Firmware delete» удалит сетевой стек (рисунок 10).
Рис. 10. STM32CubeProgrammer. Раздел «Firmware Upgrade Services»
Обновление FUS и сетевого стека выполняется в области «Firmware Upgrade». Кнопкой «Browse» выбирается нужный файл прошивки, в поле «Start address» нужно внести целевой адрес в памяти микроконтроллера. Адрес загрузки бинарного файла должен строго соответствовать указанному в таблице «Release_Notes.html». Для запуска обновления следует нажать кнопку «Firmware Upgrade» (рисунок 10).
Рис. 11. STM32CubeProgrammer. Завершение загрузки стека
Особенность работы с ST-LINK
Если используется программатор, в STM32CubeProgrammer при подключении к целевому микроконтроллеру следует выбрать интерфейс ST-LINK и нажать кнопку «Connect», как показано на рисунке 12.
Рис. 12. STM32CubeProgrammer. Подключение по SWD
В связи с ограничением swd по работе с FUS часть кнопок в разделе «Firmware Upgrade Services» будет неактивна (рисунок 13), однако обновить или установить сетевой стек возможно, для этого нужно следовать алгоритму, описанному в разделе «Особенности работы с портом SWD».
Рис. 13. STM32CubeProgrammer. Ограниченный функционал «Firmware Upgrade Services»
STM32 fast start. Часть 1 ПО, материалы, Cube MX
В последнее время все чаще сталкиваюсь с холиварами на тему Cube MX и HAL, применительно к контроллерам STM32.
С одной стороны — стоят защитники, которым нравится удобство конфигурирования и читаемость кода.
С другой — приверженцы писать все руками, которым важна скорость работы и бережное использование ресурсов.
Для того, чтобы расставить все точки над i — попробуем написать «Hello world» тремя наиболее часто используемыми путями CMSIS, LL, HAL. Оценим затраты (ресурсы контроллера, объем исполняемого файла, и конечно же время работы разработчика).
Статья будет состоять из нескольких частей:
STM32 fast start. Часть 1 ПО, материалы, Cube MX.
STM32 fast start. Часть 2 Hello World на HAL, настройка отладки в Atollic TrueSTUDIO
STM32 fast start. Часть 3 Hello World на LL
STM32 fast start. Часть 4 Hello World на CMSIS
STM32 fast start. Часть 5 Подведение итогов, сравнение HAL, LL, CMSIS.
Сначала давайте определимся с тем, что же мы собственно будем программировать, то есть найдем подходящее железо.
Идеальным вариантом будет бюджетная плата на STM32F103C8T6 микроконтроллере.
Данную плату можно найти на всем известном сайте по цене от 100 российских рублей.
Искать по ключевым словам: STM32F103C8T6 ARM STM32 Minimum
Для того, чтобы залить прошивку и поиграть с отладкой — так же потребуется программатор
Для начала, да и для дальнейшего использования идеально подойдет китайский клон программатора ST-LINK V2.
Купить можно на том же сайте по цене от 120 российских рублей.
Искать по ключевым словам ST LINK Stlink ST 252dLink V2 Mini STM8 STM32:
Для разработки ПО под STM32 можно использовать различные IDE.
Самые популярные — IAR, Keil, Coocox (Eclipse).
Мы же пойдем по пути, который с недавних пор абсолютно бесплатно и в полном объеме предоставляет сама ST.
Будем использовать Atollic TrueSTUDIO for STM32 или в простонародии «Толик».
Какие плюсы у данного ПО: абсолютно бесплатно, нет ограничения по размеру кода, есть неплохой отладчик, простая установка и настройка.
Минусы: нет авто дополнения кода.
Доступны версии под windows и linux.
После установки можно не запускать, так как помимо самой IDE нужно еще кое что.
Если все таки запустили — просто закрываем.
Так как TrueSTUDIO — это средство разработки и отладки, хотелось бы не собирать проект руками (подключая требуемые библиотеки и прописывая пути), а получить некий преднастроенный файл, в котором можно без лишних заморочек сразу же писать код.
Для этого применяется программа генератор кода Cube MX или в простонародии «Калокуб».
Данное ПО является первым камнем преткновения в холиварах на чем же писать под STM: на регистрах и CMSIS или на HAL.
Защитники первой идеологии приводят такие аргументы: Cube MX генерирует огромный, ненужный объем кода, который к тому же замедляет работу МК.
Защитники второй — заявляют, что автоматически сгенерированный код сокращает время разработки, позволяя разработчику быстрее переключится к сутевой части устройства (к основной логике), отдав рутинную настройку периферии на откуп специализированному ПО (Cube MX).
Как ни странно — обе эти идеологии правдивы и применимы на практике, но только каждая в своих условиях.
Давайте рассмотрим пару примеров:
Пример №1: Требуется разработать устройство, максимально дешевое, так как планируется производство партиями по 100500 шт ежегодно. Естественно, каждый лишний рубль цены устройства — выльется в сотни тысяч рублей затрат на финальном устройстве. При этом в планируемой разработке есть пара тяжелых расчетов и работа с периферией (ADC, SPI, UART) на максимальных скоростях.
Устройство является полностью автономным продуктом, в дальнейшем планируется минимальные изменения за весь срок производства данного оборудования. Срок разработки до получения готового образца — 1-2 года.
Пример №2: Требуется прототип устройства, который возможно заинтересует заказчика и он закажет 100 шт аналогичных устройств для переоборудования своего объекта. Первая планируемая партия должна быть отгружена заказчику через 2 месяца. Размер первой тестовой партии 10 шт.
Точное ТЗ будет корректироваться в процессе работы над проектом, но известно, что в дальнейшем планируется несколько переработок аппаратной части, под которую необходимо оперативно подстраивать всю прикладную логику.
В первом примере идеальным вариантом будет выбор максимально дешевого контроллера и написание аппаратно зависимого, но оптимального кода, где работа с периферией будет организована через обращение к соответствующим регистрам (CMSIS). Разработчик, который занимается данным проектом — должен обладать хорошими или отличными знаниями периферии конкретного семейства МК. В идеале — при попытке разбудить его ночью — должен сразу же назвать адрес требуемого вектора из таблицы векторов прерываний.
Во втором примере — выбор контроллера обусловлен имеющимся в наличии железом, а так же затратами времени для написания функционала требуемого заказчиком. Поэтому скорость работы и оптимизированность самого ПО отходит на второй план. Времени на ручную инициализацию нет, как нет времени и на проработку аппаратных зависимостей.
В таком случае выбирается контроллер, который можно быстро поставить в производство в текущем регионе, на нем делается инициализация с помощью Cube MX, пишется прикладная логика на HAL и прототип передается заказчику для тестирования. Такой проект может вести любой средний разработчик, который постиг навыки работы с целевым языком программирования. Вникание в тонкости работы периферии — практически не требуются.
Как бы это не печально звучало — в реалиях современной разработки устройств в России — пример №1 встречается все реже, передавая эстафету примеру №2.
К обсуждению примеров №1 и №2 вернемся в самом конце цикла статей, а сейчас продолжим с подготовкой рабочего пространства.
После того, как у нас появился доступ к сайту — скачиваем STM32 Cube MX.
В самом низу страницы есть кнопка выбора версии, нам нужна версия 5.0.0
Драйвер ST-LINK V2
Установка драйвера, прошивальщика и самого Cub’a не вызывают затруднений, просто соглашаемся со всем и жмем далее.
После полной установки необходимого ПО — можем приступать к созданию проекта.
Для этого запустим Cube MX.
В появившемся окне нажмем на кнопку «ACCESS TO MCU SELECTOR».
На нашей целевой плате установлен микроконтроллер STM32F103C8T6.
Введем его название в строке поиска и двойным щелчком выберем единственный найденный вариант.
В этой же таблице видно основную начинку нашего МК (64 килобайт флеша, 20 килобайт оперативы и пр).
Перед нами появился схематически изображенный корпус контроллера с разведенными в разные стороны ножками.
На данном этапе необходимо обязательно выбрать способ подключения отладчика.
Для этого на вкладке Pinout & Configuration в левом меню выбираем пункт SYS а в нем в выпадающем списке под названием «Debug» устанавливаем значение Serial Wire.
При этом краем глаза замечаем, что программа зарезервировала для отладочных целей два пина на мнемосхеме контроллера.
Еще раз вспоминаем, что мы хотим помигать светодиодом на нашей плате.
Для этого необходимо сначала узнать, к какой именно ножке он подключен.
В этом нам поможет схема электрическая принципиальная:
или более красочная и простая для понимания распиновка платы
Искомый светодиод находится на ножке PC13.
Соответственно, необходимо настроить данный вывод для работы в режиме выхода.
- Находим вывод на мнемосхеме
- Нажимаем на него правой кнопкой мыши, из выпадающего меню выбираем пункт «GPIO_Output»
- Переходим в меню GPIO,
- В списке выбираем PC13
- Заполняем таблицу PC13-TAMPER-RTC Configuration в соответствии со скриншотом, особенно нас интересуют параметры GPIO mode и User Label
Продолжаем настройку проекта, переходим к вкладке Clock Configuration.
На самом деле это одна из важнейших вкладок, которая позволяет настроить параметры тактирования периферии, но пока не будем здесь ничего трогать, так как главная цель на данный момент не в этом.
Переходим к вкладке Project Manager, под вкладка Project.
Обязательно заполняем следующие параметры:
- Имя проекта (лучше использовать только латинские буквы)
- Директорию, в которой будет создан проект (так же лучше использовать только латиницу)
- IDE, в которой планируется работа над проектом (мы планируем использовать TrueSTUDIO)
Спускаемся ниже, под вкладка Code Generator.
Здесь обязательно отмечаем опцию Generate peripheral initialization as pair…
Таким образом получим более структурированный проект, в котором для каждого типа периферии имеется своя пара C и H файлов.
Остался последний шаг. Подвкладка Advanced Settings.
При первоначальном запуске возможно потребуется загрузить актуальную версию библиотеки для выбранного семейства МК.
Даем свое согласие на скачивание файлов:
Идем греть чайник или готовить кофе:
После окончания работы кодо-генератора — сразу же открываем его:
Выбираем любую папку, где Atollic будет хранить рабочее пространство:
При успешном открытии — перед нами предстанет главное окно Atollic TrueSTUDIO for STM.
Общая информация нас мало интересует, поэтому сразу перейдем к дереву файлов.
STM32 bootloader DFU mode с использованием CubeMX. Инструкция пошаговая, step by step
Итак, сочинение сего мандригала было сподвигнуто практически полным отсутствием пошаговой инструкции с использованием обычного инструментария предлагаемого STMicroelectronics.
Великое множество обнаруженных в сети bootloader-ов, иногда весьма занятных, к сожалению «заточены» под какой-либо конкретный кристалл.
Предлагаемый материал содержит процедуру использования пакета CubeMX, «загружалки» DfuSeDemo и утилиты подготовки прошивки Dfu file manager, т. е. Мы абстрагируем наши «хотелки» от железки, да простят меня гуру макроассемблера и даташита.
Готовим окружение…
Нам необходимы собственно сам CubeMX, загружалка DfuSeDemo+Dfu file manager, лежат в одном пекете, STM32 ST-LINK Utility, все изыскиваем на сайте STMicroelectronics совершенно бесплатно.
Наша подопытная жлезка с чипом STM32F103C8T6 от дядюшки Ляо
и программатор ST-Link оттуда же.
Ну и ваша любимая IDE, в данном конкретном изложении мы используем KEIL, настройки компиляции в других IDE не очень отличаются.
Запускаем CubeMX и выбираем свой кристалл…
Отмечаем свои хотелки…
В данной конкретной задаче активируем устройство USB→Device FS и соответсвенно USB Device→ DownLoad Update Firmware class, и незабываем RCC→High Speed Clock→Cristal/Ceramic Resonator тот что на борту платы.
Далее необходимо выбрать переключалку режима bootloader-a, в данном примере просто задействуем имеющуюся перемычку boot1.
Смотрим схемку и в соответствии с ней boot1 прицеплен к ноге PB2, вот ее и задействуем в режиме GPIO_Input.
Готово, активируем закладку Clock Configuration и запускаем автомат выбора конфигурации.
Прыгаем на закладку Cofiguration…
Выбираем кнопку GPIO…
пишем пользовательскую метку, пусть это будет boot1.
Далее настраиваем проект…
Выбираем Project → Setting…
Выбираем и заполняем….
Соответсвенно выбираем для какого IDE нам Cub сгенерит проект, в нашем случае, MDK-ARM V5.
Закладку Code Generator в данном воплощении оставим без изменений…
Ну собственно и все, запускаем генерацию проекта Project→Generate Code
По окончании Cub предложит сразу запустить вашу IDE… как поступать выбирать вам.
Запускаем компиляцию и сборку и загрузку в кристалл… F7, F8…
Переключаем пины на нашей плате в режим работы и подключаем USB кабель…
Открываем в Windows панель управления→ система→ диспечер устройтв→ USB контроллер. И смотрим список устройств, Windows немого пошуршит и установит драйвер STM Device in DFU Mode (если он уже не стоял).
Итак, драйвер встал и определился, запускаем «загружалку» DfuSeDemo…
Смотрим что у нас поймалось DFU Device и дажды кликаем в поле Select Target …
Внимательно смотрим и дивимся, что флеш вплоть до адреса 0x0800C000 закрыт для записи и записываем этот адрес, он нам понадобится…
К слову, пробовал на STM32F407VE, там память открыта для записи с 0x08000000 т. е. С самого начала… почему, в нашем варианте не так, неясно, да и не копал, где то зарыто, но явно не прописано, не есть комильфо, потому что большой кусок пропадает безхозно… может кто и подскажет где копать…
Итак, «стрижка только начата»…
Нам понадобится только два файла исходников…
Открываем их в IDE и правим- дополняем…
Учитываем, что CubeMX НЕ ТОГАЕТ при перегенерации вставки между USER CODE BEGIN и USER CODE END… там и будем вписывать наши дополнения…
на этом с main.c все…
переходим на в usbd_conf.h и в
приводим к виду…
переходим к usbd_dfu_it.c, тут поболее….
Собственно и все…
Подключаем программатор, перекидываем перемычки в режим программирования, F7, F8 и botloader записан…
Теперь подготовим наше приложение для загрузки посредством bootloder…
Любимое приложение будет моргать светодиодиком…
Готовим и отлаживаем приложение, и меняем в компиляторе и теле программы отдельные места на предмет изменения адреса запуска программы и векторов прерываний…
А именно в KEIL → Configure → Flash Tools
Меняем адрес начала программы…
Говорим чтобы генерировал HEX файл
и меняем адрес таблицы векторов…
собираем программу F7…
полученный HEX преобразуем в dfo файл утилитой Dfu file manager…
указываем наш HEX файл кнопкой S19 or HEX… и жмем Generate…
получаем dfu файл.
Собственно и все готово.
Загрузка в контроллер…
Подключаем нашу подопытную плату с уже загруженным botloader-ом к USB, предварительно установив перемычки в режим DFU Mode.
Можно проконтролировать появлением STM Device in DFU Mode в списке устройст…
запускаем «загружалку».
указываем ей наш dfu файл…
Жмем Upgrade и наблюдаем результат загрузки… для уверенности, жмем проверку.
все удачно… можно запускать…
если ошибка вылезла, значит где-то косяк…
Итак, будем считать что все удачно… переключаем перемыку в режим работы приложения
и наслаждаемся миганием диодика…
…
Уффф. Столько букоффф. Устал копипастить картинки :-)
Читайте также: