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 вы можете видеть, что функция этого регистра — запрещать всеМаскируемое прерывание,следующим образом: 
подводить итоги
Как правило, если вам нужен мягкий сброс, просто вызовите две указанные выше функции:
Прошивка stm32 через UART

Любой микроконтроллер stm32 можно прошивать через USART_1 и другие интерфейсы, подробно смотрите в AN2606. Для этого в МК есть специальный системный загрузчик, который зашивается в System memory (спец. область памяти) на этапе производства, его нельзя удалить или изменить. Это загрузчик инициализируется путём «подтягивания» пина BOOT_0 к «плюсу», после чего он ожидает поступления прошивки.
Через USART можно загружать любые .bin или .hex файлы.
Описание сделано на примере платы Blue Pill, однако всё сказанное справедливо для любого stm32.

Фирменные платы типа Discovery и Nucleo тоже можно прошивать через USART.
Для работы потребуется USB to UART конвертер…

Если такой штуковины нет, то есть два варианта превращения ардуины в конвертер…
1. Замкнуть RESET на GND (может не прокатить).
2. Загрузить в неё вот такой незамысловатый скетч:
Чтобы проверить работает ли ардуина в качестве конвертера, замкните RX и TX, откройте
и отправьте какие-нибудь символы. Если они вернулись, значит всё работает.
Перед прошивкой необходимо подтянуть пин BOOT0 к «плюсу», это переведёт МК в режим «системного бутлоадера». На описываемой плате это осуществляется перестановкой джампера…

На фирменных платах (Discovery, Nucleo) тоже нужно подтянуть пин BOOT0 к плюсу, но просто так это сделать не получится. Возьмите схему вашей платы и найдите там соответствующие перемычки…
Искать надо что-то вроде этого:

Не помню от какой платы эта схема, но суть такая: в данном случае пин BOOT_0 подтянут к «минусу» через резистор R16 и перемычку SB16. Если убрать перемычку SB16, то пин подтянется к «плюсу» через резистор R17 и можно прошивать. После прошивки надо вернуть всё на место.
Перемычка может выглядеть как резистор.
Bootloader (загрузчик) – это обычная программа, которая в момент старта МК решает, что должно происходить дальше.

Обычный режим, BOOT_0 подтянут к минусу. Как только подаётся питание на плату, сразу же стартует прошитая программа (если она есть конечно).

Режим «системного bootloader’а», BOOT_0 подтянут к плюсу. Системный bootloader ожидает прошивку — можно загружать в МК всё что угодно через USART_1 или через SWD (ST-Link). В более продвинутых камнях можно прошивать и через другие интерфейсы. См. мануал на свой микроконтроллер.
Системный bootloader зашивается в System memory на этапе производства, его нельзя удалить или изменить.

В этом режиме, с помощью программатора, можно заливать прошивку в оперативную память. Это продлевает жизнь Flash-памяти при отладке программ. После обесточивания программа естественно исчезает.
Соединяем конвертер и STM следующим образом…
Конвертер RX <-> PA9 STM
Конвертер TX <-> PA10 STM
Конвертер GND <-> GND STM
… и подключаем конвертер и STM к компьютеру.
Инструкция по прошивке для 
Скачайте архив и распакуйте куда-нибудь. Если хотите, можете взять с сайта ST (в самом низу страницы).
Нажмите Reset на плате. Бывает что на описываемой плате, плохо работает кнопочка, поэтому если МК не сбрасывается (не прошивается), тогда кратковременно замкните пин Reset на «землю».

Перейдите в папку Flash Loader Demonstrator и запустите Flash Loader Demonstrator.exe
Выбираем СОМ-порт конвертера и жмем Next.

… означает, что плата, залочена. Ничего страшного нет, просто снимите защиту кнопкой Remove protection и следом нажмите ОК.

Если выдаёт ещё какие-то ошибки, то либо не нажали Reset, либо что-то с конвертером.
Если светофор даёт зеленый свет, то смело жмите Next.
Жмем Next.
В пункте Download to device указываем путь к нужному .bin или .hex файлу и жмем Next.

Всё готово, верните джампер в исходное положение и нажмите Reset.

Инструкция по прошивке для 
Скачайте архив и распакуйте куда-нибудь.
Из папки соответствующей вашей ОС скопируйте файл stm32flash в домашнюю папку.
Эта утилита есть в репах ubuntu, в других дистрах не знаю, поэтому выкладываю.
Перед прошивкой всегда нажимайте Reset на плате.
В терминале дайте команду:
Название и путь к файлу у вас будет свой. HEX-файлы тоже можно прошивать этой утилитой.
Если будет ругаться на права, тогда дайте команду…
… или запускайте утилиту через sudo .
Защита от записи
Если появилось вот такое сообщение…

… тогда дайте по очереди две команды:
Первая снимает защиту от записи, вторая от чтения.
Если у Вас стоял ардуиновский загрузчик, то он будет затёрт, чтоб его востановить просто залейте описанным выше способом этот файлик. И не забудьте вот про это.
П.С. Все описанные действия можно проделать с помощью фирменной утилиты — STM32CubeProgrammer (Windows®, Linux®, macOS®)
На этом наверно всё.
Всем спасибо 
Статья о том, как из платы Blue Pill сделать программатор.
How to Reset STM32 MCU Programatically?

While the STM32 controller is reset at the power cycle, sometimes it is needed to reset the controller programmatically. This is needed in the process of severe system failure, misconfiguration of internal hardware, or during the firmware update process. So, how can we reset the STM32 Microcontroller programmatically?
The answer to the question on How to Reset the STM32 Microcontroller is the following. The correct function for this is NVIC_SystemReset(). Call this function from any place of code and it will never return, but reset the controller. The alternate function is HAL_NVIC_SystemReset(), just an alias for the above.
Here is the sample code of how to invoke STM32 system reset at a Hard_Fault occasion:
The realization of the function is dependant on the core, so one should look to core_cm0.h — core_cm7.h files for the implementation, if needed.
Какой контакт замкнуть для перезагрузки stm

Здравствуйте! Меня зовут Дмитрий Руднев. В этой публикации я поделюсь своим горьким опытом.
В современной разработке широко используются микроконтроллеры 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. Маленький урок по программатору

Итак, сегодня распишу немного по тому, как программировать ваши микроконтроллеры, из которых вы сделали всевозможные устройства. Не будем же мы только отладочную плату мучать .
Контроллеры 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

Как видите, никаких заморочек нет. На этом думаю всё, если будут вопросы, то пишите в коментах, я добавлю эти нюансы в статью.
Форум АСУТП
DemoN9577 осмотрелся
Сообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза
Перезагрузка ПЛК
Сообщение DemoN9577 » 06 окт 2020, 20:55
VADR администратор
Сообщения: 3971 Зарегистрирован: 25 июл 2008, 07:12 Имя: Диев Александр Васильевич Страна: Россия город/регион: г. Сегежа, Карелия Благодарил (а): 149 раз Поблагодарили: 216 раз
Перезагрузка ПЛК
Сообщение VADR » 06 окт 2020, 21:13
DemoN9577 осмотрелся
Сообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза
Перезагрузка ПЛК
Сообщение DemoN9577 » 06 окт 2020, 21:43
Alex здесь недавно
Сообщения: 62 Зарегистрирован: 23 июл 2008, 19:30 Имя: Алексей Филиппов Благодарил (а): 3 раза Поблагодарили: 6 раз
Перезагрузка ПЛК
Сообщение Alex » 06 окт 2020, 22:30
Михайло почётный участник форума
Сообщения: 3246 Зарегистрирован: 10 ноя 2009, 04:58 Имя: Толмачев Михаил Алексеевич город/регион: г. Чехов, МО Благодарил (а): 3 раза Поблагодарили: 189 раз
Перезагрузка ПЛК
Сообщение Михайло » 07 окт 2020, 06:30
Parliament74 завсегдатай
Сообщения: 517 Зарегистрирован: 16 ноя 2016, 11:33 Имя: Галкин Максим Владимирович Страна: Россия город/регион: Магнитогорск Благодарил (а): 7 раз Поблагодарили: 129 раз
Перезагрузка ПЛК
Осознанное и необходимое решение — это физическая кнопка, подключенная к реле безопасности или safety-входу ПЛК по двум каналам с контролем целостности цепи, например.
А перезагрузка контроллера — это немного о другом ))
Но идея, конечно, интересная ))
Sergy6661 освоился
Сообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз
Перезагрузка ПЛК
Сообщение Sergy6661 » 07 окт 2020, 08:15
winb освоился
Сообщения: 248 Зарегистрирован: 31 янв 2017, 08:44 Имя: Маркушин Андрей Геннадьевич Страна: Россия город/регион: Нижегородская обл., Выкса Благодарил (а): 19 раз Поблагодарили: 63 раза
Перезагрузка ПЛК
Сообщение winb » 07 окт 2020, 08:46
Ryzhij почётный участник форума
Сообщения: 5030 Зарегистрирован: 07 окт 2011, 09:12 Имя: Гаско Вячеслав Эриевич Страна: Россия город/регион: Рязань Благодарил (а): 335 раз Поблагодарили: 536 раз
Перезагрузка ПЛК
Сообщение Ryzhij » 07 окт 2020, 09:03
Т.е. речь должна идти не просто о программировании, а проектировании в целом.
Необходимость перегружать ПЛК в таких ситуациях возникает лишь в отвратительно спроектированных системах.
Отправлено спустя 3 минуты 51 секунду:
Разумеется, можно отличное грамотно увязанное железо запрограммировать спустя рукава, а можно аппаратно слепить такое. что без POPO в чувство не приведёшь, как ни изголяйся.
Отправлено спустя 6 минут 50 секунд:
Sergy6661 освоился
Сообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз
Перезагрузка ПЛК
Сообщение Sergy6661 » 07 окт 2020, 10:50
DemoN9577 осмотрелся
Сообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза
Перезагрузка ПЛК
Сообщение DemoN9577 » 07 окт 2020, 12:51
А каким образом перезагрузка перемещает механизмы в другое положение? Наоборот большинство переменных, хранящихся в temporary memory, теряются и положение становится еще более неопределенным.
Отправлено спустя 13 минут 35 секунд:
Sergy6661 освоился
Сообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз
Перезагрузка ПЛК
Сообщение Sergy6661 » 07 окт 2020, 14:38
Ryzhij почётный участник форума
Сообщения: 5030 Зарегистрирован: 07 окт 2011, 09:12 Имя: Гаско Вячеслав Эриевич Страна: Россия город/регион: Рязань Благодарил (а): 335 раз Поблагодарили: 536 раз
Перезагрузка ПЛК
Сообщение Ryzhij » 07 окт 2020, 15:30
Jackson администратор
Сообщения: 13959 Зарегистрирован: 17 июн 2008, 16:01 Имя: Евгений свет Брониславович Страна: Россия город/регион: Санкт-Петербург Благодарил (а): 403 раза Поблагодарили: 815 раз
Перезагрузка ПЛК
Сообщение Jackson » 09 окт 2020, 10:27
Глупости Вам рассказывают.
При отказе — это вообще отдельная песня, мало ли что отказало, это нештатная работа. Но если отказ изделия не вызывает отказ контроллера, то к контроллеру прикасаться не надо, он должен работать. А если вызывает — паршиво значит система спроектирована или сделана. Единственное, в мануале надо написать что «при таких-то отказах перезагрузите контроллер», но даже этого сделать, я так понимаю, Ваши программисты, не удосужились. Выглядит криво, не должно такого быть.
После аварийного останова перезагружать автоматику не надо, это глупости.
По-моему, криворукие ленивые программисты просто не хотят признавать свою криворкуость и лень. Я б таких гнал далеко и надолго, или пусть переделывают.
[+] вот так надо поступать, получая такие ответы Купил как-то сын директора Opel Astra новую. Через месяц приехал по гарантии к дилеру — текла дверь пассажира от дождя. Внимательный осмотр показал что текут вообще все двери, просто не так заметно. Буквальный ответ дилера — это неустранимая недоработка OPEL, до свидания. Директор, не тормозя, набрал телефон генерального офиса OPEL в Германии и объяснил ситуацию. В течение следующих 24 часов этот дилер был лишен лицензии и начал сворачиваться.
Sergy6661 освоился
Сообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз
Перезагрузка ПЛК
Сообщение Sergy6661 » 09 окт 2020, 15:28
Jackson администратор
Сообщения: 13959 Зарегистрирован: 17 июн 2008, 16:01 Имя: Евгений свет Брониславович Страна: Россия город/регион: Санкт-Петербург Благодарил (а): 403 раза Поблагодарили: 815 раз
Перезагрузка ПЛК
Сообщение Jackson » 09 окт 2020, 16:17
Автору родные программисты это объясняют, так что есть куда.
Они отсылают к безопасности. А по безопасности говорится, что после срабатывания ПАЗ должны быть приняты меры к надёжной блокировке агрегата от последующего запуска — оный должен быть невозможен до разблокировки сработавшего стоп.устройства.
И программисты под это дело не говорят, но имеют в виду, что такой блокировкой является контроллер, который надо перезагрузить. Вот что происходит у автора. По сути это криво написанный софт или недоделанный хард.
Если б делали по уму, то при аварии контроллер просто отключался бы (жестко по питанию), а после разблокировки включался обратно, загружался и ехал дальше. Но этого не сделано, оператор должен сначала сбросить аварию, потом отдельным движением ребутнуть контроллер. Сие есть не фича безопасности, а баг кривых рук, не более того — баг за фичу выдать не получится. А уж чтоб при сбое в самом агрегате упраляющий контроллер в ступор вставал — это точно баг, в фичу его никак не превратить. И поскольку программисты свои (или ближние) — их можно и нужно дожать. А можно и вышестоящим накапать про такой косяк.
Автор норматива просил. Надо поднять любой норматив где упомянут аварийный стоп — там сказано то, что я в начале написал. Я могу на море только ссылки дать — это запросто.
Sergy6661 освоился
Сообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз
