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

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

  • автор:

Как «раскирпичить» 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 слов и пять картинок второй части публикации…

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

Как реализовать программный сброс на STM32F4Discovery
Доброго времени суток. Решил я завести через USB в режиме CDC VCP, команду сброса контроллера.

Сброс настроек тактирования
При отладке (SWD,ST-Link) кода (Keil 4.23) на плате дискавери (камень — stm32f100rb) выявил вот.

сброс при совпадении ?
всем привет, немного разобравшись с обработчиками прерываний на stm32f103 (переполнение, совпадение.

Программный UART
Здравствуйте! Из-за отсутствия второго аппаратного UARTa мне нужно реализовать его программным.

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 не будет опубликован.