Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° STM32 Cube Programmer ΠΎΡ‚ STMicroelectronics стала стандартным инструмСнтом для программирования, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² сСмСйства STM32. Она ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС соврСмСнныС сСрии β€” ΠΎΡ‚ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½Ρ‹Ρ… STM32F0 Π΄ΠΎ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… STM32H7, прСдлагая Π³ΠΈΠ±ΠΊΠΈΠ΅ способы Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· интСрфСйсы SWD, JTAG ΠΈ Π΄Π°ΠΆΠ΅ USB DFU. Но нСсмотря Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с трудностями: ΠΎΡ‚ ошибок ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΌΠΈ областями памяти.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (установка, интСрфСйс, ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°), Π½ΠΎ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ чтСния (RDP), восстановлСниСм "ΠΊΠΈΡ€ΠΏΠΈΡ‡Π΅ΠΉ" Ρ‡Π΅Ρ€Π΅Π· UART, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ скорости Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ для массового производства. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° STM32CubeProgrammer "Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚" ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Error: No STM32 target found, β€” ΠΈ способам ΠΈΡ… устранСния Π±Π΅Π· ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ дорогостоящих ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ STM32 Cube Programmer ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ STM32CubeIDE (ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ), STM32 Cube Programmer β€” это спСциализированный инструмСнт для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ взаимодСйствия с ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ. Π•Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • πŸ”Ή ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· SWD, JTAG, USB (DFU) ΠΈΠ»ΠΈ UART (для восстановлСния).
  • πŸ”Ή Π§Ρ‚Π΅Π½ΠΈΠ΅/запись памяти: Flash, SRAM, OTP (ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ программируСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ).
  • πŸ”Ή Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ: установка ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ RDP (Read Protection) ΠΈ WRP (Write Protection).
  • πŸ”Ή ΠžΡ‚Π»Π°Π΄ΠΊΠ°: сброс, запуск/остановка ядра, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ рСгистров.
  • πŸ”Ή МассовоС производство: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° скриптов для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΠΉ устройств.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° распознаёт Π±ΠΎΠ»Π΅Π΅ 1000 ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ STM32, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ новСйшиС STM32U5 ΠΈ STM32WBA (с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Bluetooth 5.3). Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°ΠΌΠΈ (ST-Link, J-Link), Ρ‚Π°ΠΊ ΠΈ с Π΄Π΅ΡˆΡ‘Π²Ρ‹ΠΌΠΈ ΠΊΠ»ΠΎΠ½Π°ΠΌΠΈ Π½Π° Π±Π°Π·Π΅ CH340 ΠΈΠ»ΠΈ FT232 β€” ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ настройкС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство ΠΏΠ΅Ρ€Π΅Π΄ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OpenOCD ΠΈΠ»ΠΈ J-Flash) β€” встроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° всСх спСцифичных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ STM32, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ:

  • πŸ”§ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Option Bytes (настройки Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°, уровня Π·Π°Ρ‰ΠΈΡ‚Ρ‹).
  • πŸ”§ Π Π°Π±ΠΎΡ‚Π° с Dual-Bank Flash (для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² с двумя Π±Π°Π½ΠΊΠ°ΠΌΠΈ памяти).
  • πŸ”§ ВосстановлСниС Ρ‡Π΅Ρ€Π΅Π· UART Bootloader (Ссли SWD Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½).
πŸ“Š Какой интСрфСйс Π²Ρ‹ Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ STM32?
  • SWD
  • JTAG
  • USB DFU
  • UART
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ

Установка ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ запуск: пошаговая инструкция

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° доступна для Windows, Linux ΠΈ macOS, Π½ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π»ΡƒΡ‡ΡˆΠ΅ всСго Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄ Windows. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта ST (Ρ€Π°Π·Π΄Π΅Π» Tools & Software).

Для установки Π½Π° Windows:

  1. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Π°Ρ€Ρ…ΠΈΠ² en.stm32cubeprg.zip (ΠΎΠΊΠΎΠ»ΠΎ 100 ΠœΠ‘).
  2. РаспакуйтС Π΅Π³ΠΎ Π² ΠΏΠ°ΠΏΠΊΡƒ Π±Π΅Π· кирилличСских символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C:\STM32\CubeProgrammer).
  3. ЗапуститС SetupSTM32CubeProgrammer-x.x.x.exe ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора.
  4. Π’ процСссС установки ΠΎΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Π³Π°Π»ΠΎΡ‡ΠΊΠΎΠΉ Add to PATH β€” это упростит запуск ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

Для Linux/macOS:

  • 🐧 РаспакуйтС Π°Ρ€Ρ…ΠΈΠ² ΠΈ запуститС STM32CubeProgrammer ΠΈΠ· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° (ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ chmod +x).
  • 🍎 На macOS ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установитС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ для ST-Link Ρ‡Π΅Ρ€Π΅Π· Homebrew:
brew install --cask stlink

ПослС установки ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ST-Link ΠΊ ПК ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ. Π’ Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Connection Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΡ€Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ST-Link (SWD)).

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ для ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° (ST-Link/J-Link)

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΊ ПК ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ‹ (3.3V ΠΈΠ»ΠΈ 5V)

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ STM32CubeProgrammer ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора

Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ интСрфСйс (SWD/JTAG) Π² настройках-->

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: Ρ€Π°Π·Π±ΠΎΡ€ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π²ΠΊΠ»Π°Π΄ΠΎΠΊ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ STM32 Cube Programmer Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° 5 основных Π²ΠΊΠ»Π°Π΄ΠΎΠΊ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Рассмотрим ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ:

Π’ΠΊΠ»Π°Π΄ΠΊΠ° НазначСниС ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
Erasing & Programming ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° ΠΈ стираниС памяти
  • Π’Ρ‹Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ (.hex, .bin, .elf)
  • Настройка адрСса Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы (CRC)
Option Bytes ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… областСй
  • Установка RDP (Read Protection)
  • Настройка WRP (Write Protection)
  • Π’Ρ‹Π±ΠΎΡ€ источника тактирования
OB (User Configuration) ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ настройки
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ BOR (Brown-Out Reset)
  • Настройка NRST_MODE

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Erasing & Programming ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Verify programming β€” ΠΎΠ½ автоматичСски свСряСт записанныС Π΄Π°Π½Π½Ρ‹Π΅ с исходным Ρ„Π°ΠΉΠ»ΠΎΠΌ. Π­Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для сСрийного производства, Π³Π΄Π΅ ошибка ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ устройства ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π±Ρ€Π°ΠΊΡƒ всСй ΠΏΠ°Ρ€Ρ‚ΠΈΠΈ.

Π’ΠΊΠ»Π°Π΄ΠΊΠ° Option Bytes Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особой остороТности. НапримСр, установка RDP Level 2 Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ памяти Ρ‡Π΅Ρ€Π΅Π· SWD/JTAG, ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· UART Bootloader (Ссли ΠΎΠ½ Π½Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½).

πŸ’‘

ΠŸΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Option Bytes всСгда Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ½ΠΎΠΏΠΊΡƒ Save Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ OB (User Configuration).

ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°: ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ процСсс

Рассмотрим процСсс ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° STM32F407G (популярная ΠΏΠ»Π°Ρ‚Π° STM32F4 Discovery). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ скомпилированный Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ .hex.

Π¨Π°Π³ 1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ настройка соСдинСния

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ST-Link ΠΊ ΠΏΠ»Π°Ρ‚Π΅ (Ρ€Π°Π·ΡŠΡ‘ΠΌ SWD: CLK, DIO, GND, 3.3V).
  2. Π’ STM32 Cube Programmer Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅:
    • ΠŸΠΎΡ€Ρ‚: ST-Link
    • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ: SWD
    • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: Normal (для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ) ΠΈΠ»ΠΈ Fast (послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ тСста).
  • НаТмитС Connect. Π’ Π»ΠΎΠ³Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ сообщСниС Connected to target.
  • Π¨Π°Π³ 2. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ

    1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Erasing & Programming.
    2. Π’ ΠΏΠΎΠ»Π΅ File Path ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ .hex.
    3. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ адрСс Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 0x08000000 для Flash).
    4. НаТмитС Start Programming.

    ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°ΠΉΠΌΡ‘Ρ‚ ΠΎΡ‚ 5 Π΄ΠΎ 30 сСкунд Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ ΠΈ скорости интСрфСйса. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π² Π»ΠΎΠ³Π΅ появится Verification OK.

    Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ссли ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° "зависаСт" Π½Π° 99%?

    Π§Π°Ρ‰Π΅ всСго это связано с Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ настройкой Option Bytes ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠΌ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… областСй. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:

    1. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Verify programming ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ.

    2. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ интСрфСйса Π΄ΠΎ Low.

    3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ установлСн Π»ΠΈ RDP Level 1/2 (трСбуСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ стираниС Ρ‡ΠΈΠΏΠ°).

    Π Π°Π±ΠΎΡ‚Π° с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ: RDP ΠΈ WRP

    БистСма Π·Π°Ρ‰ΠΈΡ‚Ρ‹ STM32 Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°:

    • πŸ”’ RDP (Read Protection) β€” Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ памяти Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ интСрфСйсы.
    • πŸ”’ WRP (Write Protection) β€” Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСктора Flash ΠΎΡ‚ записи.

    Π£Ρ€ΠΎΠ²Π½ΠΈ RDP:

    • Level 0 β€” Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° (доступ ΠΊΠΎ всСй памяти).
    • Level 1 β€” Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ памяти Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ Ρ‡ΠΈΠΏ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΠ½ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρƒ.
    • Level 2 β€” нСобратимая Π·Π°Ρ‰ΠΈΡ‚Π°: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ массовоС стираниС Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. ВосстановлСниС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· UART Bootloader (Ссли ΠΎΠ½ Π½Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² Option Bytes).

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ RDP Level 1:

    1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ.
    2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Option Bytes.
    3. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Read Protection Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Level 1.
    4. НаТмитС Apply.
    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ установитС RDP Level 2 ΠΈ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ (ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ UART Bootloader), Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· использования спСциализированного оборудования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ChipWhisperer для glitch-Π°Ρ‚Π°ΠΊ).

    Для настройки WRP (Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ записи):

    1. На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Option Bytes Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» Write Protection.
    2. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ сСктора Flash, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Sector 0-3 для Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°).
    3. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ настройки ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Apply.
    πŸ’‘

    ВсСгда тСстируйтС Π·Π°Ρ‰ΠΈΡ‚Ρƒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅Π΄ массовым производством. Ошибка Π² настройках Option Bytes ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π±Ρ€Π°ΠΊΡƒ всСй ΠΏΠ°Ρ€Ρ‚ΠΈΠΈ устройств.

    ВосстановлСниС "ΠΊΠΈΡ€ΠΏΠΈΡ‡Π°": Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ссли STM32 Π½Π΅ опрСдСляСтся

    Битуация, ΠΊΠΎΠ³Π΄Π° STM32 Cube Programmer Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ No STM32 target found ΠΈΠ»ΠΈ Could not connect to target, Π·Π½Π°ΠΊΠΎΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅:

    • πŸ”Œ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ΠΌ: ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ 3.3V ΠΈΠ»ΠΈ 5V.
    • πŸ”Œ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SWD: ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π½Ρ‹ CLK ΠΈ DIO, ΠΈΠ»ΠΈ отсутствуСт ΠΎΠ±Ρ‰ΠΈΠΉ GND.
    • πŸ”Œ Аппаратная Π·Π°Ρ‰ΠΈΡ‚Π°: установлСн RDP Level 2 ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Debug Port Π² Option Bytes.
    • πŸ”Œ ΠŸΠΎΠ²Ρ€Π΅ΠΆΠ΄Ρ‘Π½ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, послС Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· USB DFU.

    Алгоритм восстановлСния:

    1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅: ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ осциллограф ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ VCAP (Ссли Π΅ΡΡ‚ΡŒ) ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΡŒΡ‚Π΅ напряТСниС Π½Π° VDD ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ.
    2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ SWD-ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:
      • Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ NRST Π½Π΅ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ Π½Π° зСмлю.
      • ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ интСрфСйса Π΄ΠΎ Low.
    3. ВосстановлСниС Ρ‡Π΅Ρ€Π΅Π· UART (Ссли SWD Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½):
      • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ UART1 (TX, RX, GND) ΠΊ ПК.
      • Π—Π°ΠΌΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΈΠ½ BOOT0 Π½Π° 3.3V ΠΈ ΠΏΠΎΠ΄Π°ΠΉΡ‚Π΅ сброс.
      • Π’ STM32 Cube Programmer Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ интСрфСйс UART ΠΈ ΠΏΠΎΡ€Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, COM3).
      • Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· UART Bootloader (ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” 115200 Π±ΠΎΠ΄).

    Если ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ опрСдСляСтся, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:

    • πŸ”§ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, J-Link вмСсто ST-Link).
    • πŸ”§ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ внСшний источник питания (ΠΈΠ½ΠΎΠ³Π΄Π° USB-ΠΏΠΎΡ€Ρ‚ ПК Π½Π΅ обСспСчиваСт достаточный Ρ‚ΠΎΠΊ).
    • πŸ”§ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ†Π΅ΠΏΠΈ NRST ΠΈ BOOT0 Π½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅.
    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ восстановлСнии Ρ‡Π΅Ρ€Π΅Π· UART Bootloader Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ STM32 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32L4) Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Π°Ρ‡ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 0x7F для синхронизации. Π’ STM32 Cube Programmer это дСлаСтся автоматичСски, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· PuTTY ΠΈΠ»ΠΈ Tera Term ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° этого Π±Π°ΠΉΡ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

    Автоматизация ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ для массового производства

    Для ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΠΉ устройств (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 100+ ΠΏΠ»Π°Ρ‚) Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ STM32 Cube Programmer нСэффСктивно. ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ скриптов ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

    Бпособ 1: Командная строка

    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ запуск ΠΈΠ· CMD ΠΈΠ»ΠΈ Bash с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ:

    STM32_Programmer_CLI.exe -c port=SWD -w "firmware.hex" -v -rst

    Π“Π΄Π΅:

    • -c port=SWD β€” Π²Ρ‹Π±ΠΎΡ€ интСрфСйса.
    • -w "firmware.hex" β€” Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ.
    • -v β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° послС записи.
    • -rst β€” сброс послС ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ.

    Бпособ 2: Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ (TCL)

    Для слоТных сцСнариСв (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° + настройка Option Bytes + ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° CRC) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт Π½Π° TCL. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

    ST-Link_SWD.connect
    

    ST-Link_SWD.write_memory 0x08000000 "firmware.bin"

    ST-Link_SWD.verify_memory 0x08000000 "firmware.bin"

    ST-Link_SWD.reset

    Π‘ΠΊΡ€ΠΈΠΏΡ‚ запускаСтся Ρ‡Π΅Ρ€Π΅Π·:

    STM32_Programmer_CLI.exe -script "flash.tcl"

    Бпособ 3: Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Python

    Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля pystm32 (ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² subprocess) ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс ΠΈΠ· Python-скрипта. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

    import subprocess
    
    

    result = subprocess.run([

    "STM32_Programmer_CLI.exe",

    "-c", "port=SWD",

    "-w", "app.bin",

    "-ob", "RDP=1", # Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ RDP Level 1

    "-v"

    ], capture_output=True, text=True)

    print(result.stdout)

    Для ускорСния ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π² сСрийном производствС:

    • πŸš€ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Fast ΠΈΠ»ΠΈ Very Fast ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ интСрфСйса (Ссли ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ позволяСт).
    • πŸš€ ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ (-v) для ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ.
    • πŸš€ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ нСсколько ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ² ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ПК Ρ‡Π΅Ρ€Π΅Π· USB-Ρ…Π°Π± (Π½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ограничСния ΠΏΠΎ Ρ‚ΠΎΠΊΡƒ).

    FAQ: ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° частыС вопросы

    МоТно Π»ΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ STM32 Π±Π΅Π· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· USB)?

    Π”Π°, Ссли ваш ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ USB DFU (Device Firmware Update). Для этого:

    1. АктивируйтС USB DFU Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ (Ρ‡Π΅Ρ€Π΅Π· STM32CubeMX ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ).
    2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρƒ ΠΊ ПК ΠΏΠΎ USB (ΠΏΠΎΡ€Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ STM32 BOOTLOADER).
    3. Π’ STM32 Cube Programmer Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ интСрфСйс USB ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ.

    ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: USB DFU Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π½Π΅ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Ρ‘Π½ ΠΈ Π½Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² Option Bytes.

    Как ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ RDP Level 2, Ссли UART Bootloader ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½?

    Если установлСн RDP Level 2 ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ UART Bootloader, стандартными ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

    • πŸ”§ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ glitch-Π°Ρ‚Π°ΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ChipWhisperer ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Π΅ схСмы Π½Π° FPGA).
    • πŸ”§ ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² сСрвисный Ρ†Π΅Π½Ρ‚Ρ€ STMicroelectronics (для сСрийных Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ²).
    • πŸ”§ Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ (Ссли это допустимо ΠΏΠΎ конструкции устройства).

    Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ RDP Level 2 Π±Π΅Π· Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° восстановлСния!

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ STM32 Cube Programmer Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ST-Link?

    ЧастыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

    • πŸ”Œ НС установлСны Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ (скачайтС STSW-LINK009 с сайта ST).
    • πŸ”Œ ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32CubeIDE ΠΈΠ»ΠΈ Keil Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ).
    • πŸ”Œ НСисправный кабСль ΠΈΠ»ΠΈ ΠΏΠΎΡ€Ρ‚ USB (ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·ΡŠΡ‘ΠΌ).
    • πŸ”Œ Клон ST-Link Π½Π° Π±Π°Π·Π΅ CH340 Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ установки Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².

    РСшСниС: пСрСустановитС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ДиспСтчСр устройств (Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ST-Link Virtual COM Port).

    Как ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ STM32 Ρ‡Π΅Ρ€Π΅Π· JTAG вмСсто SWD?

    Для использования JTAG:

    1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ 5 сигналов: TMS, TCK, TDI, TDO, GND.
    2. Π’ STM32 Cube Programmer Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ интСрфСйс JTAG.
    3. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² Option Bytes Π½Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ JTAG-DP (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½).

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: JTAG ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ SWD, Π½ΠΎ позволяСт ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ многопроцСссорныС систСмы.

    МоТно Π»ΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ STM32 Ρ‡Π΅Ρ€Π΅Π· Arduino (ΠΊΠ°ΠΊ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ)?

    Π”Π°, Π½ΠΎ с ограничСниями. НапримСр, ΠΏΠ»Π°Ρ‚Π° Arduino Uno с ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΎΠΉ STM32duino-bootloader ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ST-Link Ρ‡Π΅Ρ€Π΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ArduinoSTM32. Однако:

    • ⚠️ Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠ·ΠΊΠΎΠΉ (ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ATmega328P).
    • ⚠️ НС всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ STM32 Cube Programmer Π±ΡƒΠ΄ΡƒΡ‚ доступны.

    Для Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ST-Link ΠΈΠ»ΠΈ J-Link.