Π Π°Π±ΠΎΡ‚Π° с ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ STM32 стала Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ благодаря ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ STM32CubeIDE ΠΎΡ‚ STMicroelectronics. Π­Ρ‚ΠΎΡ‚ инструмСнт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² сСбС компилятор, ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° ΠΈ графичСский ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌ для ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΈ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ элСктроники. Однако для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² интСрфСйс ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» IDE ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТными β€” ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² основах ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ практичСским ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±Π°Π·Ρƒ, Π½ΠΎ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ практичСскиС совСты ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с STM32CubeIDE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠœΡ‹ рассмотрим установку срСды, созданиС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, настройку ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· CubeMX, ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈ Π΄Π°ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с внСшними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам ΠΈ способам ΠΈΡ… устранСния β€” это сэкономит Π²Π°ΠΌ часы поиска Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ°Ρ….

Установка STM32CubeIDE: пошаговая инструкция для Windows, Linux ΠΈ macOS

ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ саму срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. STM32CubeIDE доступна для всСх популярных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Π½ΠΎ процСсс установки ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΡŽΠ°Π½ΡΡ‹ Π² зависимости ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. На ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС STMicroelectronics всСгда доступна послСдняя вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΎΡ‚Ρ‚ΡƒΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ.

Для Windows установка максимально проста: достаточно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скачанный .exe-Ρ„Π°ΠΉΠ» ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ инструкциям мастСра. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π² администратора для установки Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° ST-Link. На Linux (Ubuntu/Debian) ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .deb-ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ»ΠΈ установку Ρ‡Π΅Ρ€Π΅Π· snap, Π° для macOS доступСн .dmg-ΠΎΠ±Ρ€Π°Π·. Π’ΠΎ всСх случаях послС установки потрСбуСтся ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° систСмы.

  • πŸ“₯ Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ установочный Ρ„Π°ΠΉΠ» с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта (Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠΎΠ΄ Π²Π°ΡˆΡƒ ОБ).
  • πŸ”§ УстановитС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ST-Link (входят Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ поставки IDE).
  • πŸ”„ ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ послС установки β€” это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.
  • πŸ› οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· мСню Help β†’ Check for Updates.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ антивирус Avast ΠΈΠ»ΠΈ Kaspersky, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π²ΠΎ врСмя установки. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ST-Link, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚.
πŸ“Š ΠšΠ°ΠΊΡƒΡŽ ОБ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с STM32CubeIDE?
  • Windows
  • Linux (Ubuntu/Debian)
  • macOS
  • Другая

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: ΠΎΡ‚ шаблона Π΄ΠΎ компиляции

ПослС установки STM32CubeIDE самоС врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Начнём с ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° β€” мигания свСтодиодом Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ STM32 Nucleo. Для этого Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ File β†’ New β†’ STM32 Project ΠΈ слСдуйтС мастСру создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. На этапС Π²Ρ‹Π±ΠΎΡ€Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ сСмСйству (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32F4) ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ модСль, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ вашСй ΠΏΠ»Π°Ρ‚Π΅.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΡ‚Π΅ настройкС тактирования (clock configuration). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ IDE ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ с внСшним ΠΊΠ²Π°Ρ€Ρ†Π΅Π²Ρ‹ΠΌ Ρ€Π΅Π·ΠΎΠ½Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π½ΠΎ для простых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ HSI. ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ main.c ΠΈ stm32f4xx_it.c β€” ΠΈΠΌΠ΅Π½Π½ΠΎ здСсь Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ваш основной ΠΊΠΎΠ΄ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ.

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ STM32CubeIDE|ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ ΠΊ USB|Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ модСль МК Π² мастСрС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°|ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Clock Configuration)|Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Generate Code)

-->

Π­Ρ‚Π°ΠΏ ДСйствиС ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ»Π°Ρ‚Ρ‹ Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ сСмСйству (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32F1) Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡Π½ΡƒΡŽ модСль вашСго МК
Настройка тактирования Π’Ρ‹Π±ΠΎΡ€ источника HSI/HSE Для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… рСкомСндуСтся HSI (16 MHz)
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ GPIO НазначСниС ΠΏΠΈΠ½Π° свСтодиода ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Pinout & Configuration
ГСнСрация ΠΊΠΎΠ΄Π° Кнопка GENERATE CODE ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ main.c ΠΈ stm32f4xx_hal_conf.h

ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° откроСтся Ρ„Π°ΠΉΠ» main.c с шаблоном Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main(). Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ сразу Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Ρ†ΠΈΠΊΠ» для мигания свСтодиодом:

while (1)

{

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° ваш ΠΏΠΈΠ½

HAL_Delay(500); // Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° 500 мс

}

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если ΠΏΡ€ΠΈ компиляции Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка undefined reference to `HAL_Delay', ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ stm32f4xx_hal_conf.h раскоммСнтирована строка #define HAL_Delay(__DELAY__). Π­Ρ‚ΠΎ частая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π Π°Π±ΠΎΡ‚Π° с CubeMX: Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ настройка ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ

Одним ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… прСимущСств STM32CubeIDE являСтся встроСнный инструмСнт CubeMX β€” графичСский ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. Он позволяСт Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, GPIO, Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹, ADC ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ написания ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ CubeMX ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ нСпосрСдствСнно Π² IDE, Ρ‡Ρ‚ΠΎ ускоряСт процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с CubeMX ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» .ioc Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ (ΠΎΠ½ создаётся автоматичСски ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°). Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ схСму ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° с доступными ΠΏΠΈΠ½Π°ΠΌΠΈ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ UART для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΈΠ½ TX (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PA9) ΠΈ Π½Π°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ USART1_TX.
  2. Аналогично настройтС ΠΏΠΈΠ½ RX (PA10 β†’ USART1_RX).
  3. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Connectivity β†’ USART1 установитС ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 115200 Π±ΠΎΠ΄).
  4. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ GENERATE CODE.

ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ main.c появятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ MX_USART1_UART_Init(), Π° Π² stm32f4xx_hal_uart.h β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ опрСдСлСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ HAL для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с UART, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

char message[] = "Hello from STM32!\r\n";

HAL_UART_Transmit(&huart1, (uint8_t*)message, strlen(message), HAL_MAX_DELAY);

πŸ’‘

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΏΠ»Π°Ρ‚Π°ΠΌΠΈ Nucleo ΠΈΠ»ΠΈ Discovery, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнный Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ COM-ΠΏΠΎΡ€Ρ‚ (ST-Link). Он появляСтся Π² систСмС ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ COM-устройство ΠΈ позволяСт ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π±Π΅Π· внСшнСго USB-UART Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых Π²Π°ΠΆΠ½Ρ‹Ρ… этапов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. STM32CubeIDE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· встроСнный ST-Link (для ΠΏΠ»Π°Ρ‚ Nucleo/Discovery) ΠΈΠ»ΠΈ внСшниС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ (J-Link, OpenOCD). Для Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρƒ ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Ρ‡Π΅Ρ€Π΅Π· USB ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ мСню Run β†’ Debug Configurations.

Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ STM32 Cortex-M C/C++ Application ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅:

  • πŸ”Œ Π’ΠΈΠΏ соСдинСния: ST-Link (OpenOCD) ΠΈΠ»ΠΈ ST-Link (SWD).
  • πŸ“Œ ΠŸΠΎΡ€Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ SWD (Serial Wire Debug).
  • πŸ” Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Debug (-O0).

ПослС запуска ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π²Ρ‹ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Debug Perspective, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ:

  • Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ останова (Breakpoints).
  • ΠŸΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Variables).
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пошаговоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° (Step Into/Over).
  • ΠΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС памяти ΠΈ рСгистров (Memory, Registers).
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка "No ST-Link detected", ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ‹ ΠΏΠΎ USB ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ST-Link установлСны ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π’ диспСтчСрС устройств ΠΏΠ»Π°Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ST-Link Debug ΠΈΠ»ΠΈ STMicroelectronics ST-Link.
Как ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ зависший ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Ρ‡Π΅Ρ€Π΅Π· ST-Link?

Если МК завис ΠΈ Π½Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° сброс, Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС сСссии ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² IDE, Π·Π°Ρ‚Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

ST-Link_CLI.exe -c UR -P stm32f4xx -V

Π­Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ сброс ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· интСрфСйс SWD. ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ.

Π Π°Π±ΠΎΡ‚Π° с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ HAL ΠΈ LL: Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°?

STM32CubeIDE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π΅ основныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠ΅ΠΉ: HAL (Hardware Abstraction Layer) ΠΈ LL (Low Layer). КаТдая ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ свои прСимущСства ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. HAL прСдоставляСт высокоуровнСвый API с ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ функциями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, HAL_GPIO_TogglePin()), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΉ для простых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². LL, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ прямой доступ ΠΊ рСгистрам, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ МК.

Для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… рСкомСндуСтся Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с HAL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ содСрТит Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок. НапримСр, инициализация Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· HAL выглядит Ρ‚Π°ΠΊ:

TIM_HandleTypeDef htim2;

htim2.Instance = TIM2;

htim2.Init.Prescaler = 8400 - 1; // Для Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ 84 MHz

htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

HAL_TIM_Base_Init(&htim2);

HAL_TIM_Base_Start(&htim2);

Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° LL потрСбуСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ рСгистры. НапримСр, Ρ‚Π° ΠΆΠ΅ инициализация Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· LL:

LL_TIM_InitTypeDef TIM_InitStruct;

LL_TIM_StructInit(&TIM_InitStruct);

TIM_InitStruct.Prescaler = 8400 - 1;

LL_TIM_Init(TIM2, &TIM_InitStruct);

LL_TIM_EnableCounter(TIM2);

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ HAL LL
Удобство ⭐⭐⭐⭐⭐ ⭐⭐
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ⭐⭐ ⭐⭐⭐⭐⭐
Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ (ΠΈΠ·-Π·Π° абстракций) ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ
ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠžΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡
πŸ’‘

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ HAL ΠΈ LL: HAL для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ, LL для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ участков ΠΊΠΎΠ΄Π°.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: Ρ‡Π΅ΠΊ-лист для устранСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ошибками ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² STM32CubeIDE. НиТС ΠΌΡ‹ собрали Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Если ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ компилируСтся ΠΈΠ»ΠΈ МК Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ оТидалось, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • ❌ Ошибка компиляции undefined reference β†’ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² stm32f4xx_hal_conf.h.
  • ⚑ МК Π½Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ β†’ Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ (SWD ΠΈΠ»ΠΈ JTAG).
  • πŸ”„ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ β†’ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (часто ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ настройкС PLL).
  • πŸ“‘ UART Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ β†’ Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΠ½Ρ‹ TX/RX настроСны ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½Π° совпадаСт.

Одна ΠΈΠ· самых ΠΊΠΎΠ²Π°Ρ€Π½Ρ‹Ρ… ошибок β€” hard fault, ΠΊΠΎΠ³Π΄Π° МК Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ сбрасываСтся. Для диагностики Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгистр SCB->HFSR (Hard Fault Status Register). Π’ STM32CubeIDE Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² ΠΎΠΊΠ½Π΅ Registers. ЧастыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ hard fault:

  • ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ указатСлям.
  • ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка Π² .ioc).
  • ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ настройка тактирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, слишком высокая частота для Π΄Π°Π½Π½ΠΎΠ³ΠΎ МК).
πŸ’‘

Если Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ "Flash Download failed" ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ΅, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² настройках ST-Link (мСню Debug Configurations β†’ Debugger β†’ ST-Link β†’ Frequency). Иногда ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ сниТСниС с 4 MHz Π΄ΠΎ 1.5 MHz.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ возмоТности: интСграция с Git, CMSIS ΠΈ внСшними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ

Для ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ STM32CubeIDE с систСмой контроля вСрсий Git. Π’ IDE встроСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Git, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² ΠΊΠΎΠ΄Π΅, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с рСпозиториями Π½Π° GitHub ΠΈΠ»ΠΈ GitLab. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ File β†’ Import β†’ Git β†’ Projects from Git ΠΈ слСдуйтС инструкциям.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° мощная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€” использованиС CMSIS (Cortex Microcontroller Software Interface Standard). Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ядром Cortex-M, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ пСрСнос ΠΊΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сСмСйствами STM32. НапримСр, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SysTick Ρ‡Π΅Ρ€Π΅Π· CMSIS достаточно:

SysTick_Config(SystemCoreClock / 1000); // Настройка SysTick Π½Π° 1 мс

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FreeRTOS ΠΈΠ»ΠΈ FatFS) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ STM32CubeMX:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» .ioc вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Software Packs β†’ Select Components.
  3. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FreeRTOS).
  4. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ β€” IDE автоматичСски Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ использовании FreeRTOS ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ FreeRTOSConfig.h ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ настроСны ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ configTOTAL_HEAP_SIZE ΠΈ configMAX_PRIORITIES. НСдостаточный Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ (heap) β€” частая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΊΡ€Π°Ρ…ΠΎΠ² Π² ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

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

Как ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ STM32CubeIDE Π΄ΠΎ послСднСй вСрсии?

ОбновлСниС ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ двумя способами:

  1. Π§Π΅Ρ€Π΅Π· мСню IDE: Help β†’ Check for Updates.
  2. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ с сайта STMicroelectronics ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… старой (настройки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² сохранятся).

ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈ сдСлайтС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области (workspace).

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

НСт, STM32CubeIDE спСциализирована ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² сСмСйства STM32. Для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, AVR, PIC, ESP32) ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: Atmel Studio, MPLAB X ΠΈΠ»ΠΈ ESP-IDF соотвСтствСнно.

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

Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, созданный Π² STM32CubeMX, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ STM32CubeIDE ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ File β†’ Import β†’ STM32CubeMX β†’ Existing STM32CubeMX Project.
  2. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ .ioc вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  3. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ (workspace) ΠΈ Π΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.

ВсС настройки ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ ΠΈ сгСнСрированный ΠΊΠΎΠ΄ Π±ΡƒΠ΄ΡƒΡ‚ пСрСнСсСны автоматичСски.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…?

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ связана с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ свойства ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Project β†’ Properties).
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² C/C++ Build β†’ Settings β†’ Optimization.
  3. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ None (-O0) для ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ сборки.

Π’Π°ΠΊΠΆΠ΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ компиляция ΠΏΡ€ΠΎΡˆΠ»Π° Π±Π΅Π· ошибок β€” ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΈΠ·-Π·Π° Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ символа ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

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

STMicroelectronics прСдоставляСт ΠΎΠ±ΡˆΠΈΡ€Π½ΡƒΡŽ Π±Π°Π·Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

  • Π’ самой IDE: File β†’ New β†’ STM32 Project β†’ Board Selector (Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ свою ΠΏΠ»Π°Ρ‚Ρƒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€).
  • На сайтС ST.com Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Resources β†’ Software β†’ STM32Cube Expansion Packages.
  • На GitHub Π² рСпозиториях STMicroelectronics (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32CubeF4).

Для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с ΠΌΠΈΠ³Π°Π½ΠΈΠ΅ΠΌ свСтодиода (GPIO_IOToggle) ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с UART (UART_Printf).