Přeskočit na hlavní obsah

Modul MCAL GPIO

Podporované rodiny STM32: G4 · H5 · U5
Nepodporované: H7, L4

Přehled​

Modul MCAL GPIO (General Purpose Input/Output) poskytuje hardwarovou abstrakční vrstvu pro konfiguraci a řízení pinů a portů MCU.
Nabízí jednotná API pro správu směru pinu, režimu, rychlosti, pull rezistorů, alternativních funkcí a digitálních úrovní I/O.

Tento modul je sdílen napříč všemi větvemi.
Každá větev představuje jinou rodinu MCU STM32 a mezi rodinami se přepíná checkoutem příslušné větve.


Vlastnosti​

  • Inicializace a deinicializace ovladače GPIO
  • Povolení/zakázání na úrovni portu
  • Konfigurace pinů:
    • Režim (Input, Output, Alternate, Analog)
    • Rychlost
    • Typ výstupu (Push-pull / Open-drain)
    • Mapování alternativních funkcí
    • Konfigurace pull-up / pull-down
  • Řízení stavu pinu:
    • Nastavení / Vymazání / Přepnutí (toggle) pinu
    • Čtení úrovně pinu
    • Definice aktivního/neaktivního stavu
  • Periodická funkce (task) pro zpracování na pozadí (pokud je potřeba)
  • Dotaz na verzi modulu

Veřejné API​

Správa modulu​

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

Řízení portu​

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);

Konfigurace pinů​

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);

Řízení stavu pinu​

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);

Poznámky k použití​

  • Před voláním jakýchkoli funkcí pro piny nebo porty je nutné provést Gpio_Init().
  • Port musí být nastaven jako aktivní, než bude možné konfigurovat nebo přepínat piny v tomto portu.
  • Aktivní/neaktivní stavy lze definovat pro každý pin zvlášť, aby se abstrahovala logická úroveň (např. Active = High, Inactive = Low).
  • Funkci Gpio_Task() lze použít, pokud je potřeba zpracování na pozadí nebo kontrola stavů.
  • Alternativní funkce závisejí na rodině MCU a mezi větvemi se liší.

🛠 Integrace s CMake​

  1. Zahrňte Gpio_Lib do své knihovny CMake.
  2. Zahrňte Gpio_Port.h do svého projektu.
  3. Prolinkujte implementační soubory modulu Gpio.
  4. Nakonfigurujte modul podle potřeb vašeho hardwaru.

Licence​

Tento projekt je licencován pod licencí Creative Commons Uveďte původ–Neužívejte komerčně 4.0 Mezinárodní (CC BY-NC 4.0).

Toto dílo můžete volně používat, upravovat a sdílet pro nekomerční účely za předpokladu, že uvedete odpovídající autorství.

Úplné podmínky najdete v LICENSE.md nebo navštivte creativecommons.org/licenses/by-nc/4.0.


Autoři​

Příspěvky jsou vítány! Otevřete prosím pull request.