Ein GPIO-Pin ist ein Allzweck-Input / Output-Pin. Dies ist standardmäßig nur hoch oder niedrig (Spannungspegel, wobei hoch die Versorgungsspannung des Mikrocontrollers ist, niedrig normalerweise Masse oder 0 V). Die Pegel von "hoch" und "niedrig" werden jedoch normalerweise als Spannungen als Anteil der Versorgungsspannung angegeben. Alles, was normalerweise über 66% der Versorgungsspannung liegt, wird als logischer Pegel "hoch" angesehen, was bedeutet, dass einige Geräte mit niedrigerer Spannung mit Hochspannungsgeräten sprechen können, solange die Pegel innerhalb dessen liegen, was als "hoch" angesehen wird. Ein 1,8–2,7-V-Mikrocontroller mit niedriger Leistung oder ein GPS-Empfänger haben beispielsweise Probleme, direkt mit einem 5-V-Mikrocontroller zu kommunizieren, da das Hochspannungsgerät das, was das Niederspannungsgerät als „hoch“ ansieht, überhaupt nicht für hoch hält. Dies dient zur Verwendung von GPIO als Eingangspin.
Manchmal können Sie einen SINGLE-Pin für "analoge" Werte verwenden, indem Sie den GPIO-Pin so konfigurieren, dass er von anderen integrierten Geräten wie einem "Analog-Digital" -Konverter (ADC) verwendet wird. Der Pin ist auf einen Kanal am ADC eingestellt und dieser fungiert jetzt als Eingang für den ADC, nicht als normaler GPIO-Pin. Sie können den ADC dann so einstellen, dass er eine Probe entnimmt, und den Ergebnisregisterwert des ADC für Zahlen wie 0-1024 lesen, wenn die Auflösung 10 Bit beträgt.
Wie bereits erwähnt, kann ein GPIO-Pin in der Software verwendet werden, um den Effekt eines PWM-Signals (Pulsed Width Modulation) zu erzielen, normalerweise bei niedrigen Geschwindigkeiten für das Umschalten des GPIO. Die meisten Mikrocontroller verfügen über dedizierte PWM-Generatoren, die so konfiguriert werden können, dass ein GPIO-Pin als Ausgangs-Pin verwendet wird. Diese sind sehr schnell und weitaus stabiler als die Verwendung von Software zur Steuerung von GPIO zur Erzeugung eines PWM-Signals. PWM werden für Signale im "Durchschnitts" - oder "%" -Stil verwendet und ermöglichen es Ihnen, beispielsweise schwaches Licht zu erzeugen und die Motordrehzahl zu steuern.
GPIO-Pins sind normalerweise in Gruppen angeordnet, die als Ports bezeichnet werden. In kleinen Controllern kann es sich um eine 8-Bit-Architektur handeln, daher werden Ports häufig in viele 8 gruppiert, und ihre Werte können alle gleichzeitig gelesen werden, indem ein 'Datenregister' gelesen wird, das die logischen High / Low-Werte dieser Werte darstellt Stifte. In ähnlicher Weise können Sie Pins als Ausgänge festlegen und dann 8-Bit in ein Datenregister schreiben. Der GPIO-Controller des Mikrocontrollers liest die geänderten Werte des Registers und treibt den Pin hoch oder zieht den Pin niedrig, je nachdem, welchen Wert Sie gerade eingestellt haben.
Bei neueren Controllern wie dem ARM Cortex A8 und A9 wie dem Raspberry Pi und BeagleBone sind ihre GPIO-Controller und verschiedene Optionen sehr kompliziert. Sie verwenden eine 32-Bit-Architektur, sodass die meisten GPIO-Pins in 32-Pin-Blöcken angeordnet sind, auch wenn nicht alle tatsächlich verwendbar sind (einige sind möglicherweise dediziert oder nicht aktiviert). Der BeagleBone (an dem ich bereits gearbeitet habe) bietet einige wirklich großartige Optionen für seine große Anzahl an Pins. Manchmal müssen Sie ein Pin-Mux-Tool verwenden, mit dem Sie die speziellen Modi bestimmter Pins für bestimmte Dinge einrichten können wie PWM, Impulserfassung, Timer-Ausgänge, analoge (ADC) Kanaleingänge und sogar (ohnehin auf dem BeagleBone) Mapping auf die auf dem ARM-Kern verfügbaren industriellen Subprozessoren, werden jedoch als unabhängige Prozessoren betrachtet und benötigen in der Reihenfolge ihre eigene Pin-Mapping mit der Außenwelt verbunden sein.