Модуль 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
- Додайте
Gpio_Libдо вашої CMake-бібліотеки. - Підключіть
Gpio_Port.hу вашому проєкті. - Злінкуйте з файлами реалізації модуля Gpio.
- Налаштуйте модуль відповідно до вашого апаратного забезпечення.
Ліцензія
Цей проєкт ліцензовано за 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.