STM32 BOOT0: полное руководство по восстановлению и программированию микроконтроллеров

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

Содержание

Режимы загрузки STM32 и назначение вывода BOOT0

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

  • BOOT0 = 0: Загрузка из основной Flash-памяти (нормальный режим работы)
  • BOOT0 = 1, BOOT1 = 0: Загрузка из системной памяти (встроенный загрузчик)
  • BOOT0 = 1, BOOT1 = 1: Загрузка из встроенной SRAM (для отладки)

Правильное подключение BOOT0 очень важно при разработке платы на базе STM32. Рассмотрим основные варианты и их особенности.

Подключение BOOT0 при разработке платы на STM32

При разработке платы на базе STM32 есть несколько вариантов подключения вывода BOOT0:

  1. Прямое подключение к GND через резистор 10 кОм
  2. Подключение к GND через перемычку
  3. Подключение к GND через резистор и к VCC через перемычку

Какой вариант выбрать? Это зависит от задач разработчика и требований к плате.


Прямое подключение BOOT0 к GND

Самый простой вариант — подключить BOOT0 напрямую к земле через резистор 10 кОм. Это обеспечит загрузку из Flash-памяти в нормальном режиме. Однако при этом будет невозможно использовать встроенный загрузчик.

Подключение BOOT0 через перемычку

Более гибкий вариант — использовать перемычку для подключения BOOT0 к GND или VCC. Это позволит при необходимости переключаться между режимами загрузки.

Комбинированное подключение BOOT0

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

Восстановление «закирпиченного» STM32

Иногда в процессе разработки и отладки STM32 может оказаться в состоянии, когда его невозможно запрограммировать через SWD. Что делать в такой ситуации? Есть несколько способов восстановить работоспособность микроконтроллера:

Метод Connect Under Reset

Этот метод позволяет подключиться к STM32 через SWD, даже если на BOOT0 низкий уровень. Алгоритм действий:


  1. Подключите программатор ST-LINK к плате
  2. В программе ST-LINK Utility выберите режим «Connect Under Reset»
  3. Подключитесь к микроконтроллеру и очистите память программ

После этого микроконтроллер должен вернуться в рабочее состояние.

Использование встроенного загрузчика

Если метод Connect Under Reset не помог, можно воспользоваться встроенным загрузчиком STM32:

  1. Подайте высокий уровень на вывод BOOT0
  2. Подключитесь к UART1 микроконтроллера
  3. С помощью программы Flash Loader Demonstrator очистите память программ
  4. Верните BOOT0 в низкий уровень

После этих действий микроконтроллер должен загрузиться в нормальном режиме.

Программирование STM32 через SWD и BOOT0

Многих разработчиков интересует вопрос: можно ли программировать STM32 через SWD, если вывод BOOT0 используется для других целей? Ответ — да, это возможно.

Современные микроконтроллеры STM32 имеют дополнительные биты конфигурации загрузки (nBOOT0, nSWBOOT0), которые позволяют гибко настраивать режим загрузки независимо от состояния вывода BOOT0.


Таким образом, вы можете использовать BOOT0 для подачи ШИМ или других сигналов, и при этом программировать микроконтроллер через SWD как обычно.

Особенности использования BOOT0 в различных сериях STM32

Важно отметить, что конфигурация загрузки может отличаться в разных сериях STM32. Например:

  • В STM32F1 используются только выводы BOOT0 и BOOT1
  • В STM32F4 добавлен бит nBOOT0 в опциональных байтах
  • В STM32G4 используются биты nBOOT0, nBOOT1 и nSWBOOT0

Поэтому при разработке платы необходимо внимательно изучить документацию на конкретную модель микроконтроллера.

Рекомендации по проектированию платы с STM32

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

  1. Предусмотрите возможность подачи как низкого, так и высокого уровня на BOOT0
  2. Используйте подтягивающий резистор 10 кОм для подключения BOOT0 к GND
  3. Добавьте перемычку для подключения BOOT0 к VCC
  4. Выведите сигналы SWD (SWDIO, SWCLK) на отдельный разъем
  5. Предусмотрите возможность подключения к UART1 для использования встроенного загрузчика

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


Заключение: правильное использование BOOT0 — залог успешной разработки на STM32

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

Ключевые моменты, которые следует помнить:

  • BOOT0 определяет режим загрузки STM32
  • Современные серии STM32 имеют дополнительные биты конфигурации загрузки
  • Предусмотрите возможность переключения режимов загрузки на плате
  • При проблемах с программированием используйте методы Connect Under Reset и встроенный загрузчик

Следуя этим рекомендациям, вы сможете создавать надежные и легко отлаживаемые устройства на базе микроконтроллеров STM32.


Как «раскирпичить» STM32 / Хабр

Здравствуйте! Меня зовут Дмитрий Руднев. В этой публикации я поделюсь своим горьким опытом.

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

«экосистема». Для прошивки этих микроконтроллеров и внутрисхемной отладки обычно используют интерфейс Serial Wire (SWD).

В процессе отладки бывает всякое. Не беда, если STM32 после прошивки ведёт себя неадекватно. Обидно, если при этом к нему не удаётся подключиться.

На этом месте не надо впадать в отчаяние, т.к. «убить насмерть» STM32 в процессе программирования непросто, и его работоспособность можно восстановить штатными средствами.

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

Connect Under Reset

Если на входе

BOOT0 обнаружен низкий уровень, системный загрузчик передаёт управление пользовательской программе, находящейся в FLASH-памяти. Если при этом к интерфейсу SWD подключен в режиме «Connect Under Reset» внутрисхемный отладчик, ему удаётся управление перехватить.

Рассмотрим, как это сделать с помощью программы STM32 ST-LINK Utility и программатора ST-LINK/V2-1. Программа была получена с официального сайта ST. Программатор пришёл в составе платы NUCLEO-F446ZE.

Запускаем программу, входим в «Settings»:

В окне «Settings» выбираем режим «Connect Under Reset»:

Подключаемся к нашему «кирпичику»:

Производим очистку памяти программ:

Подключение по

UART1

Очень часто для прошивки STM32 применяются недорогие китайские клоны ST-LINK/V2

. Без аппаратной переделки режим «Connect Under Reset» они не поддерживают. В этом случае стоит попытаться очистить память программ, подключившись к микроконтроллеру по UART.

Если подать на вход BOOT0 высокий уровень, то можно подключиться к микроконтроллеру через интерфейс UART1 с использованием программы Flash Loader Demonstrator. Программу можно получить с официального сайта ST. Преобразователь USB–UART подойдёт любой.

Запускаем программу. Выбираем COM-порт, к которому подключен преобразователь USB–UART:

Убеждаемся, что соединение установлено:

На следующем экране программа показывает области памяти микроконтроллера:

На следующем экране мы должны выбрать действие. Выбираем

Erase – All:

Очистка памяти программ успешно завершена:

На этом месте надо вернуть на вход BOOT0 низкий уровень.

От автора

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

Первая часть публикации повествует о том, как я в самом начале самоизоляции «закирпичил» новенькую оригинальную NUCLEO-F446ZE.

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

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

SWD пропала.

Результаты поиска в сети убедили меня использовать режим «Connect Under Reset». Ничтоже сумняшеся, я подключил вывод NRST микроконтроллера к выводу «Reset» программатора. Не знал я тогда, что этот вывод используется только при работе с STM8.

Сигнал сброса не проходил. Связь по интерфейсу SWD не восстанавливалась. Игры с кнопкой «Reset» на плате результата не давали. В самый раз было начинать читать мануалы.

И метод RTFM сработал! Из раздела «2.3.10 Boot modes» datasheet DS5792 rev13 я узнал про загрузку через UART1. Затем я нашёл информацию о Flash Loader Demonstrator. Восстановить работоспособность STM32F103RET6 с этими инструментами было уже несложно, что и вылилось в 113 слов и пять картинок второй части публикации…

Буду рад, если мой опыт будет кому-то полезен!

Режим загрузки серии STM32 (boot0, boot1)

github


Фактически, блоггер уже запустил stm32 год назад, но из-за слабого языка C и связанных с ним знаний он только что изучил предыдущий периферийный контент из учебника по атому (здесь нет оскорбительного значения для атомов, атом Учебник очень хороший,ФорумВышеуказанных ресурсов также вполне достаточно), и нет систематического понимания stm32. Поскольку в недавнем проекте необходимо использовать stm32F407, я полон решимости углубиться в изучение и настаиваю на том, чтобы полученные знания отражались в сообщениях в блогах, надеясь помочь нуждающимся людям, воодушевлять друг друга и вместе добиваться прогресса.


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

Как видно из официального руководства, поддерживаются три режима загрузки:

modeselectdecription
boot 0boot 1
Основная флеш-память0XНормальный режим, неизбежный выбор для запуска пользовательских программ
Системная память10Запустите загрузчик, макроскопически говоря, эта память предоставляет программу загрузки USB. Мы можем запустить эту программу загрузки, чтобы загрузить программу во FLASH через USB. Обратите внимание, что она предназначена для загрузки во FLASH. Если нам нужно запустить только что загруженную программу, мы должны преобразовать Перейдите в нормальный режим (начните с FLASH), но вы можете разработать схему для реализации загрузки одним нажатием. Смотрите продолжение …
Встроенная SRAM11Этот режим используется для отладки и не сохраняется после выключения питания; уменьшите количество стирания FLASH
  • Загрузка с основной флэш-памяти:

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

  • Загрузка из системной памяти

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

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

Заинтересованные студенты могут ссылаться на блог

https://blog.csdn.net/wukuan_123/article/details/80892925

  • Встроенная SRAM для запуска, используйте SRAM для отладки

https://www.cnblogs.com/alvis-jing/p/3662158.html


Интеллектуальная рекомендация

Итоговый курс дизайн-система управления складом

1.1 Потребности пользователей 1.1.1 Бизнес-требования В настоящее время склад становится все больше и больше, так что рабочая сила больше не компетентна для такого разнообразия управленческих задач. Ч…

Ceph-Dashboard появляется модуль «Dashboard».

Описание неисправности Неисправность показана на рисунке ниже: Результаты результатов сервисов CEPH MGR показаны ниже: Согласно ссылке выше, посетите панель инструментов в браузере, и разлом появляетс. ..

FPGA (1) — два варианта еще один роутер

1. Процесс разработки FPGA 2. Создайте модуль Открыть Quartus -«Создать новый проект -« Новый файл, выберите Verilog HDL -файл -»Модуль записи Модуль 1: Модуль 2: 3. Шаги моделирован…

Комплексные упражнения инструкций Vue

Комплексные упражнения инструкций Vue Отучитесь через простую систему ввода информации о студентахVue инструкция, Реализуйте веб-страницу следующим образом: 1. HTML + VUE часть Во-вторых, CSS-рендерин…

C Обзор языка простых двоичных ввода и вывода структуры данных

C Обзор языка простой ввод и операция вывода ввода и вывода 1: Структура 2: объявление функции 3: Объявление специальной переменной 4: Реализация функции (Примечание. Когда печатные деревья напечатаны…

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

Как прервать процесс преобразования состояния анимации единства

впередОфициальная платформа Unity: https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490789&idx=1&sn=7d3c04698aac50cd0665a09a01a590ac&source=41#wechat_redirect Эта стат. ..

Поток данных TCP Scoket WordCount

Установите NC: yum install nc WordCount…

[Перевод] последовательность семантики сериализации

Ссылка на ссылку:Serialization semantics Оригинал и перевод:…

Zabbix Мониторинг процессора и память Alibaba Cloud RDS

1. Обзор среды Linux Server установлен с Python3, установка одновременноzabbix-agentЗагрузите соответствующую версию сервера. zabbix-server:5.0.3 zabbix-agent:https://cdn.zabbix.com/zabbix/binaries/st…

Обучающие материалы по Linux и другие статьи

Обучающие материалы по Linux и другие статьи    Содержание этого резюме включает: Параметр и использование команды find Введение и использование текстового редактора vim Введение и настройка…

© 2020-2023 All rights reserved by russianblogs.com

Загрузчик

— программирование STM32 и контакт BOOT0

\$\начало группы\$

Я разрабатываю плату STM32H7, которая будет программироваться через SWD.

Мне любопытно, есть ли причина, по которой я должен подключать контакт BOOT0 к GND через резистор, а не напрямую к GND?

Я не буду использовать загрузчик, но может ли случиться так, что я случайно отключу порт отладки с помощью программного обеспечения, а затем больше не смогу программировать MCU через SWD и мне нужно использовать режим загрузчика, поставив BOOT0 на высокий уровень?

  • stm32
  • загрузчик

\$\конечная группа\$

1

\$\начало группы\$

Если вы делаете плату, почему бы не предусмотреть резистор/перемычку для подключения Boot0 к +V и GND? Тогда заполнять только один из них? Оставьте ваши варианты открытыми. Вам не нужен резистор. Я предпочитаю использовать перемычку, а не резистор.

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

\$\конечная группа\$

\$\начало группы\$

Я не буду использовать загрузчик, но может ли случиться так, что я случайно отключу порт отладки с помощью программного обеспечения, а затем больше не смогу программировать MCU через SWD и мне нужно будет использовать режим загрузчика, поставив BOOT0 на высокий уровень?

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

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

\$\конечная группа\$

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

stm32 — Схема — использование BOOT0 на STM32G474

спросил

Изменено 6 месяцев назад

Просмотрено 3к раз

\$\начало группы\$

Я участвую в совместной разработке схемы драйвера двигателя на основе 48-контактного микроконтроллера STM32G474. Я использую таймеры TIM8 для управления ШИМ микросхемы DRV8323RH.

Мой вопрос касается использования контакта BOOT0. Насколько я понимаю вывод BOOT0, когда вывод BOOT0 находится на низком уровне, микроконтроллер STM32G4 загружается из пользовательской флэш-памяти. Когда на выводе BOOT0 высокий уровень, бит nBOOT1 определяет режим загрузки.

Что меня смущает, так это то, что в предыдущем воплощении печатной платы мы привязывали BOOT0 к земле, а запрограммированный STM32G474 мы использовали систему st-link2 через контакты TCK и TMS. В этом воплощении платы мы бы предпочли использовать PB8-BOOT0 для отправки PWM на микросхему драйвера.

Если я программирую с помощью системы st-link2 как и раньше, смогу ли я по-прежнему программировать STM32G4, если я привяжу PB8-BOOT0 к PWM драйвера?

спасибо.

\$\конечная группа\$

\$\начало группы\$

Существует не только один бит nBOOT1 для конфигурации загрузки на устройствах STM32G4.

Существуют также биты nBOOT0 и nSWBOOT0 , которые позволяют использовать различные варианты загрузки, а также описывают использование вывода BOOT0.

Таблица 5 в разделе «2.6.1 Конфигурация загрузки» на стр. 89 Справочного руководства по серии STM32G4 показывает, что существуют такие конфигурации, при которых состояние на Reset вывода BOOT0 не имеет значения (у вас может даже не быть никакого pull- на него).

И, собственно, пин BOOT0 не имеет никакого отношения к программированию MCU с помощью ST-Link.

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

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