GPIO pimi bir 'genel amaçlı giriş / çıkış' pimidir. Bu varsayılan olarak yalnızca yüksek veya düşüktür (voltaj seviyeleri, yüksek mikro denetleyicinin besleme voltajıdır, düşük genellikle toprak veya 0V'dur). Ancak 'yüksek' ve 'düşük' seviyeleri genellikle besleme voltajının bir oranı olarak voltaj olarak verilir. Bu nedenle, genellikle besleme voltajının% 66'sının üzerindeki herhangi bir şey mantık seviyesi 'yüksek' olarak kabul edilir, bu da bazı düşük voltajlı cihazların, yüksek 'yüksek' olarak kabul edilen seviyeye düştüğü sürece yüksek voltajlı cihazlarla konuşabileceği anlamına gelir. Örneğin 1,8–2,7 V düşük güçlü bir mikro denetleyici veya GPS alıcısı, 5V mikro denetleyiciye doğrudan iletişim kurmada sorun yaşayacaktır, çünkü düşük voltajlı cihazın 'yüksek' olarak gördüğü şey, yüksek voltajlı cihazın hiç yüksek olduğunu düşünmeyecektir. Bu, GPIO'yu giriş pimi olarak kullanmak içindir,
Bazen 'analogdan dijitale' (ADC) dönüştürücü gibi diğer yerleşik aygıtlar tarafından kullanılacak GPIO pinini yapılandırarak 'analog' değerler için bir SINGLE pin kullanabilirsiniz. Pim ADC'deki bir kanala ayarlanmıştır ve bu normal bir GPIO pimi değil, şimdi ADC'ye bir giriş görevi görür. Daha sonra ADC'yi örnek alacak şekilde ayarlayabilir ve 10 bit çözünürlükse, ADC'nin 0-1024 gibi sayılar için sonuç kayıt değerini okuyabilirsiniz.
Birisinin belirttiği gibi, GPIO pimi, genellikle GPIO geçişi için düşük hızlarda Darbeli Genişlik Modülasyonu (PWM) sinyalinin etkisini vermek için yazılımda kullanılabilir. Çoğu mikrodenetleyici, çıkış pimi olarak bir GPIO pini kullanmak üzere yapılandırılabilen özel PWM jeneratörlerine sahiptir ve bunlar, bir PWM sinyali oluşturmak için GPIO'yu kontrol etmek için yazılım kullanmaktan çok daha hızlı ve çok daha kararlıdır. PWM 'ortalama' veya '%' stil sinyalleri için kullanılır ve loş ışıklar gibi şeyleri yapmanıza ve motorun hızını kontrol etmenize olanak tanır.
GPIO pinleri genellikle Portlar olarak adlandırılan gruplar halinde düzenlenir. Küçük denetleyicilerde, 8 bit mimari olabilirler, bu nedenle bağlantı noktaları genellikle 8 lotta gruplandırılır ve bunların değerleri, bunların mantık yüksek / düşük değerlerini temsil eden bir 'veri kaydı' okunarak aynı anda okunabilir. iğneler. Benzer şekilde, pinleri çıkış olarak ayarlayabilir ve daha sonra bir veri kaydına 8 bit yazabilirsiniz ve mikrodenetleyiciler GPIO denetleyicisi, kaydedicinin değiştirilen değerlerini okuyacak ve yeni ayarladığınız değere bağlı olarak pimi yüksek sürecek veya pimi aşağı çekecektir.
Raspberry Pi ve BeagleBone'daki gibi ARM Cortex A8 ve A9 gibi daha yeni kontrolörlerde, GPIO kontrolörleri ve farklı seçenekleri çok karmaşıktır. 32 bit mimari kullanıyorlar, bu nedenle GPIO pinlerinin çoğu, hepsi kullanılabilir olmasa bile, 32 pinli bloklar halinde düzenlenmiştir (bazıları adanmış veya etkinleştirilmemiş olabilir). BeagleBone (daha önce üzerinde çalıştığım), büyük miktarda pim için gerçekten harika seçeneklere sahip ve bazen şeyler için belirli pimlerin özel modlarını ayarlamanıza izin veren bir 'pin mux' aracı kullanmanız gerekecek PWM, darbe yakalama, zamanlayıcı çıkışları, analog (ADC) kanal girişleri ve hatta (çekirdekte BeagleBone'da) ARM çekirdeğinde bulunan endüstriyel alt işlemcilerle eşleme gibi, ancak bağımsız işlemciler olarak kabul edilir ve sırayla kendi pin haritalamalarına ihtiyaç duyar dış dünyaya bağlı olmak.