GPIO (General Purpose Input/Output) je hardwarové rozhraní na mikrokontroléru, které poskytuje softwarově ovladatelné piny.
GPIO port je skupina pinů (typicky 16), které sdílejí jednu sadu řídicích registrů. Například GPIOA je port A obsahující piny PA0–PA15. Každý pin v rámci portu se konfiguruje nezávisle — port je jen organizační jednotka pro adresování.
Praktický benefit seskupení pinů do portů je možnost atomických operací — můžeš nastavit nebo přečíst více pinů na stejném portu jedním zápisem/čtením registru.
Každý GPIO pin může pracovat v jednom z několika režimů:
Dostupné alternate funkce pro každý pin jsou nadrátované v křemíku — nelze libovolně přiřadit jakoukoli periferii na jakýkoli pin. Toto mapování se najde v datasheetu čipu (tabulka alternate function mapping).
Když je pin nakonfigurovaný jako výstup, existují dva režimy buzení:
Dva tranzistory aktivně řídí pin do HIGH i LOW:
Pin má vždy definovanou úroveň. Nejběžnější režim pro řízení LED, signálů atd.
Pouze spodní tranzistor je použit:
Používá se pro sdílené sběrnice jako I2C, kde více zařízení sdílí jeden vodič — zabrání zkratu když dvě zařízení řídí linku současně.
Interní pull-up nebo pull-down rezistory definují výchozí stav vstupního pinu, když ho nic aktivně neřídí:
U výstupních pinů v push-pull režimu jsou pull rezistory zbytečné, protože tranzistory aktivně definují úroveň.
Některé mikrokontroléry umožňují zamknout konfiguraci pinu tak, že ji nelze změnit softwarem až do dalšího hardwarového resetu. Bezpečnostní mechanismus proti náhodnému překonfigurování kritických pinů.