Π Π°Π±ΠΎΡ‚Π° с ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ STM32 Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Ρ… инструмСнтов для ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ПО STM32CubeProgrammer ΠΎΡ‚ STMicroelectronics стало стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ для ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ², благодаря ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ всСх сСмСйств STM32, Π³ΠΈΠ±ΠΊΠΈΠΌ интСрфСйсам (SWD, JTAG, UART, USB DFU) ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с STM32CubeIDE. Однако Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с нюансами: ΠΎΡ‚ ошибок ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ памяти.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ просто пСрСсказ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ практичСскиС схСмы ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² (ST-Link, J-Link), Ρ€Π°Π·Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Error: No STM32 target found!), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ сцСнарии для массового производства β€” ΠΎΡ‚ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΊΠΎΠ΄Π° Π΄ΠΎ ускорСния ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Quad-SPI. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с STM32H7 ΠΈ STM32U5, Π³Π΄Π΅ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ часто Π΄Π°ΡŽΡ‚ сбои.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ STM32CubeProgrammer ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½

STM32CubeProgrammer β€” это ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для программирования ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² STM32, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Flash Loader Demonstrator ΠΈΠ»ΠΈ STVP. Π•Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ прСимущСства:

  • πŸ”Ή ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° всСх сСмСйств STM32 β€” ΠΎΡ‚ STM32F0 Π΄ΠΎ STM32H7 ΠΈ STM32U5, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½ΠΎΠ²Ρ‹Π΅ ядра Cortex-M33/M7.
  • πŸ”Ή ΠœΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°: SWD (Π΄ΠΎ 50 ΠœΠ“Ρ†), JTAG, UART, USB DFU, I2C, SPI, CAN.
  • πŸ”Ή ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΊΠΎΠ΄Π°: установка RDP (Read Protection), конфигурация OPTBYTES.
  • πŸ”Ή Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с STM32CubeIDE ΠΈ Keil/IAR Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹.
  • πŸ”Ή ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° скриптов (CLI) для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π² сСрийном производствС.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OpenOCD ΠΈΠ»ΠΈ J-Flash) β€” ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° STMicroelectronics, Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ CubeProgrammer ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΌΠΈ областями памяти Π² STM32H7, Π³Π΄Π΅ OpenOCD ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ сбои ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ OPTBYTES.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ВСрсии STM32CubeProgrammer Π½ΠΈΠΆΠ΅ 2.12 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ Π½Π° ядрС Cortex-M33 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32U5). ΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Ρ‡ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ПО Ρ‡Π΅Ρ€Π΅Π· STM32CubeMX ΠΈΠ»ΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт.

Установка ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ инсталлятор STM32CubeProgrammer доступСн Π½Π° сайтС STMicroelectronics Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ STM32CubeProg. ΠŸΡ€ΠΎΡ†Π΅ΡΡ установки стандартный, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  1. Π’Ρ‹Π±ΠΎΡ€ вСрсии: Для Windows доступны 32-bit ΠΈ 64-bit сборки. Для Linux/MacOS β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 64-bit (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Java для GUI).
  2. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹: ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ST-Link ΠΈΠ»ΠΈ J-Link систСма ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ STSW-LINK009 для ST-Link.
  3. ΠŸΡ€Π°Π²Π° доступа: На Linux Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ dialout:
    sudo usermod -a -G dialout $USER

ПослС установки ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку:

STM32_Programmer_CLI --version

ΠžΡ‚Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, v2.14.0).

πŸ“Š Какой Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ STM32?
  • ST-Link
  • J-Link
  • DAPLink
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ (ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² коммСнтариях)

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ: SWD vs JTAG vs UART

Π’Ρ‹Π±ΠΎΡ€ интСрфСйса зависит ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ. SWD (Serial Wire Debug) β€” самый популярный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ благодаря простотС (всСго 2 сигнала: CLK ΠΈ DIO). Однако для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° STM32H7 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ JTAG (5 сигналов), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ядСр.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Кол-Π²ΠΎ сигналов Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
SWD Π”ΠΎ 50 ΠœΠ“Ρ† 2 (CLK, DIO) ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°, базовая ΠΎΡ‚Π»Π°Π΄ΠΊΠ°
JTAG Π”ΠΎ 15 ΠœΠ“Ρ† 5 (TDI, TDO, TMS, TCK, GND) ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Π°Ρ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°, трассировка
UART Π”ΠΎ 115200 Π±ΠΎΠ΄ 2 (TX, RX) ОбновлСниС Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°, Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
USB DFU Full-Speed (12 ΠœΠ±ΠΈΡ‚/с) 2 (USB D+, USB D-) ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° Π±Π΅Π· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для массового производства)

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· SWD ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для STM32F407):

  • πŸ”Œ SWDIO β†’ PA13 (ΠΈΠ»ΠΈ PB3 Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Π°Ρ…).
  • πŸ”Œ SWCLK β†’ PA14 (ΠΈΠ»ΠΈ PB4).
  • πŸ”Œ GND β†’ ΠΎΠ±Ρ‰ΠΈΠΉ GND ΠΏΠ»Π°Ρ‚Ρ‹.
  • πŸ”Œ 3.3V β†’ VCC (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, Ссли цСлСвая ΠΏΠ»Π°Ρ‚Π° Π½Π΅ Π·Π°ΠΏΠΈΡ‚Π°Π½Π°).
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ»Π°Ρ‚Π°ΠΌ с STM32H7 Ρ‡Π΅Ρ€Π΅Π· SWD ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (4 ΠœΠ“Ρ†) ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ошибки. УстановитС частоту 1 ΠœΠ“Ρ† Π² настройках CubeProgrammer (Settings β†’ SWD Frequency).

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Π»ΠΈ ST-Link/J-Link ΠΊ USB?|Подано Π»ΠΈ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ Π½Π° Ρ†Π΅Π»Π΅Π²ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ?|ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ SWDIO/SWCLK?|УстановлСны Π»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ для Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°?-->

ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°: пошаговая инструкция

Рассмотрим процСсс ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ STM32F407 Ρ‡Π΅Ρ€Π΅Π· SWD с использованиСм Ρ„Π°ΠΉΠ»Π° .hex:

  1. Запуск CubeProgrammer: ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ GUI-Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ CLI (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ).
  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: НаТмитС Connect β†’ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΡ€Ρ‚ SWD ΠΈ частоту (рСкомСндуСтся 4 MHz для STM32F4).
  3. Π§Ρ‚Π΅Π½ΠΈΠ΅ ID: ПослС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Device ID (Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Π΄Π°Ρ‚Π°ΡˆΠΈΡ‚ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 0x413 для STM32F407).
  4. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π°: Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ File Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ .hex ΠΈΠ»ΠΈ .bin Ρ„Π°ΠΉΠ». Для .bin ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ стартовый адрСс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 0x08000000).
  5. ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°: НаТмитС Download β†’ Π΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ (прогрСсс отобраТаСтся Π² Π»ΠΎΠ³Π΅).
  6. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°: ПослС ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Verify для сравнСния Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ flash ΠΈ исходного Ρ„Π°ΠΉΠ»Π°.

Для массового производства ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CLI-Ρ€Π΅ΠΆΠΈΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ firmware.hex с автоматичСским стираниСм ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ:

STM32_Programmer_CLI -c port=SWD -d firmware.hex -v -rst

Π€Π»Π°Π³ -rst выполняСт сброс послС ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ.

πŸ’‘

Если ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° прСрываСтся с ошибкой Error: Flash memory not erased, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π»Π°Π³ -e all для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ стирания всСй flash-памяти ΠΏΠ΅Ρ€Π΅Π΄ записью.

Π Π°Π±ΠΎΡ‚Π° с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ памяти ΠΈ опциями (OPTBYTES)

ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ STM32 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΊΠΎΠ΄Π°:

  • πŸ” RDP (Read Protection): Π—Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ flash-памяти Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ. УстанавливаСтся Ρ‡Π΅Ρ€Π΅Π· Option Bytes.
  • πŸ” Write Protection (WRP): Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ запись Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ сСктора flash.
  • πŸ” Secure Area: Π—Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Π΅ области для криптографичСских ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (доступно Π² STM32H7/U5).

Для установки RDP Π² CubeProgrammer:

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ МК Ρ‡Π΅Ρ€Π΅Π· SWD.
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π» Option Bytes.
  3. Π’ ΠΏΠΎΠ»Π΅ Read Protection Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Level 1 (Π·Π°ΠΏΡ€Π΅Ρ‚ чтСния) ΠΈΠ»ΠΈ Level 2 (полная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ JTAG).
  4. НаТмитС Apply β†’ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ дСйствиС.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Установка RDP Level 2 Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ. ЕдинствСнный способ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ β€” ΠΏΠΎΠ»Π½ΠΎΠ΅ стираниС flash Ρ‡Π΅Ρ€Π΅Π· USB DFU (Ссли поддСрТиваСтся) ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Π° Ρ‡ΠΈΠΏΠ°.
Как ΠΎΠ±ΠΎΠΉΡ‚ΠΈ RDP Level 1 Π±Π΅Π· стирания flash?

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для STM32F1) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ΅ (USART bootloader), отправляя ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ 0x44 для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ снятия Π·Π°Ρ‰ΠΈΡ‚Ρ‹. Однако этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π½ΠΎΠ²Ρ‹Ρ… сСмСйствах (STM32H7, STM32U5) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ STM32CubeProgrammer ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ошибки. Рассмотрим самыС распространённыС:

Ошибка ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
No STM32 target found! ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SWD ΠΈΠ»ΠΈ отсутствиС питания. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ SWDIO/SWCLK ΠΈ ΠΏΠΎΠ΄Π°Ρ‡Ρƒ 3.3V. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ частоту Π΄ΠΎ 1 MHz.
Error: Flash memory not erased Π‘Π΅ΠΊΡ‚ΠΎΡ€Π° flash Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ WRP ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Ρ‹. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Erase β†’ Full chip erase ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Option Bytes.
Error: Option Bytes write failed ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ OPTBYTES ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Π΅ RDP. Π‘Π½ΠΈΠΌΠΈΡ‚Π΅ RDP (Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ USB DFU для Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.
Error: Cannot connect to the target ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ занятый ΠΏΠΎΡ€Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OpenOCD). Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ. ΠŸΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ST-Link.

Для диагностики ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

STM32_Programmer_CLI -c port=SWD -r

Она Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΌ устройствС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Device ID ΠΈ состояниС Option Bytes.

πŸ’‘

Если STM32CubeProgrammer Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, Π½ΠΎ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ подаётся, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ†Π΅ΠΏΡŒ NRST. На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Π°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Blue Pill) трСбуСтся подтяТка NRST ΠΊ 3.3V Ρ‡Π΅Ρ€Π΅Π· рСзистор 10kΞ©.

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

Π’ сСрийном производствС ручная ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° нСдопустима. STM32CubeProgrammer ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π·:

  • πŸ“œ Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ CLI: ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ Π² .bat ΠΈΠ»ΠΈ .sh Ρ„Π°ΠΉΠ»Π΅.
  • πŸ“œ STM32CubeProgrammer API: Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Python ΠΈΠ»ΠΈ C# Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² CLI.
  • πŸ“œ ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ для STM32CubeIDE: АвтоматичСская ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° послС сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ скрипта для ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ 10 устройств подряд с Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:

@echo off

for /L %%i in (1,1,10) do (

echo ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° устройства %%i

STM32_Programmer_CLI -c port=SWD -d firmware.hex -v -logs log_%%i.txt

if %ERRORLEVEL% neq 0 (

echo Ошибка Π½Π° устройствС %%i

pause

)

)

Π›ΠΎΠ³ΠΈ сохранятся Π² Ρ„Π°ΠΉΠ»Π°Ρ… log_1.txt, log_2.txt ΠΈ Ρ‚.Π΄.

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

  • πŸš€ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Quad-SPI вмСсто SWD (доступно Π½Π° STM32H7/U5).
  • πŸš€ ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ (-v off) Ссли ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • πŸš€ ΠŸΡ€ΠΎΡˆΠΈΠ²Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ сСктора (Ρ„Π»Π°Π³ -s).

FAQ: ЧастыС вопросы ΠΏΠΎ STM32CubeProgrammer

МоТно Π»ΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ STM32 Ρ‡Π΅Ρ€Π΅Π· UART Π±Π΅Π· ST-Link?

Π”Π°, Ссли Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΏΠΎ USART (bootloader). Для этого:

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ TX/RX ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PA9/PA10 для STM32F4).
  2. Π£Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ BOOT0 Π² состоянии HIGH ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π°Ρ‡Π΅ питания.
  3. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ» Ρ‡Π΅Ρ€Π΅Π· STM32CubeProgrammer Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ UART (ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” 115200 Π±ΠΎΠ΄).

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ссли flash Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½ RDP Level 2.

Как ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ STM32H7 Ρ‡Π΅Ρ€Π΅Π· Quad-SPI?

STM32H7 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· Quad-SPI (Π΄ΠΎ 4 Π»ΠΈΠ½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…), Ρ‡Ρ‚ΠΎ ускоряСт процСсс Π² 2-3 Ρ€Π°Π·Π°. Для этого:

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ QSPI ΠΊ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ST-Link с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ QSPI).
  2. Π’ CubeProgrammer Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΡ€Ρ‚ QSPI ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 4-4-4 для Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… Π»ΠΈΠ½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…).
  3. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ .bin с Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π΅ сСктора (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 256 Π±Π°ΠΉΡ‚).

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ 100 ΠœΠ“Ρ†, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ питания (рСкомСндуСтся 3.3V с Ρ‚ΠΎΠΊΠΎΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 500 мА).

ΠŸΠΎΡ‡Π΅ΠΌΡƒ CubeProgrammer Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ J-Link?

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ связана с:

  • πŸ”Œ ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² J-Link (установитС J-Link Software Pack).
  • πŸ”Œ ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠΌ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OZone ΠΈΠ»ΠΈ Keil). Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС IDE ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ.
  • πŸ”Œ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ Π² CubeProgrammer: Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ J-Link Π² спискС Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² (Settings β†’ Debug Probe).

Для диагностики запуститС J-Link Commander ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, обнаруТиваСтся Π»ΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€.

Как ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ RDP Level 2 Π½Π° STM32?

Если установлСн RDP Level 2, стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Ρ‡Π΅Ρ€Π΅Π· SWD/JTAG) Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  • πŸ”„ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ USB DFU (Ссли поддСрТиваСтся Ρ‡ΠΈΠΏΠΎΠΌ). Для этого:
    1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ USB ΠΊ ΠΏΠΎΡ€Ρ‚Ρƒ DFU (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PA11/PA12 для STM32F4).
    2. Π£Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ BOOT0 Π² HIGH ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π°Ρ‡Π΅ питания.
    3. ЗапуститС CubeProgrammer Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ USB ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Full erase.
  • πŸ”„ Для Ρ‡ΠΈΠΏΠΎΠ² Π±Π΅Π· DFU (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32F0) потрСбуСтся ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· JTAG с внСшним источником напряТСния (ΠΌΠ΅Ρ‚ΠΎΠ΄ "hot-plug").
  • ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Бброс RDP Level 2 стираСт всю flash-ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Option Bytes.

    ΠšΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ CubeProgrammer Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для STM32U5?

    Для STM32U5 (ядро Cortex-M33) трСбуСтся вСрсия Π½Π΅ Π½ΠΈΠΆΠ΅ 2.12. РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ послСднюю ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ сборку (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания β€” 2.14.0), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ:

    • πŸ”Ή Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ ошибки чтСния OPTBYTES для TrustZone.
    • πŸ”Ή Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Secure Boot ΠΈ Secure Firmware Update (SFU).
    • πŸ”Ή ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Quad-SPI (ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΄ΠΎ 133 MHz).
    • Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС ST.