Pin GPIO jest pinem „wejścia / wyjścia ogólnego zastosowania”. Jest to domyślnie tylko wysokie lub niskie (poziomy napięcia, wysokie to napięcie zasilania mikrokontrolera, niskie zwykle jest uziemione lub 0V). Ale poziomy „wysoki” i „niski” są zwykle podawane jako napięcia jako proporcja napięcia zasilania. Zatem wszystko, co zwykle przekracza 66% napięcia zasilania, jest uważane za poziom logiczny „wysoki”, co oznacza, że niektóre urządzenia o niższym napięciu mogą komunikować się z urządzeniami o wysokim napięciu, o ile poziomy mieszczą się w granicach tego, co uważa się za „wysokie”. Na przykład mikrokontroler lub odbiornik GPS o niskiej mocy 1,8–2,7 V lub odbiornik GPS będą miały problemy z komunikacją bezpośrednio z mikrokontrolerem 5 V, ponieważ to, co urządzenie niskiego napięcia postrzega jako „wysokie”, urządzenie o wyższym napięciu w ogóle nie uzna, że jest wysokie. Służy do używania GPIO jako wejścia,
Czasami możesz użyć SINGLE pin do wartości „analogowych”, konfigurując pin GPIO do użycia przez inne urządzenia pokładowe, takie jak konwerter „analogowo-cyfrowy” (ADC). Pin jest ustawiony na kanał w ADC i działa teraz jako wejście do ADC, a nie normalny pin GPIO. Następnie można ustawić ADC do pobierania próbki i odczytać wartość rejestru wyników ADC dla liczb takich jak 0-1024, jeśli jest to rozdzielczość 10-bitowa.
Jak ktoś wspomniał, pinu GPIO można użyć w oprogramowaniu, aby uzyskać efekt sygnału modulacji szerokości impulsu (PWM), zwykle przy niskich prędkościach do przełączania GPIO. Większość mikrokontrolerów ma dedykowane generatory PWM, które można skonfigurować tak, aby wykorzystywały pin GPIO jako pin wyjściowy, a te są bardzo szybkie i znacznie bardziej stabilne niż używanie oprogramowania do sterowania GPIO do generowania sygnału PWM. PWM są używane do sygnałów w stylu „przeciętnym” lub „%” i pozwalają robić rzeczy takie jak przyciemnione światła i kontrolować prędkość silnika.
Piny GPIO są zwykle ułożone w grupy, zwane Porty. W małych kontrolerach mogą to być architektury 8-bitowe, więc porty są często pogrupowane w partie po 8, a ich wartości można odczytać jednocześnie, czytając „rejestr danych” reprezentujący logiczne wysokie / niskie wartości tych szpilki. Podobnie, możesz ustawić piny jako wyjścia, a następnie zapisać 8-bitów w rejestrze danych, a kontroler GPIO mikrokontrolerów odczyta zmienione wartości rejestru i podnieśli pin wysoko lub pociągnie pin niski w zależności od ustawionej wartości.
W nowszych kontrolerach, takich jak ARM Cortex A8 i A9, jak w Raspberry Pi i BeagleBone, ich kontrolery GPIO i różne opcje są bardzo skomplikowane. Korzystają z architektury 32-bitowej, więc większość pinów GPIO jest ułożonych w 32-pinowe bloki, nawet jeśli nie wszystkie są w rzeczywistości użyteczne (niektóre mogą być dedykowane lub nieaktywne). BeagleBone (nad którym pracowałem wcześniej) ma kilka naprawdę niesamowitych opcji ze względu na dużą liczbę pinów, a czasami będziesz musiał użyć narzędzia „pin mux”, które pozwala ustawić specjalne tryby niektórych pinów dla rzeczy takich jak PWM, przechwytywanie impulsów, wyjścia timera, wejścia kanałów analogowych (ADC), a nawet mapowanie (w każdym razie na BeagleBone) do podprocesorów przemysłowych dostępnych na rdzeniu ARM, ale są uważane za niezależne procesory i potrzebują własnego mapowania pinów w celu być połączonym ze światem zewnętrznym.