Какой контакт замкнуть для перезагрузки 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й кнопки.
Отмазки
Статья про небольшое схемотехническое решение, сделанное по принципу «собрать из того что уже есть». Так что строго прошу не судить. Ну к сути.
Суть
Как уже указал выше, сделать надо было всё максимально дёшево, и и того что можно достать в ближайших радиодеталях. И тогда родилась вот эта схема:
Немножко о том, как это работает:
- Открывается транзистор Q1, тем самым замыкая RESET на землю, и перезагружая контроллер.
- Через диод 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 вы можете видеть, что функция этого регистра — запрещать всеМаскируемое прерывание,следующим образом: 
подводить итоги
Как правило, если вам нужен мягкий сброс, просто вызовите две указанные выше функции: