RAL RAL ST
Модуль Register Abstraction Layer: поєднує оригінальні драйвери HAL/LL від STMicroelectronics із власним апаратно-незалежним інтерфейсним рівнем Embedbits (Port/). Використовується як git submodule репозиторію Bsp-Ral, по одній гілці на родину/реліз STM32.
Огляд
Вихідний проєкт (Stm32_Drv/) | STMicroelectronics/stm32<family>xx_hal_driver (наприклад, stm32g4xx_hal_driver) |
Вміст, що належить Embedbits (Port/) | Уніфіковані, незалежні від родини назви функцій і заголовків поверх API ST HAL/LL |
| Роль у Bsp-Ral | Джерело як для Ral_Lib (рекомендовано, інтерфейс лише з Port/), так і для HAL_LL_Lib (повний доступ до ST HAL/LL) |
| Ліцензія | Для вихідного коду драйверів, похідного від ST, дивіться Stm32_Drv/License.md; рівень Port/ від Embedbits підпорядковується ліцензії батьківського репозиторію |
| Модель супроводу | Stm32_Drv/ дзеркалюється з оригіналу ST для кожної родини і не повинен змінюватися локально; Port/ підтримує Embedbits |
⚠️ Не змінюйте
Stm32_Drv/безпосередньо — оновлення відстежуються відносно оригінального репозиторію ST. Апаратно-незалежні зміни слід вносити вPort/.
Структура гілок
| Шаблон гілки | Призначення |
|---|---|
STM32<family> (наприклад, STM32G4, STM32U5, STM32H7) | Гілка родини, відгалужена від master, з драйверами ST HAL/LL та інтерфейсом Port/ для цієї родини |
STM32<family>_<major>.x (наприклад, STM32G4_1.x) | Гілка мажорного релізу, відгалужена від гілки родини, що відстежує мажорний реліз ST HAL |
STM32<family>_<major>.<minor> (наприклад, STM32G4_1.2) | Гілка мінорного релізу/патча, відгалужена від гілки мажорного релізу |
Усі гілки родин відгалужуються від master.
Структура репозиторію
RAL_ST
├── Port # Embedbits' hardware-independent interface layer
│ ├── Stm32.h # Umbrella include
│ ├── Stm32_tim.h # Unified timer interface
│ ├── Stm32_i2c.h # Unified I2C interface
│ ├── Stm32_spi.h # Unified SPI interface
│ ├── Stm32_gpio.h
│ ├── Stm32_usart.h
│ └── ... # One header per peripheral, family-independent naming
└── Stm32_Drv # Original HAL/LL drivers, unmodified from STMicroelectronics
├── Inc # HAL/LL headers (e.g. stm32g4xx_ll_tim.h)
├── Src # HAL/LL sources (e.g. stm32g4xx_ll_tim.c)
└── License.md
Port/ — уніфікований інтерфейс
Port/ надає по одному заголовку на периферійний модуль з іменуванням функцій/типів, незалежним від родини STM32, тож код застосунку може перемикатися між родинами STM32 без зміни власного вихідного коду:
#include "Stm32_tim.h" // Automatically selects the correct HAL headers based on the target MCU define
Використання
І Ral_Lib, і HAL_LL_Lib визначені в кореневому CMakeLists.txt репозиторію Bsp-Ral та використовують дві директорії цього модуля:
| Ціль CMake | Публічний шлях include | Призначення |
|---|---|---|
Ral_Lib | RAL_ST/Port/ | Рекомендовано. Стабільний, апаратно-незалежний API для коду застосунку/middleware |
HAL_LL_Lib | RAL_ST/Stm32_Drv/Inc/ | Повний доступ до ST HAL/LL, лише для внутрішньої інтеграції та тестування |
# Recommended interface
target_link_libraries(MyApp PRIVATE Ral_Lib)
# Extended low-level access (not recommended for modular projects)
target_link_libraries(MyApp PRIVATE HAL_LL_Lib)
#include "Stm32_tim.h" // Unified abstraction header, via Ral_Lib
⚠️
Ral_Libє єдиним офіційно підтримуваним інтерфейсом для зовнішніх проєктів. ВикористовуйтеHAL_LL_Libлише тоді, коли явно потрібен прямий API ST HAL/LL.
Ліцензія
Компоненти Stm32_Drv/ походять від драйверів STMicroelectronics HAL/LL і поширюються за їхньою відповідною ліцензією — дивіться Stm32_Drv/License.md. Інтерфейсний рівень Port/ — це оригінальний код Embedbits, що поширюється за ліцензією батьківського репозиторію Bsp-Ral.