Перейти до основного вмісту

Модуль GPIO MCAL

Підтримувані родини STM32: G4 · H5 · U5
Не підтримуються: H7, L4

Огляд​

Модуль GPIO (General Purpose Input/Output) MCAL надає рівень апаратної абстракції для налаштування та керування виводами й портами MCU.
Він пропонує уніфіковані API для керування напрямком виводу, режимом, швидкістю, підтягувальними резисторами, альтернативними функціями та цифровими рівнями вводу/виводу.

Цей модуль спільний для всіх гілок.
Кожна гілка відповідає окремій родині MCU STM32, а перемикання між родинами виконується переходом на відповідну гілку.


Можливості​

  • Ініціалізація та деініціалізація драйвера GPIO
  • Керування вмиканням/вимиканням на рівні порту
  • Конфігурація виводу:
    • Режим (вхід, вихід, альтернативна функція, аналоговий)
    • Швидкість
    • Тип виходу (push-pull / open-drain)
    • Призначення альтернативної функції
    • Конфігурація pull-up / pull-down
  • Керування станом виводу:
    • Встановлення / скидання / перемикання виводу
    • Зчитування рівня виводу
    • Визначення активного/неактивного стану
  • Функція періодичного завдання для фонової обробки (якщо потрібно)
  • Запит версії модуля

Публічний API​

Керування модулем​

gpio_ModuleVersion_t Gpio_Get_ModuleVersion(void);
gpio_RequestState_t Gpio_Init(gpio_Config_t *gpioConfig);
void Gpio_Deinit(void);
void Gpio_Task(void);

Керування портом​

gpio_RequestState_t Gpio_Set_PortActive (gpio_PortId_t portId);
gpio_RequestState_t Gpio_Set_PortInactive (gpio_PortId_t portId);
gpio_RequestState_t Gpio_Get_PortState (gpio_PortId_t portId, gpio_FunctionState_t * const portState);

Конфігурація виводу​

gpio_RequestState_t Gpio_Set_PinMode (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinMode_t pinType);
gpio_RequestState_t Gpio_Get_PinMode (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinMode_t * const pinType);

gpio_RequestState_t Gpio_Set_PinSpeed (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinSpeed_t pinSpeed);
gpio_RequestState_t Gpio_Get_PinSpeed (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinSpeed_t * const pinSpeed);

gpio_RequestState_t Gpio_Set_PinOutType (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinOutputType_t pinOutType);
gpio_RequestState_t Gpio_Get_PinOutType (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinOutputType_t * const pinOutType);

gpio_RequestState_t Gpio_Set_PinAltFunction (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_AltFunction_t altFunc);
gpio_RequestState_t Gpio_Get_PinAltFunction (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_AltFunction_t * const altFunc);

gpio_RequestState_t Gpio_Set_PinPull (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinPullCfg_t pullCfg);
gpio_RequestState_t Gpio_Get_PinPull (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinPullCfg_t * const pullCfg);

Керування станом виводу​

gpio_RequestState_t Gpio_Toggle_PinLevel (gpio_PortId_t portId, gpio_PinId_t pinId);
gpio_RequestState_t Gpio_Set_PinLevel (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinLevel_t pinLevel);
gpio_RequestState_t Gpio_Get_PinLevel (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinLevel_t * const pinLevel);

gpio_RequestState_t Gpio_Set_PinStateActive (gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinLevel_t pinActiveLevel);
gpio_RequestState_t Gpio_Set_PinStateInactive(gpio_PortId_t portId, gpio_PinId_t pinId, gpio_PinLevel_t pinActiveLevel);

Примітки щодо використання​

  • Перед викликом будь-яких функцій для виводів або портів необхідно виконати Gpio_Init().
  • Порт необхідно перевести в активний стан, перш ніж виводи цього порту можна буде налаштовувати або перемикати.
  • Активні/неактивні стани можна визначати для кожного виводу окремо, щоб абстрагувати логічний рівень (наприклад, Active = High, Inactive = Low).
  • Функцію Gpio_Task() можна використовувати, якщо потрібні фонова обробка або перевірки стану.
  • Альтернативні функції залежать від родини MCU і відрізняються в різних гілках.

🛠 Інтеграція з CMake​

  1. Додайте Gpio_Lib до вашої CMake-бібліотеки.
  2. Підключіть Gpio_Port.h у вашому проєкті.
  3. Злінкуйте з файлами реалізації модуля Gpio.
  4. Налаштуйте модуль відповідно до вашого апаратного забезпечення.

Ліцензія​

Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).

Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.

Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.


Автори​

Внески вітаються! Будь ласка, відкрийте pull request.