Nrst stm32 что это

| Текущее время: Пн фев 05, 2024 03:13:31 |
Часовой пояс: UTC + 3 часа
Запрошенной темы не существует.
Часовой пояс: UTC + 3 часа

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y
Работоспособность сайта проверена в браузерах:
IE8.0, Opera 9.0, Netscape Navigator 7.0, Mozilla Firefox 5.0
Адаптирован для работы при разрешениях экрана от 1280х1024 и выше.
При меньших разрешениях возможно появление горизонтальной прокрутки.
По всем вопросам обращайтесь к Коту: kot@radiokot.ru
©2005-2024
Nrst stm32 что это

| Текущее время: Пн фев 05, 2024 03:13:31 |
Часовой пояс: UTC + 3 часа
Запрошенной темы не существует.
Часовой пояс: UTC + 3 часа

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y
Работоспособность сайта проверена в браузерах:
IE8.0, Opera 9.0, Netscape Navigator 7.0, Mozilla Firefox 5.0
Адаптирован для работы при разрешениях экрана от 1280х1024 и выше.
При меньших разрешениях возможно появление горизонтальной прокрутки.
По всем вопросам обращайтесь к Коту: kot@radiokot.ru
©2005-2024
Как «раскирпичить» 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 слов и пять картинок второй части публикации…
Буду рад, если мой опыт будет кому-то полезен!

- Блог компании RUVDS.com
- Программирование микроконтроллеров
- Электроника для начинающих
STM32
STM32 — семейство 32-битных микроконтроллеров производства STMicroelectronics.
Оборудование
STLINK-V3MINI
STLINK-V3MINI — компактный внутрисхемный программатор и отладчик для STM32.
0483:374e STMicroelectronics STLINK-V3
Имя UART порта: /dev/ttyACM0
Адаптер
Разъёмы
STDC14
┌───────────────────────┐ │ 2 4 6 8 10 12 14 │ │ • • • • • • • │ │ │ │ • • • • • • • │ │ 1 3 5 7 9 11 13 │ └───────── ─────────┘
| № контакта | Назначение |
|---|---|
| 1 | — |
| 2 | |
| 3 | VCC 1) |
| 4 | TMS/SWDIO |
| 5 | GND |
| 6 | TCK/SWCLK |
| 7 | GND |
| 8 | T_JTDO/T_SWO 2) |
| 9 | T_JCLK |
| 10 | T_JTDI/NC 3) |
| 11 | GNDDetect 4) |
| 12 | T_NRST |
| 13 | T_VCP_RX |
| 14 | T_VCP_TX |
ARM20
┌────────────────────────────────┐ │ 2 4 6 8 10 12 14 16 18 20 │ │ • • • • • • • • • • │ │ │ │ • • • • • • • • • • │ │ 1 3 5 7 9 11 13 15 17 19 │ └──────────── ────────────┘
| № контакта | Назначение |
|---|---|
| 1 | VCC |
| 2 | VSUPPLY |
| 3 | nTRST |
| 4 | GND |
| 5 | TDI |
| 6 | GND |
| 7 | TMS/SWDIO |
| 8 | GND |
| 9 | TCK/SWCLK |
| 10 | GND |
| 11 | RTCK 5) |
| 12 | GND |
| 13 | TDO/SWO |
| 14 | GND |
| 15 | nSRST (NRST) |
| 16 | GND |
| 17 | DBGRQ |
| 18 | GND |
| 19 | DBGACK |
| 20 | GND |
Соответствие контактов на разъёмах:
| № контакта | Назначение | |
|---|---|---|
| STDC14 | ARM20 | |
| 3 | 1 | VTref |
| 4 | 7 | TMS/SWDIO |
| 5 | GND | |
| 6 | 9 | TCK/SWCLK |
| 7 | GND | |
| 8 | 13 | TDO/SWO |
| 9 | 11 | T_JCLK / RTCK |
| 10 | 5 | T_JTDI/NC / TDI |
| 11 | GNDDetect 6) | |
| 12 | 15 | NRST |
| 13 | — | RX |
| 14 | — | TX |
STM32MP157A
| Тип | Код | Название | Версия | Дата | Ссылка |
|---|---|---|---|---|---|
| Product Specifications | DS12504 | Arm® dual Cortex®-A7 800 MHz + Cortex®-M4 MPU , 3D GPU , TFT/DSI, 37 comm. interfaces, 29 timers, adv. analog | 6.0 | 2021-05-18 | оригинал |
| Reference Manuals | RM0436 | STM32MP157 advanced Arm®-based 32-bit MPUs | 5.0 | 2021-01-21 | оригинал |
| Application Notes | AN5031 | Getting started with STM32MP151, STM32MP153 and STM32MP157 line hardware development | 3.0 | 2021-01-21 | оригинал |
| AN5275 | USB DFU/USART protocols used in STM32MP1 Series bootloaders | 1.0 | 2019-10-15 | оригинал | |
| AN5168 | STM32MP1 series DDR configuration | 2.0 | 2021-10-19 | оригинал | |
| Programming Manuals | PM0214 | STM32 Cortex®-M4 MCUs and MPUs programming manual | 10.0 | 2020-03-23 | оригинал |
| Errata sheets | ES0438 | STM32MP15xx device errata | 6.0 | 2021-02-25 | оригинал |
Программы
| ST-MCU-FINDER-PC | STM32 and STM8 product finder for desktops |
STM32CubeProgrammer
STM32CubeProgrammer — это официальный инструмент от STMicroelectronics для создания разделов на любом накопителе, доступном на платформе STM32.
После создания STM32CubeProgrammer позволяет записывать и обновлять разделы предварительно созданными двоичными файлами.
Соединение между ПК и платой c STM32 может быть установлено через UART или USB .
Возможно понадобится установить пакет libusb
apt install libusb-1.0-0
После установки нужно добавить правила udev:
#!/bin/sh cd ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules sudo cp *.* /etc/udev/rules.d/
Версия 2.8.0 не работает в Debian GNU/Linux — нужно использовать 2.7.0 или 2.6.0.
STM32CubeMX
STM32CubeMX is a graphical tool that allows a very easy configuration of STM32 microcontrollers and microprocessors, as well as the generation of the corresponding initialization C code
UM1718 User manual. STM32CubeMX for STM32 configuration and initialization C code generation. оригинал
STM32CubeIDE
Integrated Development Environment for STM32.
STM32CubeIDE is an advanced C/C++ development platform with peripheral configuration, code generation, code compilation, and debug features for STM32 microcontrollers and microprocessors. It is based on the Eclipse®/CDT framework and GCC toolchain for the development, and GDB for the debugging. It allows the integration of the hundreds of existing plugins that complete the features of the Eclipse® IDE.
SW4STM32
Это старое решение — используйте STM32CubeIDE
The System Workbench toolchain, called SW4STM32, is a free multi- OS software development environment based on Eclipse, which supports the full range of STM32 microcontrollers and associated boards. The SW4STM32 toolchain may be obtained from the website www.openstm32.org, which includes forums, blogs, and trainings for technical support. Once registered to this site, users will get installation instructions at the Documentation > System Workbench page to proceed with the download of the free toolchain.
Настройка
Дерево устройств
.dts — источник дерева устройств (DTS). Этот формат представляет собой текстовое представление дерева устройств в форме, которая может быть обработана DTC (компилятором дерева устройств) в двоичный файл, ожидаемый программными компонентами: ядром Linux, U-Boot и TF-A.
.dtsi — исходные файлы, которые могут быть включены из файла DTS
.h — файлы заголовков, которые могут быть включены из файлов DTS и DTSI

Процесс построения дерева устройств:
оригинал
Инструмент под названием DTC (Компилятор дерева устройств) позволяет компилировать исходные файлы DTS в двоичный файл.
Для настройки нужно использовать STM32CubeMX.
Готовые файлы удобно редактировать, использую стандартный редактор в Midnight Commander, для этого создан файл подсветки синтаксиса devicetree.syntax. Для включение нужно добавить в настройки (подробнее о настройке здесь):
file ..\*\\.(dts|dtsi)$ DeviceTree\sFile include devicetree.syntax
GPIO
Во время и сразу после сброса альтернативные функции не активны, а большинство портов ввода–вывода настроены на вход (input floating mode).
Когда контакт настроен как выход, значение, записанное в регистр выходных данных (GPIOx_ODR), выводится на контакт ввода–вывода. Выходной драйвер можно использовать в режиме push–pull или в режиме с открытым коллектором (open-drain), работает только низкий уровень, высокий уровень — HI-Z (Z–состояние).
Регистр входных данных (GPIOx_IDR) фиксирует данные, присутствующие на контакте ввода-вывода в каждом такте AHB(Advanced High–performance Bus).
13.3.1 General-purpose I/O ( GPIO )
During and just after reset, the alternate functions are not active and most of the I/O ports are configured in input floating mode.
When the pin is configured as output, the value written to the output data register (GPIOx_ODR) is output on the I/O pin. It is possible to use the output driver in push-pull mode or open-drain mode (only the low level is driven, high level is HI-Z).
The input data register (GPIOx_IDR) captures the data present on the I/O pin at every AHB clock cycle
GPIO используется для настройки линий ввода–вывода. Каждая группа GPIO состоит из 8 линий (K и Z) или 16 линий (A–J).
Аббревиатуры регистров
В описаниях регистров используются следующие сокращения (x = A до H, K или Z) :
| GPIOx_MODER | GPIO port mode register | |
| GPIOx_OTYPER | GPIO output type register | |
| GPIOx_OSPEEDR | GPIO output speed register | |
| GPIOx_PUPDR | GPIO port pull-up / pull-down register | |
| GPIOx_IDR | GPIO port input data register | чтение состояний (вход) |
| GPIOx_ODR | GPIO port output data register | запись состояний (выход) |
| GPIOx_BSRR | GPIO port bit set / reset register | побитная запись в регистр (выход) |
| GPIOx_LCKR | GPIO port configuration lock register | |
| GPIOx_AFRL | GPIO alternate function low register | |
| GPIOx_AFRH | GPIO alternate function high register | |
| GPIOx_ASCR | GPIO port analog switch control register |
Загрузка
Запуск Linux на процессоре выполняется в несколько этапов, которые постепенно инициализируют периферийные устройства и память платформы.

Общая загрузочная цепочка Linux (указаны типичные размеры памяти для каждого этапа):
оригинал
Код ПЗУ
Код ПЗУ ( ROM code) — это часть программного обеспечения, которое хранится в ПЗУ . Он умещается в несколько десятков килобайт и отображает свои данные во встроенной оперативной памяти. Это первый код, выполняемый процессором, и он включает всю логику, необходимую для выбора загрузочного устройства (последовательное соединение или флэш–память), с которого первичный загрузчик (FSBL) загружается во встроенное ОЗУ . Для большинства продуктов требуется доверять приложению, работающему на устройстве, и код ПЗУ является первым звеном в цепочке доверия, которая должна быть установлена для всех запущенных компонентов: это доверие устанавливается путём аутентификации FSBL перед его запуском.
FSBL
First stage boot loader — первичный загрузчик. Он инициализирует (часть) дерева часов и внешнего контроллера ОЗУ , далее он загружает вторичный загрузчик во внешнее ОЗУ и передаёт ему управление.
В качестве такого загрузчика используется:
SSBL
Second-stage boot loader — вторичный загрузчик.
Он работает в большом объёме ОЗУ , поэтому он может работать с USB , Ethernet, дисплей и т. д., которые полезны для более гибкой загрузки ядра Linux (с флэш–устройства, сеть и т. д.) и удобны для пользователя (показывая пользователю экран-заставку).
Обычно d качестве такого загрузчика Linux во встроенных системах. используется:
TF-A
TF-A (Trusted Firmware-A) разделен на несколько двоичных файлов, каждый из которых выполняет свою главную роль. Для 32-битных процессоров Arm (AArch32) доверенная загрузка разделена на четыре этапа (в порядке выполнения):
1 (BL1) application processor trusted ROM
2 (BL2) trusted firmware
3-2 (BL32) runtime software
3-3 (BL33) non-trusted firmware
BL1, BL2 и BL32 являются частями TF-A.
В виду того, что STM32 MPU используют специальный код ПЗУ, этап загрузки BL1 удаляется. Код ПЗУ ожидает, что BL2 будет работать на уровне выполнения EL3. Этот режим выбирается, когда включён флаг сборки BL2_AT_EL3.
BL33 находится за пределами TF-A. Это первый незащищённый код, загруженный TF-A. Во время загрузки это вторичный загрузчик (SSBL). Для платформ MPU STM32 SSBL по умолчанию является U-Boot.
TF-A может управлять своей конфигурацией с помощью дерева устройств. На этапе BL2 это сокращённая версия ядра Linux, в которой во время загрузки используются только необходимые устройства. Его можно настроить с помощью STM32CubeMX.