Π£ Π½Π°Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ STM32H743VIT6 STM32 Development Board +ΠΊΠ°ΠΌΠ΅ΡΠ°17 ΠΎΠΊΡΡΠ±ΡΡ 2025 Π³. ΠΈΠ»ΠΈ ΡΠΊΠ°ΡΠ°ΡΡ Π² ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅, Π²ΠΈΠ΄Π΅ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ Π½Π° ΡΡΡΠ±. ΠΠ»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ· ΡΠΎΡΠΌΡ Π½ΠΈΠΆΠ΅:
ΠΡΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Π½Π΅
Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈΡΡ
ΠΠΠΠΠΠ’Π ΠΠΠΠ‘Π¬ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ
ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ° Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Π²Π½ΠΈΠ·Ρ
ΡΡΡΠ°Π½ΠΈΡΡ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ClipSaver.ru
ΠΠΎΠΊΡΠΏΠ°Π» ΡΡΡ https://megabonus.com/y/4THrt
DataLink
https://github.com/WeActStudio/MiniST...
---
1. STM32H743VIT6 β ΠΎΠ±Π·ΠΎΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°
*STM32H743VIT6* β ΡΡΠΎ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° *STM32H7* ΠΎΡ STMicroelectronics. ΠΠ½ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²ΡΡΠΎΠΊΠΎΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ, Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ:
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
| ------------------ | ----------------------------------------------------------------------------------------------- |
| Π―Π΄ΡΠΎ | **ARM Cortex-M7**, 32-Π±ΠΈΡ, 400 MHz |
| ΠΠ°ΠΌΡΡΡ | Flash 1 MB, SRAM 564 KB (Π²ΠΊΠ»ΡΡΠ°Ρ DTCM, AXI SRAM) |
| ΠΠ°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΡ | 1.7β3.6 V |
| Π’Π°ΠΊΡΠΎΠ²Π°Ρ ΡΠ°ΡΡΠΎΡΠ° | Π΄ΠΎ 400 MHz (CPU), FPU ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°) |
| DMA | 16 ΠΊΠ°Π½Π°Π»ΠΎΠ² DMA + ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΡΠ΅ DMA |
| GPIO | Π΄ΠΎ 168 ΠΏΠΈΠ½ΠΎΠ² (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΡΠΏΡΡΠ° LQFP100) |
| ΠΠΎΡΡΡ | USART, SPI, I2C, CAN, USB OTG FS/HS, SDMMC, QUADSPI |
| ADC / DAC | ADC 16 Π±ΠΈΡ, Π΄ΠΎ 3 Msps; DAC 12 Π±ΠΈΡ |
| Π’Π°ΠΉΠΌΠ΅ΡΡ | 17 ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ advanced timers Π΄Π»Ρ Π¨ΠΠ ΠΈ ΡΠ°ΠΉΠΌΠΈΠ½Π³Π° |
| ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ | FPU (Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ), ART Accelerator Π΄Π»Ρ Flash, ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡ (HASH/CRYP), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ |
*ΠΡΠ²ΠΎΠ΄:* STM32H743VIT6 β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΌΠΎΡΠ½ΡΡ
ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² Π² Π»ΠΈΠ½Π΅ΠΉΠΊΠ΅ STM32H7, ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ real-time ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΡΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ.
---
2. FreeRTOS Π½Π° STM32H743VIT6
*FreeRTOS* β ΡΡΠΎ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
Π Π°Π·Π΄Π΅Π»ΡΡΡ ΠΊΠΎΠ΄ Π½Π° *Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Ρ (tasks)*
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ *ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, ΠΌΡΡΡΠ΅ΠΊΡΡ, ΡΠ°ΠΉΠΌΠ΅ΡΡ*
Π£ΠΏΡΠ°Π²Π»ΡΡΡ *ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ Π·Π°Π΄Π°Ρ*
ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΠΈ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ
ΠΠ° STM32H743VIT6 FreeRTOS ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ *HAL (Hardware Abstraction Layer) STM32Cube* ΠΈΠ»ΠΈ Ρ **LL (Low-Level) Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌΠΈ**.
ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
```
main.c
|- SystemClock_Config() // ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ°ΡΡΠΎΡΡ ΡΠ΄ΡΠ° ΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ
|- MX_GPIO_Init() // ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° GPIO
|- MX_USARTx_UART_Init() // ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° UART
|- MX_DMA_Init() // ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° DMA (Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ)
|- MX_FREERTOS_Init() // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ, ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ², ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ²
|- HAL_Init() // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ HAL
|- osKernelStart() // ΠΠ°ΠΏΡΡΠΊ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° FreeRTOS
```
---
2.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ Π² FreeRTOS
ΠΡΠΈΠΌΠ΅Ρ Π½Π° STM32H7 (HAL + FreeRTOS):
```c
#include "FreeRTOS.h"
#include "task.h"
void Task1(void *pvParameters)
{
for(;;)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
vTaskDelay(pdMS_TO_TICKS(500)); // ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° 500 ΠΌΡ
}
}
void Task2(void *pvParameters)
{
for(;;)
{
HAL_UART_Transmit(&huart1, (uint8_t *)"Hello FreeRTOS
", 15, HAL_MAX_DELAY);
vTaskDelay(pdMS_TO_TICKS(1000)); // ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° 1 ΡΠ΅ΠΊ
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
xTaskCreate(Task1, "LED", 128, NULL, 1, NULL);
xTaskCreate(Task2, "UART", 256, NULL, 1, NULL);
vTaskStartScheduler(); // ΠΠ°ΠΏΡΡΠΊ FreeRTOS
while(1) {}
}
```
*ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π΄Π»Ρ STM32H743VIT6:*
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π²ΡΡΠΎΠΊΠΎΡΠΊΠΎΡΠΎΡΡΠ½ΠΎΠΌΡ ΡΠ΄ΡΡ (400 MHz) ΠΈ Π±ΠΎΠ»ΡΡΠΈΠΌ SRAM ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Ρ Ρ Π²ΡΡΠΎΠΊΠΈΠΌΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ.
FreeRTOS ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ *SysTick ΠΈΠ»ΠΈ TIMx* Π΄Π»Ρ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°. ΠΠ° STM32H7 ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ *Timer* Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠΌΠΈΠ½Π³Π°.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° *ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ* ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠ΅ΠΉ (UART, SPI, I2C, CAN) Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ.
---
2.2 ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΠΎΠ²Π΅ΡΡ
1. *ΠΡΠ±ΠΎΡ heap* β STM32H7 ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ SRAM. Π FreeRTOS ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ `heap_4.c` Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ.
2. *ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ²* β Cortex-M7 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ 16 ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ FreeRTOS ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡΠΌΠΈ.
3. *ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ DMA* β Π²ΡΡΠΎΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ FreeRTOS ΠΈ DMA Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ.
4. *ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ FPU* β FreeRTOS ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ FPU Π΄Π»Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π½ΡΡΡΠΈ Π·Π°Π΄Π°Ρ.