Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π° Π±Π°Π·Π΅ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² STM32 ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°Π½ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ARM Cortex-M, Π½ΠΎ ΠΈ Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. STM32 CubeIDE β ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡ STMicroelectronics, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π² ΡΠ΅Π±Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ΄Π° STM32CubeMX, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ GCC, ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ GDB ΠΈ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π°Π½Π°Π»ΠΈΠ·Π°. ΠΡΠ° IDE ΡΡΠ°Π»Π° ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π΅-ΡΠ°ΠΊΡΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΠΎΠ², ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΠΌ STM32, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ HAL/LL.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΡΡΡΠ΄Π½ΠΎΡΡΡΠΌΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π΅: ΠΎΡ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π· ST-Link ΠΈΠ»ΠΈ J-Link. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠΈ CubeIDE, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ Π² Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°Ρ
Π²ΡΠΎΠ΄Π΅ Keil ΠΈΠ»ΠΈ IAR, β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ Ρ ΡΡΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΡΠ°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ. ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠ½ΠΎΠ³Π΄Π° Β«ΠΏΠΎΠ΄Π²ΠΈΡΠ°Π΅ΡΒ» ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, ΠΈ ΠΊΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΊΡΡΠΏΠ½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° 30% Π·Π° ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ Makefile.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ STM32 CubeIDE ΠΈ ΡΠ΅ΠΌ ΠΎΠ½Π° Π»ΡΡΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²
STM32 CubeIDE β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, Π° ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΡΡΠΈΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ STM32. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ Π²ΡΠΎΠ΄Π΅ VS Code Ρ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ ΠΈΠ»ΠΈ Eclipse, CubeIDE ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»Π°ΡΡ Ρ ΡΡΡΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ STM32:
- π§ ΠΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ STM32CubeMX: Π²ΠΈΠ·ΡΠ°Π»ΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ (ΡΠ°ΠΉΠΌΠ΅ΡΡ, ADC, DMA ΠΈ Π΄Ρ.) Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π° Π΄Π»Ρ HAL/LL Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
- π‘ ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠ΅Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ² STM32: ΠΎΡ Π±ΡΠ΄ΠΆΠ΅ΡΠ½ΡΡ STM32F0 Π΄ΠΎ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ STM32H7 Ρ FPU ΠΈ ΠΊΡΡΠ΅ΠΌ.
- π ΠΡΠ»Π°Π΄ΡΠΈΠΊ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ SWO: Π²ΡΠ²ΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ²ΠΎΠ΄ (Π±Π΅Π· UART), ΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΡΡΡΠΎΠΉΡΡΠ² Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΡΠ²ΠΎΠ΄Π°ΠΌΠΈ.
- β‘ ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΡΠ»ΡΠ΅ΠΉΠ½: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ GCC Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΠ»Π°Π³Π°ΠΌΠΈ Π΄Π»Ρ STM32, ΡΡΠΎ Π΄Π°ΡΡ Π½Π° 10β15% ΠΌΠ΅Π½ΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Keil.
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ CubeIDE ΠΏΠ΅ΡΠ΅Π΄ Keil MDK ΠΈΠ»ΠΈ IAR Embedded Workbench β Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π΅Ρ Π΅ΡΡΡ ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² (100+ ΡΠ°ΠΉΠ»ΠΎΠ²) ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ RTOS (ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ TrueSTUDIO, ΠΊΠΎΡΠΎΡΡΡ CubeIDE Π·Π°ΠΌΠ΅Π½ΠΈΠ»Π°).
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈΠ· STM32CubeMX Π²Π΅ΡΡΠΈΠΈ ΡΡΠ°ΡΡΠ΅ 6.0 Π² CubeIDE 1.13+ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈETHΠΈUSB. ΠΠ΅ΡΠ΅Π΄ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ CubeMX Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠΏΡΠΈΡ"Force regenerate"Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° STM32 CubeIDE: ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ Windows, Linux ΠΈ macOS
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ CubeIDE ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. ΠΠ° Windows Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΎΡ Ρ ΡΠ°ΠΉΡΠ° STMicroelectronics ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠ΅ΡΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π½Π° Linux ΠΈ macOS ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ USB-ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ (Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°ΠΌΠΈ).
ΠΠ»Ρ Windows 10/11:
- Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΎΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° (Π²Π΅ΡΡΠΈΡ Π½Π΅ Π½ΠΈΠΆΠ΅ 1.13.0).
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΡΠΈΠΊ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°. ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ:
- β STM32CubeIDE (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)
- β STM32CubeMX (ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ)
- β ΠΡΠ°ΠΉΠ²Π΅ΡΡ Π΄Π»Ρ ST-Link (Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ST)
PATH:
C:\ST\STM32CubeIDE_1.13.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.0.0.202309121326\tools\bin
ΠΠ»Ρ Linux (Ubuntu/Debian):
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
sudo apt install libncurses5 libudev1 - Π Π°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ Π°ΡΡ
ΠΈΠ² Ρ CubeIDE Π²
/opt/ΠΈ Π½Π°Π·Π½Π°ΡΡΡΠ΅ ΠΏΡΠ°Π²Π°:sudo chmod +x /opt/STM32CubeIDE_1.13.0/stm32cubeide - ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ST-Link:
sudo usermod -a -G plugdev $USERsudo cp /opt/STM32CubeIDE_1.13.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.linux64_2.0.0.202309121326/resources/rules/99-stlink-v*.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
- Windows
- Linux
- macOS
- ΠΡΡΠ³ΡΡ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°: ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°
ΠΠ°ΡΠ½ΡΠΌ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° β Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ. ΠΡΠΈΠ±ΠΊΠΈ Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, USART Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ). Π CubeIDE ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ
ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ².
Π¨Π°Π³ΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ Π½ΡΠ»Ρ:
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ CubeIDE ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅
File β New β STM32 Project. - Π ΠΎΠΊΠ½Π΅
Target SelectionΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΠ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, STM32F407G-DISC1* Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡ STM32F4 Discovery). - Π ΡΠ°Π·Π΄Π΅Π»Π΅
Pinout & Configuration:- π ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ Clock Configuration: Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (HSI, HSE, PLL) ΠΈ ΡΠ΅Π»Π΅Π²ΡΡ ΡΠ°ΡΡΠΎΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 84 ΠΠΡ Π΄Π»Ρ STM32F4).
- βοΈ ΠΠΊΡΠΈΠ²ΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
USART2Π² ΡΠ΅ΠΆΠΈΠΌΠ΅Asynchronous). - π ΠΠ°Π·Π½Π°ΡΡΡΠ΅ ΠΏΠΈΠ½Ρ Π½Π° ΡΡ
Π΅ΠΌΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
PA2Π΄Π»ΡUSART2_TX).
GENERATE CODE.ΠΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΉΠ»Ρ:
main.cβ ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ HAL.stm32f4xx_hal_conf.hβ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ HAL.STM32F407G-DISC1.iocβ ΡΠ°ΠΉΠ» ΠΏΡΠΎΠ΅ΠΊΡΠ° CubeMX (ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ°ΡΡΠΎΡΠ° PLL Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π΄Π»Ρ ΡΠ΄ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 180 ΠΠΡ Π΄Π»Ρ STM32H7)|ΠΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΠΈΠ½Ρ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ Ρ JTAG/SWD|ΠΠΊΠ»ΡΡΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ -O2 Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°|ΠΡΠΊΠ»ΡΡΠΈΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² CubeMX Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ-->
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π² ΡΠ°ΠΉΠ»Π΅main.cΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²HAL_Init(), ΠΏΡΠΎΠ΅ΠΊΡ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ. ΠΡΠΎ Π±Π°Π³ CubeIDE 1.12β1.13, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ½ΡΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄SystemClock_Config().
ΠΡΠ»Π°Π΄ΠΊΠ° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΡΠ°Π±ΠΎΡΠ° Ρ ST-Link, J-Link ΠΈ OpenOCD
CubeIDE ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΡΠ»Π°Π΄ΠΊΠΈ:
| ΠΠ΅ΡΠΎΠ΄ | ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° | ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° |
|---|---|---|---|
| ST-Link | ΠΡΡΡΠΎΠ΅Π½ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΏΠ»Π°Ρ ST, Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² | ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ (Π΄ΠΎ 4 ΠΠΡ), Π½Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ | STM32F0/F1/F3/F4/F7/H7/G0/G4 |
| J-Link (SEGGER) | ΠΡΡΠΎΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ (Π΄ΠΎ 12 ΠΠΡ), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° RTT ΠΈ SWO | ΠΠ»Π°ΡΠ½ΠΎΠ΅ ΠΠ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ | ΠΡΠ΅ STM32, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ARM Cortex-M |
| OpenOCD | ΠΡΠΊΡΡΡΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, Π³ΠΈΠ±ΠΊΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° | Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡΡ | ΠΡΠ±ΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ CMSIS-DAP |
ΠΠ»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠ΅ΡΠ΅Π· ST-Link:
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΠΊ ΠΏΠ»Π°ΡΠ΅ ΠΈ ΠΠ.
- Π CubeIDE Π²ΡΠ±Π΅ΡΠΈΡΠ΅
Run β Debug Configurations. - Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠΈΠΏΠ°
STM32 Cortex-M C/C++ Application. - ΠΠΊΠ»Π°Π΄ΠΊΠ°
Debugger:- ΠΡΠ±Π΅ΡΠΈΡΠ΅
ST-Link (OpenOCD)ΠΈΠ»ΠΈST-Link (ST-Link GDB Server). - Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΠΎΡΡ (ΠΎΠ±ΡΡΠ½ΠΎ
3333Π΄Π»Ρ OpenOCD). - Π ΠΏΠΎΠ»Π΅
Config optionsΠ΄ΠΎΠ±Π°Π²ΡΡΠ΅-f interface/stlink.cfg -f target/stm32f4x.cfg(Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅f4xΠ½Π° Π²Π°ΡΡ ΡΠ΅ΡΠΈΡ).
- ΠΡΠ±Π΅ΡΠΈΡΠ΅
ΠΡΠ»ΠΈ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΠΠ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²ΡΡΡΠ½ΡΡ ΡΠ±ΡΠΎΡΠΈΡΡ ΠΏΠ»Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ NRST ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ monitor reset halt Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ GDB.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°: ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΠΈ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ CubeIDE Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Β«ΡΠ°Π·Π΄ΡΡΠΎΠΉΒ» ΠΏΡΠΎΡΠΈΠ²ΠΊΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ΅ΠΊΡ Π΄Π»Ρ STM32F103 Ρ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ USART ΠΈ GPIO ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π΄ΠΎ 30 ΠΠ Flash, Ρ ΠΎΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ 8β12 ΠΠ. ΠΠΎΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ:
1. ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°:
- πΉ Π
Project Properties β C/C++ Build β Settings β Tool Settings β MC SettingsΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅:- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ:
-Os(ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ) Π²ΠΌΠ΅ΡΡΠΎ-O0. - Π£ΡΠΎΠ²Π΅Π½Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ:
-g2Π²ΠΌΠ΅ΡΡΠΎ-g3. - ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π°Π³
-ffunction-sections -fdata-sectionsΠΈ--gc-sectionsΠ² Π»ΠΈΠ½ΠΊΠ΅Ρ.
- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ:
- πΉ ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ HAL Π²
CubeMX(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅I2C, ΡΠ½ΠΈΠΌΠΈΡΠ΅ Π³Π°Π»ΠΎΡΠΊΡ Π²Middleware).
2. ΠΠ°ΠΌΠ΅Π½Π° HAL Π½Π° LL (Low Layer):
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° HAL Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ. ΠΠ»Ρ ΠΊΡΠΈΡΠΈΡΠ½ΡΡ
ΠΊ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΡΠ°ΡΡΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ LL-Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ. ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΌΠ΅Π½Ρ:
// HAL (ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½ΠΎ ΠΏΡΠΎΡΠ΅)
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
// LL (Π±ΡΡΡΡΠ΅Π΅, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ)
LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_5);
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ LL Π²ΠΌΠ΅ΡΡΠΎ HAL ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° 20β40%, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ.
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠ°ΠΆΠ΅ ΠΎΠΏΡΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π² CubeIDE. ΠΠΎΡ ΡΠ°ΠΌΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ:
- π¨ "No ST-Link detected":
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° (ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³ΠΎΡΠ΅ΡΡ).
- ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ ΡΠ΅ΡΠ΅Π· STSW-LINK009 (ΡΡΠΈΠ»ΠΈΡΠ° ΠΎΡ ST).
- ΠΠ»Ρ Linux: ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π³ΡΡΠΏΠΏΠ΅
plugdev.
- π¨ "HardFault Handler" ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅:
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΠ°ΡΡΠ°Ρ ΠΏΡΠΈΡΠΈΠ½Π° β Π½Π΅Π²Π΅ΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° PLL).
- ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ (
-O0) Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
Registers ViewΠ² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉHFSR,CFSR.
- π¨ "Flash download failed":
- Π£ΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ 4000 ΠΊΠΡ Π΄ΠΎ 1800 ΠΊΠΡ).
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, Π½Π΅ Π·Π°ΡΠΈΡΠ΅Π½Π° Π»ΠΈ Flash ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ (Π±ΠΈΡΡ
WRPRΠ²Option Bytes).
ΠΠ°ΠΊ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ HardFault
1. Π ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° SCB->HFSR. ΠΡΠ»ΠΈ Π±ΠΈΡ FORCED ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΡΡΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ NVIC_SystemReset().
2. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ SCB->CFSR:
- ΠΠΈΡ DACCVIOL β ΠΎΡΠΈΠ±ΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ.
- ΠΠΈΡ UNSTKERR β ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°.
3. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ arm-none-eabi-objdump -d -S Π²Π°Ρ_elf.elf Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΌΠ΅ΡΡΠ΅ ΠΊΡΠ°Ρ
Π°.
ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠΈΡΠΈ: Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ, RTOS ΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° SWO
CubeIDE Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΈ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π²Π°ΠΆΠ½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²:
1. ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ (Power Consumption Calculator):
- π ΠΠΎΡΡΡΠΏΠ΅Π½ Π²
CubeMX(Π²ΠΊΠ»Π°Π΄ΠΊΠ°Power Consumption). - ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΡΠΎΠΊ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ°Ρ
Run,Sleep,StopΡ ΡΡΡΡΠΎΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ. - πΉ ΠΡΠΈΠΌΠ΅Ρ: ΠΠ»Ρ STM32L4 Ρ Π°ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ
LPUARTΠΈRTCΠ² ΡΠ΅ΠΆΠΈΠΌΠ΅Stop 2ΡΠΎΠΊ ΡΠΎΡΡΠ°Π²ΠΈΡ ~3 ΠΌΠΊΠ.
2. ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ FreeRTOS:
- π οΈ Π
CubeMXΠ²ΡΠ±Π΅ΡΠΈΡΠ΅Middleware β FreeRTOSΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ (ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ°, ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ Π·Π°Π΄Π°Ρ). - πΉ ΠΠ°ΠΆΠ½ΠΎ: ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ STM32H7 Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡ
"Use Newlib nano"Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π»ΠΈΠ½ΠΊΠ΅ΡΠ°. - π ΠΠ»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½
FreeRTOS Thread Awareness(ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π·Help β STM32Cube Extension Manager).
3. Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ΅Π· SWO:
- π‘ Π’ΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ SWO (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ST-Link V3 ΠΈΠ»ΠΈ J-Link).
- π§ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°:
// Π main.c#include "core_cm4.h" // ΠΈΠ»ΠΈ core_cm7.h Π΄Π»Ρ STM32H7
void ITM_SendChar(uint8_t ch) {
ITM->PORT[0].u8 = ch;
while (ITM->PORT[0].u8 == ch);
}
- π₯οΈ ΠΠ»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π΄Π°Π½Π½ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
STM32CubeMonitorΠΈΠ»ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½SWO ViewerΠ² CubeIDE.
FAQ: ΠΎΡΠ²Π΅ΡΡ Π½Π° ΡΠ°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CubeIDE Π΄Π»Ρ STM8?
ΠΠ΅Ρ, CubeIDE ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ Π½Π° Π±Π°Π·Π΅ ARM Cortex-M (STM32). ΠΠ»Ρ STM8 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ STM8CubeIDE ΠΈΠ»ΠΈ IAR for STM8.
ΠΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ· Keil Π² CubeIDE?
ΠΠΌΠΏΠΎΡΡ Π½Π°ΠΏΡΡΠΌΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ:
- ΠΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈΠ· Keil Π² ΡΠΎΡΠΌΠ°ΡΠ΅
.c/.h. - Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π² CubeIDE ΠΈ Π²ΡΡΡΠ½ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ.
- ΠΠ°ΡΡΡΠΎΠΈΡΡ
MakefileΠ΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ GCC (Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ»ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Keil Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈ Π΄Π»Ρarm-none-eabi-gcc).
ΠΠΎΡΠ΅ΠΌΡ CubeIDE Π΄ΠΎΠ»Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡ?
ΠΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ (100+ ΡΠ°ΠΉΠ»ΠΎΠ²). Π Π΅ΡΠ΅Π½ΠΈΡ:
- ΠΡΠΊΠ»ΡΡΠΈΡΠ΅
IndexerΠ²Window β Preferences β C/C++ β Indexer(ΡΡΠΊΠΎΡΠΈΡ ΡΠ°Π±ΠΎΡΡ, Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅). - Π Π°Π·Π±Π΅ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π½ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ SSD Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ CubeIDE Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ?
ΠΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΠ΅ΡΠ΅Π· Help β Check for Updates Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ. ΠΡΠ»ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΠ΅ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Ρ Π½ΡΠ»Ρ:
- Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ
workspace(ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ). - ΠΠΊΡΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠ΅Π·
File β Export β General β Preferences. - ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ ΡΡΠ°ΡΠΎΠΌΡ
workspace.
ΠΠ΄Π΅ Π½Π°ΠΉΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ CubeIDE?
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ:
- Π ΡΠΎΡΡΠ°Π²Π΅ STM32CubeF4 (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΠ΅ΡΠΈΠΈ) Π² ΠΏΠ°ΠΏΠΊΠ΅
Projects. - ΠΠ° ΡΠ°ΠΉΡΠ΅ ST: STM32Cube MCU Packages.
- ΠΠ° GitHub: ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ
STMicroelectronics(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, STM32CubeH7).