Bu rehberimizde, mikrodenetleyiciler dünyasında en sık karşılaşılan seri haberleşme protokollerinden biri olan UART Nedir? arayüzünün ne olduğunu, çalışma prensiplerini ve donanımsal yapısını detaylıca ele alacağız.
yrıca, popüler Arduino Uno kartı üzerindeki dahili UART arayüzünü nasıl kullanacağımızı öğrenmek için pratik bir kod yazacak ve iki Arduino kartını birbiriyle UART üzerinden haberleştiren örnek bir projeyi adım adım gerçekleştireceğiz.
Çalışmaya başlamadan önce, bilgisayar tarafındaki seri haberleşme adımlarını kavramak adına C# İle Arduino Kontrolü ve Seri Haberleşme rehberimizi de okumanızı önemle tavsiye ederiz.
UART Nedir?
UART, Türkçe karşılığıyla Evrensel Asenkron Alıcı/Verici (Universal Asynchronous Receiver/Transmitter) anlamına gelir. Bilgisayarlar, mikrodenetleyiciler ve çeşitli elektronik sensörler arasında asenkron (eş zamansız) olarak seri veri transferi gerçekleştirmek amacıyla tasarlanmış, doğrudan çip üzerinde yer alan fiziksel bir donanım birimidir (veya entegre devredir).
UART Cihazları Arasındaki Bağlantı Nasıl Kurulur?
İki UART uyumlu cihazı birbiriyle eşleştirmek fiziksel olarak oldukça basittir. Şekil 1’de temel bir UART donanımsal bağlantı şeması gösterilmektedir.

Bağlantıda kullanılan hatlardan biri veri iletimi (TX – Transmitter) için, diğeri ise veri alımı (RX – Receiver) için tahsis edilir. UART haberleşmesinde çapraz bağlantı esastır; yani birinci cihazın TX pini, ikinci cihazın RX pinine bağlanırken; birinci cihazın RX pini ise ikinci cihazın TX pinine bağlanır. Ayrıca sistemlerin ortak bir toprak referansına sahip olması için iki kartın GND (Toprak) pinleri mutlaka birbirine bağlanmalıdır. Önemli bir kısıtlama olarak, tek bir UART veri yoluna aynı anda yalnızca iki cihaz bağlanabilir.
UART Çalışma Prensibi
UART, veriyi gönderirken paralel verileri seri paketlere dönüştürerek hat üzerinden iletir. Alıcı taraftaki UART ise bu seri bit paketlerini yakalayıp analiz ederek tekrar orijinal paralel veri baytlarına dönüştürür.
Seri Veri Gönderme (Transmission) Süreci
UART vericisi, mikrodenetleyiciden paralel olarak aldığı 8-bitlik (1 bayt) verileri öncelikle ardışık bit dizilerine dönüştürür. Ardından, verinin hat üzerinde güvenle taşınabilmesi için bu bitleri özel bir Paket (Frame) yapısına böler. Her bir UART paketi; bir adet başlangıç biti (start bit), veri çerçevesi (data frame), isteğe bağlı bir eşlik biti (parity bit) ve bitiş bitlerinden (stop bits) oluşur. Standart bir UART veri paketinin yapısı aşağıdaki şemada gösterilmiştir:

Paketleme işlemi tamamlandıktan sonra donanımsal UART devresi, bu paket dizilimini TX pini üzerinden elektriksel lojik seviyeler halinde sırayla hatta gönderir.
Seri Veri Alma (Reception) Süreci
Alıcı taraftaki UART, RX pini üzerinden gelen paketi yakalar. Gelen verideki lojik 1’lerin sayısını analiz ederek paketteki eşlik (parity) bitiyle karşılaştırır ve olası veri bozulması (veri gürültüsü) hatalarını denetler. Eğer iletimde bir hata tespit edilmezse; paket içerisindeki başlangıç, bitiş ve eşlik bitlerini ayıklayarak saf veri çerçevesini (data frame) elde eder. Orijinal bayt yapısının tamamlanabilmesi için ardışık birkaç paketin alınması gerekebilir. Bayt yeniden oluşturulduktan sonra okunmak üzere alıcı UART’ın donanımsal tampon belleğinde (buffer) saklanır.
Kritik UART Parametreleri
UART asenkron bir protokol olduğu için (ortak bir saat hattı bulunmadığından), haberleşmenin kararlı gerçekleşmesi adına her iki cihazın da tamamen aynı parametre yapılandırmasına sahip olması zorunludur. Bu temel ayarlar şunlardır:
1. Baud Rate (Haberleşme Hızı)
Baud hızı, saniyede iletilen veya alınan bit sayısını (bps – bits per second) ifade eder. Hatalı okumaların önüne geçmek için her iki donanımın da aynı baud hızına ayarlanması şarttır. Endüstride yaygın olarak kullanılan standart baud hızları; 1200, 2400, 4800, 9600, 19200, 38400, 57600 ve 115200 bps’dir.
2. Veri Uzunluğu (Data Length)
Tek bir paket içerisinde gönderilecek saf veri bitlerinin sayısını belirtir. Genellikle 8-bit veya 7-bit olarak tercih edilir.
3. Parity Bit (Eşlik Biti ile Hata Denetimi)
Gönderilen veri bitleri içerisindeki lojik 1 değerlerinin toplam sayısının tek mi çift mi olduğunu alıcıya bildiren 1 bitlik ek hata denetim mekanizmasıdır. Eşlik biti yapılandırması şu şekildedir:
- Tek (Odd) Parity: Veri paketindeki 1’lerin toplam sayısı tek ise eşlik biti ‘0’, çift ise toplamı teke tamamlamak için ‘1’ olur.
- Çift (Even) Parity: Veri paketindeki 1’lerin toplam sayısı çift ise eşlik biti ‘0’, tek ise toplamı çifte tamamlamak için ‘1’ olur.
4. Stop Bits (Bitiş Bitleri)
Veri paketinin sonlandığını alıcıya bildiren lojik 1 seviyesindeki bitlerdir. Tercihe bağlı olarak 1, 1.5 veya 2 bit genişliğinde yapılandırılabilir.
5. Akış Kontrolü (Flow Control)
Alıcının işlem hızından daha hızlı veri gönderilmesi durumunda veri kaybını (buffer taşmasını) engellemek amacıyla kullanılan mekanizmadır. Yazılımsal (XON/XOFF) veya donanımsal (RTS/CTS) sinyallerle gerçekleştirilebilir.
Arduino Üzerinde UART Kullanımı
Arduino geliştirme kartları, tercih edilen karta bağlı olarak bir veya daha fazla donanımsal UART arayüzüne sahiptir. Klasik Arduino Uno kartı üzerinde yalnızca bir adet UART arayüzü bulunur ve bu arayüz Pin 0 (RX) ve Pin 1 (TX) pinlerine bağlıdır.
Önemli Uyarı: Bu haberleşme pinleri, bilgisayarla USB kablosu üzerinden yapılan program yükleme ve Seri Monitör bağlantısıyla doğrudan paylaşılır. Dolayısıyla, Arduino Uno kartınıza kod yüklerken hata almamak için mutlaka Pin 0 ve Pin 1’e bağlı olan kabloları sökmelisiniz.

UART Mantıksal Voltaj Seviyesi (Logic Level Mismatch)
Farklı donanımların UART mantıksal voltaj seviyeleri değişiklik gösterebilir. Örneğin, Arduino Uno’nun TX/RX hatları 5V TTL lojik seviyesiyle çalışırken; bir bilgisayarın standart DB9 seri portu veya endüstriyel RS232 arayüzü +/-12V lojik seviyeleri kullanır. Arduino Uno’yu doğrudan bir RS232 portuna bağlamak, aşırı gerilim nedeniyle mikrodenetleyicinin kalıcı olarak yanmasına yol açar. Bu tür durumlarda, iki cihaz arasına mutlaka MAX232 gibi özel bir voltaj seviye dönüştürücü entegre veya mantıksal seviye dönüştürücü (logic level shifter) devresi eklenmelidir.
Uygulama: İki Arduino Arasında UART Haberleşmesi
Gerekli Donanımlar
- 2 adet Arduino Uno
- 2 adet Push Buton
- 2 adet Breadboard
- Jumper Bağlantı Kabloları
Bağlantı Şeması

Haberleşme Yazılımı Kodları
Aşağıdaki program kodunu her iki Arduino Uno kartına da sırayla yükleyin. Kod yükleme aşamasında donanımsal RX/TX pinlerine (0 ve 1) bağlı olan kabloları sökmeyi, yükleme bittikten sonra ise kabloları tekrar şemaya uygun bağlamayı unutmayın.
Kurduğumuz bu sistem sayesinde, bir karta bağlı butona bastığımızda diğer kartın üzerindeki dahili 13. pindeki LED’i kablosuz/kablolu olarak kontrol edebiliriz. Yazılım, buton durumunu sürekli denetleyerek karşı tarafa lojik durumuna göre ‘0’ veya ‘1’ ASCII karakter kodlarını gönderir. Alıcı kart bu karakteri okur ve kendi üzerindeki LED’i yakıp söndürür.
UART Protokolünün Avantajları ve Dezavantajları
Avantajları
- Sadece 2 adet veri kablosu (TX ve RX) ile basit bir bağlantı sunar.
- Ortak bir saat sinyali hattına (Clock line) ihtiyaç duymaz.
- Dahili eşlik (parity) biti sayesinde pratik hata denetimi sağlar.
- Parametreleri (veri uzunluğu, baud rate vb.) uyuştuğu sürece paket yapısı ihtiyaca göre özelleştirilebilir.
- Endüstride ve hobi elektroniğinde en yaygın kullanılan kararlı haberleşme yöntemidir.
Dezavantajları
- Tek bir paketteki veri çerçevesi boyutu en fazla 9 bit ile sınırlıdır.
- Doğal yapısı gereği çoklu alıcı (slave) veya çoklu ana (master) sistemleri desteklemez; yalnızca birebir (point-to-point) haberleşme yapabilir.
- Asenkron çalışma prensibi nedeniyle, iki donanım arasındaki baud hızı sapması en fazla %10 tolerans aralığında olmalıdır, aksi takdirde veri kaybı yaşanır.
Resmi Arduino UART dokümanlarına buradan bakabilirsiniz.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.
