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
- Zahrňte
Gpio_Libdo své knihovny CMake. - Zahrňte
Gpio_Port.hdo svého projektu. - Prolinkujte implementační soubory modulu Gpio.
- 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
- Mr.Nobody — embedbits.com
Příspěvky jsou vítány! Otevřete prosím pull request.