Π Π°Π±ΠΎΡ‚Π° с ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ STM32 стала Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ благодаря ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ STM32 CubeIDE ΠΎΡ‚ STMicroelectronics. Π­Ρ‚ΠΎΡ‚ инструмСнт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² сСбС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° STM32CubeMX, компилятор Π½Π° Π±Π°Π·Π΅ GCC ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ J-Link, ST-Link ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ². Но despite ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… прСимущСств, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с трудностями: ΠΎΡ‚ нСпонятных ошибок компиляции Π΄ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ тактирования.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ вСсь процСсс β€” ΠΎΡ‚ установки CubeIDE Π΄ΠΎ написания ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ clock tree для STM32F4 ΠΈΠ»ΠΈ STM32H7, ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠ΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, USART ΠΈΠ»ΠΈ SPI), ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ компилируСтся, Π½ΠΎ Π½Π΅ запускаСтся Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅. ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ, пСрСходящим с Keil ΠΈΠ»ΠΈ IAR Π½Π° бСсплатноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ ST.

1. Установка STM32 CubeIDE: систСмныС трСбования ΠΈ Π½ΡŽΠ°Π½ΡΡ‹

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ STM32 CubeIDE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Windows 10/11, Linux (Ubuntu, Debian) ΠΈ macOS, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ. НапримСр, Π½Π° Windows 7 срСда ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Π±Π΅Π· Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” особСнно ΠΏΡ€ΠΈ использовании ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ трСбования:

  • πŸ–₯️ ΠžΠ—Π£: 4 Π“Π‘ (рСкомСндуСтся 8 Π“Π‘ для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с STM32H7)
  • πŸ’Ύ ΠœΠ΅ΡΡ‚ΠΎ Π½Π° дискС: 3 Π“Π‘ (установитС Π½Π° SSD, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°)
  • πŸ”Œ ΠŸΠΎΡ€Ρ‚Ρ‹: USB 2.0 для ST-Link (3.0 ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²)
  • πŸ› οΈ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: Java 8+ (Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² установщик, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройки JAVA_HOME)

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ установщик Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта ST. ВСрсии ΠΈΠ· сторонних источников ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ STM32Cube ΠΈΠ»ΠΈ вирусы. ПослС установки ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ CubeIDE Ρ‡Π΅Ρ€Π΅Π· Help β†’ Check for Updates β€” Π² Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·Π°Ρ… ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ критичСскиС Π±Π°Π³ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡˆΠΈΠ±ΠΊΡƒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для STM32G4 Π² вСрсии 1.11.0).

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если послС установки CubeIDE Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ST-Link Π² ДиспСтчСрС устройств. Часто ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ пСрСустановкой Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· STSW-LINK009 (ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΎΡ‚ ST).

2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: шаг Π·Π° шагом

Начнём с простого β€” ΠΌΠΈΠ³Π°Π½ΠΈΠ΅ свСтодиодом Π½Π° ΠΏΠ»Π°Ρ‚Π΅ STM32F407 Discovery. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² структурС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ основных настройках.

  1. Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°:

    Π’ мСню File β†’ New β†’ STM32 Project Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² поискС STM32F407G-DISC1 (ΠΈΠ»ΠΈ Π²Π°ΡˆΡƒ модСль). Если ΠΏΠ»Π°Ρ‚Ρ‹ Π½Π΅Ρ‚ Π² спискС, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Help β†’ Manage Embedded Software Packages.

  2. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ тактирования:

    ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Clock Configuration. Для STM32F4 типичная конфигурация:

    • πŸ”„ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: HSE (8 ΠœΠ“Ρ† ΠΎΡ‚ внСшнСго ΠΊΠ²Π°Ρ€Ρ†Π°)
    • ⚑ PLL: ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ 168 ΠœΠ“Ρ† (максимум для ядра)
    • πŸ”‹ APB1/APB2: Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ 4/2 соотвСтствСнно (для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ TIM ΠΈ USART)

  • Настройка GPIO:

    Π’ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Pinout & Configuration Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ свСтодиод (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, LD2 Π½Π° Discovery). ΠΠ°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ ΠΏΠΈΠ½ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ PA5) ΠΊΠ°ΠΊ GPIO_Output.

  • ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° (Ctrl+S) ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ main.c. Ѐункция HAL_GPIO_TogglePin() Π² Ρ†ΠΈΠΊΠ»Π΅ while(1) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ состояниС свСтодиода. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ HAL_Delay(500), ΠΈΠ½Π°Ρ‡Π΅ мигания Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅.

    Π’Ρ‹Π±Ρ€Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€|Π’Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ настроСно Π±Π΅Π· ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ|Π‘Π²Π΅Ρ‚ΠΎΠ΄ΠΈΠΎΠ΄ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π½Π° GPIO_Output|Π’ ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° HAL_Delay-->

    STM32F4 Discovery|STM32F103 Blue Pill|STM32H7 Nucleo|STM32L4|Другая-->

    3. Π Π°Π±ΠΎΡ‚Π° с ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠ΅ΠΉ: USART, SPI, ADC

    Одной ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… особСнностСй STM32 CubeIDE являСтся Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ настройка ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ. Рассмотрим Ρ‚Ρ€ΠΈ самых вострСбованных модуля.

    ΠŸΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΡ Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ использованиС ЧастыС ошибки
    USART ΠžΡ‚Π»Π°Π΄ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· printf, связь с ПК НСвСрная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ (Baud Rate), отсутствиС Pull-Up Π½Π° TX/RX
    SPI Π Π°Π±ΠΎΡ‚Π° с Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MPU6050) НСсовпадСниС Mode (0–3) ΠΈΠ»ΠΈ Clock Polarity
    ADC Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… сигналов Π—Π°Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ADC Clock Π² RCC

    Для настройки USART ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Pinout & Configuration β†’ Connectivity β†’ USART2 (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ€Ρ‚). УстановитС:

    • πŸ”Œ Mode: Asynchronous
    • πŸ“Ά Baud Rate: 115200 (стандарт для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ)
    • πŸ”„ Hardware Flow Control: None (Ссли Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ RTS/CTS)

    Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· printf, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ syscalls.c (шаблон Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… STM32Cube) ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ стандартный Π²Ρ‹Π²ΠΎΠ΄:

    #include <stdio.h>
    

    int _write(int file, char *ptr, int len) {

    HAL_UART_Transmit(&huart2, (uint8_t*)ptr, len, HAL_MAX_DELAY);

    return len;

    }

    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если USART Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ PA2 (TX) ΠΈ PA3 (RX) ΠΊ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€Ρƒ USB-UART (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CP2102). На ΠΏΠ»Π°Ρ‚Π°Ρ… Nucleo для этого Π΅ΡΡ‚ΡŒ встроСнный ST-Link.

    4. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ диагностика ошибок

    ΠžΡ‚Π»Π°Π΄ΠΊΠ° Π² STM32 CubeIDE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° основных Ρ€Π΅ΠΆΠΈΠΌΠ°: Debug (пошаговоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅) ΠΈ Run (запуск с Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ останова). Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹:

    1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· ST-Link ΠΈΠ»ΠΈ J-Link.
    2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ: Run β†’ Debug Configurations β†’ STM32 Cortex-M C/C++ Application.
    3. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² настройках ΡƒΠΊΠ°Π·Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Debug Probe (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ST-Link (OpenOCD)).

    Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅:

    • 🚫 "No ST-Link detected"): ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ USB ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹. Иногда ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ПК.
    • πŸ”΄ "Target not responding"): Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, сбились Ρ„ΡŒΡŽΠ·Ρ‹ ΠΈΠ»ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π² состоянии HardFault. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρƒ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ NRST.
    • ⚠️ "Breakpoint not hit"): Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ компилятора (-O0) ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Project Properties β†’ C/C++ Build β†’ Settings β†’ Optimization Level.

    Для диагностики HardFault ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгистры SCB->HFSR ΠΈ SCB->CFSR. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ:

    void HardFault_Handler(void) {
    

    __asm("TST LR, #4");

    __asm("ITE EQ");

    __asm("MRSEQ R0, MSP"); // Stack pointer if exception from main stack

    __asm("MRSNE R0, PSP"); // Stack pointer if exception from process stack

    __asm("B __cpp(HardFault_Decoder)");

    }

    Как Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ HardFault?

    Анализ рСгистров CFSR (Configurable Fault Status Register) ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ сбоя:

    - MMFSR (Π±ΠΈΡ‚Ρ‹ 0–7): ошибки памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, доступ ΠΊ Π½Π΅Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½ΠΎΠΌΡƒ адрСсу).

    - BFSR (Π±ΠΈΡ‚Ρ‹ 8–15): ошибки ΡˆΠΈΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ адрСс ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ).

    - UFSR (Π±ΠΈΡ‚Ρ‹ 16–31): нСдопустимыС инструкции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль).

    Для Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ STM32CubeMonitor ΠΈΠ»ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ STM32CubeProgrammer (Π²ΠΊΠ»Π°Π΄ΠΊΠ° Logs).

    5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с HAL

    HAL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (Hardware Abstraction Layer) ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠ΅ΠΉ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ нСдостатки: большой Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΈ Π½ΠΈΠ·ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с рСгистровым доступом. НапримСр, функция HAL_GPIO_TogglePin() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎ 5-Ρ‚ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для STM32F0 с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ рСсурсами.

    Бпособы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

    • πŸš€ Π—Π°ΠΌΠ΅Π½Π° HAL Π½Π° LL: Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° LL (Low Layer) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с рСгистрами. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для GPIO:
      LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_5);  // ВмСсто HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5)
    • πŸ” ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: Π’ stm32f4xx_hal_conf.h Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, #define HAL_I2C_MODULE_ENABLED).
    • ⚑ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ компилятора: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ -O2 ΠΈΠ»ΠΈ -Os Π² настройках сборки, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅: это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ!

    ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ошибка ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²: использованиС HAL_Delay() Π² прСрываниях. Π­Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡεŸΊδΊŽ SysTick ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ядро, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² UART ΠΈΠ»ΠΈ SPI. ВмСсто Π½Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΈΠ»ΠΈ DWT_Delay (Ρ†ΠΈΠΊΠ»Ρ‹ процСссора).

    πŸ’‘

    Для ускорСния компиляции ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Project Properties β†’ C/C++ Build β†’ Settings β†’ Build Steps Ρ„Π»Π°Π³ -j4 (ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ сборка Π½Π° 4 ядрах).

    6. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ»Π°Ρ‚Π°ΠΌΠΈ ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ

    Одной ΠΈΠ· ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… сторон STM32 CubeIDE являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСноса ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с STM32F103 Π½Π° STM32F401). Однако здСсь Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ:

    1. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ:

      НС всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ доступны Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сСриях. НапримСр, STM32F0 Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ FMAC (Π±Π»ΠΎΠΊ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ), Π° STM32H7 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ DMA с 32-разрядной адрСсациСй.

    2. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ тактирования:

      Максимальная частота ядра Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ: 72 ΠœΠ“Ρ† для STM32F1, 180 ΠœΠ“Ρ† для STM32F4, 480 ΠœΠ“Ρ† для STM32H7. ΠŸΡ€ΠΈ пСрСносС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ настройки PLL.

    3. РасполоТСниС пинов:

      НапримСр, USART1 Π½Π° STM32F103 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ PA9/PA10, Π° Π½Π° STM32F407 β€” Ρ‚Π΅ ΠΆΠ΅ ΠΏΠΈΠ½Ρ‹, Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ функциями (AF7 вмСсто AF1).

    Для пСрСноса ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

    1. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ с исходниками (Src, Inc).
    2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°.
    3. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‡Π΅Ρ€Π΅Π· File β†’ Import β†’ File System.
    4. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² .ioc-Ρ„Π°ΠΉΠ»Π΅ (откроСтся автоматичСски).
    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ пСрСносС Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Flash (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с 64 ΠšΠ‘ Π½Π° 128 ΠšΠ‘) ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ адрСса сСкций Π² linker script (.ld-Ρ„Π°ΠΉΠ»). Π˜Π½Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΠ΄Π°!

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

    Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π² STM32 CubeIDE. Π’ΠΎΡ‚ самыС распространённыС:

    Ошибка ВозмоТная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
    error: region `FLASH' overflowed by X bytes Код Π½Π΅ помСщаСтся Π² Flash ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ (-Os) ΠΈΠ»ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ МК с большСй ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ
    OpenOCD failed to start ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ ST-Link ΠŸΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‡Π΅Ρ€Π΅Π· STSW-LINK009
    ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ компилируСтся, Π½ΠΎ Π½Π΅ запускаСтся НСвСрная конфигурация тактирования ΠΈΠ»ΠΈ Vector Table ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ System Clock Π² .ioc ΠΈ адрСс VTOR Π² startup_*.s
    HAL_ErrorHandler() вызываСтся Π±Π΅Π· ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Ошибка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, RCC) Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ HAL_StatusTypeDef

    Если ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ пСрСстал ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ послС обновлСния CubeIDE, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:

    1. ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: Project β†’ Clean.
    2. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ Debug Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.
    3. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ STM32Cube для вашСй сСрии МК.
    πŸ’‘

    ВсСгда провСряйтС Π»ΠΎΠ³ΠΈ компиляции (Console Π² CubeIDE) β€” часто ошибка скрываСтся Π² прСдупрСТдСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

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

    МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ STM32 CubeIDE для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ?

    НСт, STM32 CubeIDE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ STMicroelectronics (сСрии STM32F0/F1/F2/F3/F4/F7/H7/L0/L1/L4/L5/G0/G4/WB). Для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Ρ€Π΅Π½Π΄ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, NXP ΠΈΠ»ΠΈ Microchip) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ MCUXpresso ΠΈΠ»ΠΈ MPLAB X соотвСтствСнно.

    Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° Π² .ioc-Ρ„Π°ΠΉΠ»Π΅?

    ГСнСрация ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄ΠΎ 10–15 сСкунд для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ процСсс:

    • Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Π² .ioc (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Clock Configuration, Ссли Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠΆΠ΅ настроСно).
    • ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ сохранСнии: Window β†’ Preferences β†’ STM32Cube β†’ Code Generation β†’ Uncheck "Generate under editor".
    • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ SSD-Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ?

    Π­Ρ‚ΠΎ типичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. РСшСния:

    • ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ: Project Properties β†’ C/C++ Build β†’ Settings β†’ Optimization Level β†’ None (-O0).
    • Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² ΠΎΠΊΠ½ΠΎ Expressions (Π° Π½Π΅ Variables) ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΅Ρ‘ Ρ‚ΠΈΠΏ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, (uint32_t)myVar).
    • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ сбились Π»ΠΈ настройки ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°: Debug Configuration β†’ Debugger β†’ Uncheck "Enable SWO trace".

    Как пСрСнСсти ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ· Keil Π² STM32 CubeIDE?

    ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

    1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² CubeIDE для вашСго МК.
    2. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ .c ΠΈ .h ΠΈΠ· Keil Π² ΠΏΠ°ΠΏΠΊΠΈ Src/Inc.
    3. НастройтС .ioc-Ρ„Π°ΠΉΠ» (Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΡŽ).
    4. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (#include) β€” Π² Keil ΠΎΠ½ΠΈ часто ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π° Π² CubeIDE ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅.
    5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ настройки Π»ΠΈΠ½ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠ° (.ld-Ρ„Π°ΠΉΠ») β€” Π² Keil ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Keil ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ STM32xx_StdPeriph_Driver, Π° CubeIDE β€” HAL/LL. ΠŸΡ€ΠΈΠ΄Ρ‘Ρ‚ΡΡ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

    Π“Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² для STM32 CubeIDE?

    ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

    • Π’ самой CubeIDE: File β†’ New β†’ STM32 Project β†’ Examples.
    • На сайтС ST: STM32Cube MCU Packages (ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сСрии).
    • На GitHub: Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ STMicroelectronics (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32CubeF4).

    Для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π±ΠΎΡ‚Π° с LoRa ΠΈΠ»ΠΈ FreeRTOS) ΠΈΡ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° GitHub с Ρ‚Π΅Π³ΠΎΠΌ stm32-cubeide.