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
- Zahrňte
Gpio_Libdo svojej knižnice CMake. - Zahrňte
Gpio_Port.hdo svojho projektu. - Prilinkujte implementačné súbory modulu Gpio.
- 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
- Mr.Nobody — embedbits.com
Príspevky sú vítané! Otvorte prosím pull request.