Preskočiť na hlavný obsah

Modul MCAL GPIO

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

Prehľad​

Modul MCAL GPIO (General Purpose Input/Output) poskytuje hardvérovú abstrakčnú vrstvu na konfiguráciu a riadenie pinov a portov MCU.
Ponúka jednotné API na správu smeru pinov, režimu, rýchlosti, pull rezistorov, alternatívnych funkcií a digitálnych úrovní I/O.

Tento modul je zdieľaný vo všetkých vetvách.
Každá vetva predstavuje inú rodinu MCU STM32 a prepínanie medzi rodinami sa robí prepnutím na zodpovedajúcu vetvu.


Vlastnosti​

  • Inicializácia a deinicializácia ovládača GPIO
  • Riadenie povolenia/zakázania na úrovni portu
  • Konfigurácia pinov:
    • Režim (vstup, výstup, alternatívna funkcia, analógový)
    • Rýchlosť
    • Typ výstupu (push-pull / open-drain)
    • Priradenie alternatívnej funkcie
    • Konfigurácia pull-up / pull-down
  • Riadenie stavu pinov:
    • Nastavenie / vynulovanie / prepnutie pinu
    • Čítanie úrovne pinu
    • Definovanie aktívneho/neaktívneho stavu
  • Periodická funkcia task na spracovanie na pozadí (ak je potrebná)
  • Dotaz na verziu modulu

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

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

Konfigurácia pinov​

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

Riadenie stavu pinov​

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žitiu​

  • Pred volaním akejkoľvek funkcie pre piny alebo porty sa musí vykonať Gpio_Init().
  • Port musí byť nastavený ako aktívny, kým je možné konfigurovať alebo prepínať piny v tomto porte.
  • Aktívny/neaktívny stav je možné definovať pre každý pin zvlášť, čím sa abstrahuje logická úroveň (napr. Active = High, Inactive = Low).
  • Funkciu Gpio_Task() je možné použiť, ak je potrebné spracovanie na pozadí alebo kontrola stavov.
  • Alternatívne funkcie závisia od rodiny MCU a líšia sa medzi vetvami.

🛠 Integrácia s CMake​

  1. Zahrňte Gpio_Lib do svojej knižnice CMake.
  2. Zahrňte Gpio_Port.h do svojho projektu.
  3. Prilinkujte implementačné súbory modulu Gpio.
  4. Nakonfigurujte modul podľa potrieb vášho hardvéru.

Licencia​

Tento projekt je licencovaný pod licenciou Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).

Toto dielo môžete slobodne používať, upravovať a zdieľať na nekomerčné účely, pokiaľ uvediete primeraný zdroj.

Úplné znenie podmienok nájdete v LICENSE.md alebo na creativecommons.org/licenses/by-nc/4.0.


Autori​

Príspevky sú vítané! Otvorte prosím pull request.