Огляд RAL
Цей репозиторій забезпечує структуровану основу для розробки вбудованих систем на мікроконтролерах STM32.
Він об'єднує кілька рівнів апаратної абстракції та конфігурацій, специфічних для пристроїв, у модульні компоненти.
📁 Структура репозиторію
├── CMSIS # Core CMSIS components provided by ARM
│ ├── CMSIS
│ │ ├── Core
│ │ | └── Include # ARM Cortex-M core headers
│ │ ├── Core_A
│ │ ├── CoreValidation
│ │ ├── DAP
│ │ ├── DoxyGen
│ │ ├── Driver
│ │ ├── DSP
│ │ ├── NN
│ │ ├── Pack
│ │ ├── RTOS
│ │ ├── RTOS2
│ │ └── Utilities
│ └── Device
│ └── ARM
|
├── CMSIS_ST # CMSIS Device files from STMicroelectronics
│ ├── Include # STM32 device header files (e.g., STM32U5xx.h)
│ └── Source # System initialization files (system_stm32u5xx.c, etc.)
|
├── RAL_ST # Register Abstraction Layer (formerly HAL drivers)
| ├── Port # Interface layer for user access to HAL without MCU-family dependency
| └── Stm32_Drv # Low-Layer drivers provided by ST
| ├── Inc # STM32 device header files (e.g., stm32u5xx_ll_tim.h)
| └── Src # System initialization files (stm32u5xx_ll_tim.c, etc.)
│
└── LICENSE
Огляд модулів
CMSIS (від ARM)
Містить офіційний стандарт ARM Cortex Microcontroller Software Interface Standard.
Надає:
- Рівень доступу до периферії ядра (Cortex-M, -A)
- Бібліотеки DSP та NN
- Інтерфейси RTOS і драйверів
- Визначення пристроїв для еталонних архітектур ARM
Структура гілок:
CMSIS– базова гілка, синхронізована з офіційним репозиторієм ARM CMSISCMSIS_<major>.<minor>.x– релізні гілки, що відображають офіційні релізи
CMSIS_ST (від STMicroelectronics)
Містить специфічні для ST розширення CMSIS, які поширюються у складі пакетів прошивки STM32Cube. Включає визначення периферії, startup-код і системну конфігурацію для мікроконтролерів STM32.
Надає:
- Заголовки пристроїв, визначення регістрів і startup-файли для родин STM32
- Специфічні для ST розширення обробки системних подій і переривань
Структура гілок:
STM32U5,STM32H7тощо – гілки родинSTM32U5_1.5.x– релізна гілка, похідна від гілки родини
RAL_ST (Register Abstraction Layer)
Реалізує інтерфейс апаратної абстракції поверх драйверів ST HAL.
Підкаталог Port вводить уніфікований інтерфейс (Stm32_tim.h, Stm32_i2c.h, Stm32_spi.h ...), який дає змогу безшовно перемикатися між родинами MCU STM32 без зміни користувацького коду.
Структура:
Stm32_Drv/– оригінальні драйвери HAL і LL від STMicroelectronicsPort/– проміжний інтерфейсний рівень (Stm32_im.hтощо)- Надає уніфіковані назви функцій, незалежні від родини MCU
- Забезпечує швидке перемикання між родинами STM32 без зміни користувацького коду
Приклад:
#include "Stm32_tim.h" // Automatically selects correct HAL headers based on MCU definition
Структура гілок:
STM32U5,STM32H7тощо – гілки родинSTM32U5_1.5.x,STM32H7_1.14.x, ... – релізні гілки, похідні від гілок родин- Усі гілки родин відгалужуються від гілки
master.
Використання
Цей репозиторій повністю інтегрований із CMake і надає дві цілі-бібліотеки, які можна підключити до вашого проєкту залежно від потрібного рівня абстракції.
Ral_Lib — рекомендований інтерфейс
Ral_Lib є офіційним інтерфейсом Register Abstraction Layer.
Він відкриває лише публічні заголовки з каталогу Port/, забезпечуючи стабільний і незалежний від апаратури API для користувацьких застосунків.
Ключові властивості:
- Публічний шлях для include:
RAL_ST/Port/ - Мінімальна поверхня залежностей
- Зберігає повну переносимість між родинами STM32
- Призначений для підключення в користувацьких модулях або middleware
Приклад для CMake:
# Add RAL interface to your project
target_link_libraries(MyApp PRIVATE Ral_Lib)
Приклад використання:
#include "Stm32_tim.h" // Unified abstraction header
⚠️ Ціль
Ral_Libє єдиним офіційно підтримуваним інтерфейсом для зовнішніх проєктів.
HAL_LL_Lib — розширений низькорівневий доступ
HAL_LL_Lib надає доступ до всього набору заголовкових файлів модуля RAL_ST,
включно з усіма заголовками драйверів HAL і LL від STMicroelectronics.
Ключові властивості:
- Публічний шлях для include:
RAL_ST/Stm32_Drv/Inc/ - Містить усі оригінальні заголовки ST HAL і LL
- Призначений лише для внутрішньої інтеграції та тестування
Приклад для CMake:
# Add full HAL layer (not recommended for modular projects)
target_link_libraries(MyApp PRIVATE HAL_LL_Lib)
⚠️ Використовуйте
HAL_LL_Libлише тоді, коли явно потрібні низькорівневі API ST HAL або LL.
Пряме використання може знизити модульність і переносимість вашого коду.
Інтеграція в збірку
Обидві бібліотеки автоматично налаштовуються та експортуються системою збірки CMake.
Щоб підключити їх, переконайтеся, що ваш CMakeLists.txt містить таке:
add_subdirectory(RAL)
Після цього кроку Ral_Lib і HAL_LL_Lib стають доступними як цілі CMake.
Філософія репозиторію
Цей репозиторій слугує центральним вузлом абстракції, що забезпечує узгоджені назви, структуру та переносимість між родинами STM32.
Кожен підмодуль розвивається синхронно з оновленнями вендора, зберігаючи чітку межу інтерфейсу для користувацьких застосунків.
📚 Ліцензія
Увесь вихідний код CMSIS і HAL підпорядковується відповідним ліцензіям вендорів (ARM і STMicroelectronics).
Власні розширення (наприклад, рівень Port/) поширюються за файлом LICENSE репозиторію.
Підтримка родин
| G4 | H5 | H7 | L4 | U5 | |
|---|---|---|---|---|---|
| CMSIS ST | ✅ | ✅ | ✅ | ✅ | ✅ |
| RAL ST | ✅ | ✅ | ✅ | ✅ | ✅ |