Bu cevabı STM32'den buldum GPIO Ayarlarını Anlama
- GPIO_PuPd (Yukarı Çekme / Aşağı Çekme)
Dijital devrelerde, sinyal hatlarının asla "yüzmesine" izin verilmemesi önemlidir. Yani, her zaman yüksek veya düşük bir durumda olmaları gerekir. Yüzerken, durum saptanmaz ve birkaç farklı soruna neden olur.
Bunu düzeltmenin yolu, sinyal hattından Vcc veya Gnd'ye bir direnç eklemektir. Bu şekilde, çizgi aktif olarak yüksek veya düşük sürülmüyorsa, direnç potansiyelin bilinen bir düzeye kaymasına neden olur.
ARM (ve diğer mikrodenetleyiciler) bunu yapmak için yerleşik devrelere sahiptir. Bu şekilde, devrenize başka bir parça eklemeniz gerekmez. Örneğin, "GPIO_PuPd_UP" öğesini seçerseniz, sinyal hattı ile Vcc arasına bir direnç eklemeye eşdeğerdir.
Push-Pull: Bu, çoğu kişinin "standart" olarak düşündüğü çıktı türüdür. Çıkış düşük olduğunda, aktif olarak toprağa "çekilir". Tersine, çıkış yüksek olarak ayarlandığında, aktif olarak Vcc'ye doğru "itilir". Basitleştirilmiş, bu gibi görünüyor:
Bir Açık Tahliye çıkışı, diğer taraftan, yalnızca bir yönde aktiftir. Pimi zemine doğru çekebilir, ancak yukarı doğru süremez. Önceki görüntüyü, ancak üst MOSFET'in olmadığını düşünün. Toprağa çekilmediğinde, (alt taraf) MOSFET iletken değildir, bu da çıkışın yüzmesine neden olur.
Bu tür bir çıkış için, devreye alınmadığında hattın yükselmesine neden olacak, devreye eklenmiş bir direnç direnci olması gerekir. Bunu harici bir parça ile veya GPIO_PuPd değerini GPIO_PuPd_UP olarak ayarlayarak yapabilirsiniz.
İsim, MOSFET'in drenajının dahili olarak hiçbir şeye bağlı olmamasından kaynaklanıyor. Bu tür bir çıktıya MOSFET yerine BJT kullanılırken "açık kollektör" adı verilir.
Temel olarak, bu çıkış sinyalinin dönüş hızını (yükselme zamanı ve düşme zamanı) kontrol eder. Çevirme hızı ne kadar hızlı olursa, devreden o kadar fazla gürültü yayılır. Çevirme hızını yavaş tutmak ve yalnızca belirli bir nedeniniz varsa, arttırmak iyi bir uygulamadır.