Модуль NVIC MCAL
Підтримувані родини STM32: G4 · H5 · U5
Не підтримуються: H7, L4
Цей репозиторій містить модуль NVIC (Nested Vectored Interrupt Controller) MCAL для мікроконтролерів STM32.
Модуль спроєктований як специфічний для гілки: кожна гілка відповідає одній родині STM32 (наприклад, L4, F4, U5).
Перемикання між гілками дає розробникам змогу використовувати один і той самий інтерфейс для різних родин.
Огляд модуля
Модуль NVIC MCAL надає рівень абстракції для налаштування та обробки переривань у MCU STM32.
Він відкриває уніфікований API для всіх підтримуваних родин, що дозволяє:
- Ініціалізувати / деініціалізувати конфігурацію NVIC
- Реєструвати обробники переривань та керувати ними
- Налаштовувати пріоритети
- Керувати станами pending і active
- Підтримувати як переривання периферії, так і системні переривання ядра
- Забезпечувати керування обробником за замовчуванням
Публічний API
Інформація про модуль
nvic_ModuleVersion_t Nvic_Get_ModuleVersion(void);
Ініціалізація
void Nvic_Init(void);
void Nvic_Deinit(void);
void Nvic_Task(void);
Доступ до вказівника стека
uint32_t Nvic_Get_StackPointerAddr(void);
Обробник за замовчуванням
nvic_RequestState_t Nvic_Set_DefaultHandler(nvic_IsrCallback_t defaultHandler);
Обробка IRQ периферії
nvic_RequestState_t Nvic_Set_PeriphIrq_Handler (nvic_PeriphIrqList_t irqId, const nvic_IsrCallback_t irqHandler);
nvic_RequestState_t Nvic_Get_PeriphIrq_Handler (nvic_PeriphIrqList_t irqId, nvic_IsrCallback_t *irqHandler);
nvic_RequestState_t Nvic_Set_PeriphIrq_Prio (nvic_PeriphIrqList_t irqId, nvic_IrqPrio_t irqPrio);
nvic_RequestState_t Nvic_Get_PeriphIrq_Prio (nvic_PeriphIrqList_t irqId, nvic_IrqPrio_t *irqPrio);
nvic_RequestState_t Nvic_Set_PeriphIrq_Active (nvic_PeriphIrqList_t irqId);
nvic_RequestState_t Nvic_Set_PeriphIrq_Inactive(nvic_PeriphIrqList_t irqId);
nvic_RequestState_t Nvic_Set_PeriphIrq_Pending (nvic_PeriphIrqList_t irqId, nvic_IrqFlag_t irqFlag);
nvic_RequestState_t Nvic_Get_PeriphIrq_Pending (nvic_PeriphIrqList_t irqId, nvic_IrqFlag_t *irqFlag);
Обробка IRQ ядра
nvic_RequestState_t Nvic_Set_CoreIrq_Handler(nvic_CoreIrqList_t irqId, const nvic_IsrCallback_t irqHandler);
nvic_RequestState_t Nvic_Get_CoreIrq_Handler(nvic_CoreIrqList_t irqId, nvic_IsrCallback_t *irqHandler);
nvic_RequestState_t Nvic_Set_CoreIrq_Prio (nvic_CoreIrqList_t irqId, nvic_IrqPrio_t irqPrio);
nvic_RequestState_t Nvic_Get_CoreIrq_Prio (nvic_CoreIrqList_t irqId, nvic_IrqPrio_t *irqPrio);
Стратегія гілок
- Кожна гілка відповідає конкретній родині STM32 (наприклад,
STM32L4,STM32F4,STM32U5). - Публічний API залишається узгодженим між гілками.
- Відрізняється лише низькорівнева реалізація, що забезпечує переносимість вищих рівнів.
Приклад використання
// Example: Setting up IRQ handler for a peripheral
Nvic_Set_PeriphIrq_Handler(UART1_IRQn, MyUartHandler);
Nvic_Set_PeriphIrq_Prio(UART1_IRQn, NVIC_PRIORITY_HIGH);
Nvic_Set_PeriphIrq_Active(UART1_IRQn);
🛠 Інтеграція з CMake
- Додайте
Nvic_Libдо вашої CMake-бібліотеки. - Підключіть
Nvic_Port.hу вашому проєкті. - Злінкуйте з файлами реалізації модуля Nvic.
- Налаштуйте модуль відповідно до вашого апаратного забезпечення.
Ліцензія
Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).
Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.
Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.
Автори
- Mr.Nobody — embedbits.com
Внески вітаються! Будь ласка, відкрийте pull request.