Какой контакт замкнуть для перезагрузки stm
Перейти к содержимому

Какой контакт замкнуть для перезагрузки stm

  • автор:

Какой контакт замкнуть для перезагрузки stm

DemoN9577 осмотрелся
осмотрелсяСообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза

VADR администратор
администраторСообщения: 3971 Зарегистрирован: 25 июл 2008, 07:12 Имя: Диев Александр Васильевич Страна: Россия город/регион: г. Сегежа, Карелия Благодарил (а): 149 раз Поблагодарили: 216 раз

DemoN9577 осмотрелся
осмотрелсяСообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза

Alex здесь недавно
здесь недавноСообщения: 62 Зарегистрирован: 23 июл 2008, 19:30 Имя: Алексей Филиппов Благодарил (а): 3 раза Поблагодарили: 6 раз

Михайло почётный участник форума
почётный участник форумаСообщения: 3246 Зарегистрирован: 10 ноя 2009, 04:58 Имя: Толмачев Михаил Алексеевич город/регион: г. Чехов, МО Благодарил (а): 3 раза Поблагодарили: 189 раз

Parliament74 завсегдатай
завсегдатайСообщения: 517 Зарегистрирован: 16 ноя 2016, 11:33 Имя: Галкин Максим Владимирович Страна: Россия город/регион: Магнитогорск Благодарил (а): 7 раз Поблагодарили: 129 раз

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

winb освоился
освоилсяСообщения: 248 Зарегистрирован: 31 янв 2017, 08:44 Имя: Маркушин Андрей Геннадьевич Страна: Россия город/регион: Нижегородская обл., Выкса Благодарил (а): 19 раз Поблагодарили: 63 раза

Ryzhij почётный участник форума
почётный участник форумаСообщения: 5030 Зарегистрирован: 07 окт 2011, 09:12 Имя: Гаско Вячеслав Эриевич Страна: Россия город/регион: Рязань Благодарил (а): 335 раз Поблагодарили: 536 раз

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

DemoN9577 осмотрелся
осмотрелсяСообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

Ryzhij почётный участник форума
почётный участник форумаСообщения: 5030 Зарегистрирован: 07 окт 2011, 09:12 Имя: Гаско Вячеслав Эриевич Страна: Россия город/регион: Рязань Благодарил (а): 335 раз Поблагодарили: 536 раз

Jackson администратор
администраторСообщения: 13959 Зарегистрирован: 17 июн 2008, 16:01 Имя: Евгений свет Брониславович Страна: Россия город/регион: Санкт-Петербург Благодарил (а): 403 раза Поблагодарили: 815 раз

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

Jackson администратор
администраторСообщения: 13959 Зарегистрирован: 17 июн 2008, 16:01 Имя: Евгений свет Брониславович Страна: Россия город/регион: Санкт-Петербург Благодарил (а): 403 раза Поблагодарили: 815 раз

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

Как «раскирпичить» 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 — входим в bootloader по кнопке.

Лирическое отступление.

Года 4 назад начались у нас продажи мелких партий устройств, основанных на STM32. Так как на само устройство мы, в виду миниатюрности устройства, не ставили разъём под программирование, то заливать прошивку был решено используя родной bootloader. Но тут опять возникла проблема — как в bootloader входить. Замыкать ножку BOOT при помощи джампера показалось плохой идеей. И тогда была поставлена задача — контроллер должен входить в bootloader по нажатию 1й кнопки.

Отмазки

Статья про небольшое схемотехническое решение, сделанное по принципу «собрать из того что уже есть». Так что строго прошу не судить. Ну к сути.

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

Немножко о том, как это работает:

  1. Открывается транзистор Q1, тем самым замыкая RESET на землю, и перезагружая контроллер.
  2. Через диод D1 заряжается конденсатор C9.

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

Достоинством схемы является то, что теперь мелкие партии девайсов можно отдать прошивать любому человеку, который умеет кликать мышкой. Ибо запустив перед ним DfuSeDemo, и сказав «подключи USB к девайсу, нажми на нём кнопку, нажми кнопку „прошить“ в программе DfuSeDemo» можно оставить его работать без присмотра. Никаких теряющихся джамперов и так далее. А так же можно удалённо помочь заказчику, в том случае если настал «магический пипец» и ничего не работает, попросив его только подключить девайс к компьютеру и нажать на кнопку. Дальше прошивку можно сделать по удалённому доступу.

Явным недостатком является то, что выходить из bootloader’а эта кнопка не позволяет. Так что после прошивки надо выключить и включить девайс (вынуть и вставить USB кабель). Но с этим мы решили смирится.

Ещё отмазки

Есть варианты решений, что бы кнопка работала и как выход из bootloader’а, например добавив логический элемент, или как подсказал уважаемый SiberK , поставить резюк после диода, тогда время нажатия кнопки будет влиять на то, просто ли ребутнётся МК или перепрыгнет в загрузчик. Но нам это было не надо.
Так что если надо — пользуйтесь. И удачи в ваших разработках.

1. Аппаратный сброс

Аппаратный сброс выполняется, как показано на рисунке ниже, просто потяните вывод RESET на низкий уровень, как показано ниже:

2. Программный сброс

Функция программного сброса: NVIC_SystemReset ();

В серии STM32F1XX функция сброса находится в файле core_cm3.h:

В серии STM32F4XX функция сброса находится в файле core_cm4.h:

Он инкапсулирован в библиотеке HAL. В stm32f4xx_hal_cortex.c эффект от вызова двух функций выше и ниже одинаков.

Отключить функцию прерывания: __set_FAULTMASK (1);

По мнению некоторых блоггеров в Интернете, все еще существует задержка между вызовом функции сброса и настоящим сбросом. В течение этого времени микроконтроллер все еще может нормально обрабатывать прерывания и другие программы. Во избежание этой ситуации соответствующие прерывания следует замаскировать. Здесь будут использоваться следующие функции, связанные с маской прерывания;
Можно заметить, что имена этих функций в M3 и M4 совпадают. Определение функций в M3 находится в core_cm3.h, а именно:

В авторитетном руководстве M3 вы можете видеть, что функция этого регистра — запрещать всеМаскируемое прерывание,следующим образом:

подводить итоги

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

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

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