Haberleşme protokollerini birkaç özellik çatısında ayrıştırmak mümkündür. Bu özellikler ve açıklamaları aşağıdaki gibidir:

UART bağlantı şeması yukarıda verilmiştir. Şemada da görüleceği üzere cihazlar arasında iletim (TX) ve alım (RX) hatları iki ayrı yoldan sağlanmaktadır. Dolayısı ile aynı anda veri gönderimi ve alımı için fiziksel şartlar ortadan kaldırılmıştır, yani UART için Full-Duplex bir yapıya sahiptir diyebiliriz. Buna ek olarak bağlantı şemasından görüleceği üzere iki cihaz arasında senkronizasyonu sağlayacak herhangi bir saat sinyali bağlantısı da bulunmamaktadır. Bu sebepten UART için Asenkron bir yapıya sahiptir diyebiliriz.
Baudrate tanım olarak saniyede iletilen bir miktarını ifade etmektedir. Yani bir cihazın 9600 baudrate olarak çalıştığını biliyorsak bu saniyede 9600 bit veri ile iş yaptığını belirtir. Sistemde UART haberleşme kullanılacağında baudrate, bir cihazın karşısındaki cihazdan ne hızda veri alacağını ve cihaza ne hızda veri göndermesi gerektiğini bilmesi açısından kritik öneme sahiptir. Bu sebepten ötürü UART haberleşme penceresi iki cihazda da açılmadan önce bu baudrate değerleri ayarlanır, ardından cihazlar birbirleri ile haberleşmeye başlar.
Baudrate değerleri cihazdan cihaza ve sistemden sisteme farklılık gösterebilmekle birlikte cihazlarda genel olarak tercih edilen değerler 9600, 19200, 28800, 38400, 57600, 76800, 115200’dür.
Donanımda bu UART Baudrate değerini tutması için bir register bulunmaktadır. (Bu register adı ve kullanılacak hesaplamalar karttan karta göre değişkenlik göstermekte olup bu yazıda kullanılacak register ve hesaplamalar STM32 kartlar için geçerlidir) STM32 için bu register’ın adı USART Baudrate Register (BRR)’dir.
Kullanılan haberleşmede her ne kadar haberleşme için bir saat sinyaline gerek duyulmuyor olsa da verileri almak ve göndermek için bir saat sinyali eşliğinde bunu yapmak gerekmektedir. Yani haberleşme hattına bir saat sinyali eşlik etmese dahi cihazlar kendi içerisinde bir saat sinyali çalıştırırlar. Bu saat sinyalleri de Baudrate ile hesaplanır. Kullanılan donanımın saat frekansı fclk olmak üzere, aşağıdaki formül ile bu saat sinyalinin ne sıklıkla takip edileceği aşağıdaki formül ile hesaplanır;
$$ USARTDIV=fclk/Baudrate $$
Örnek verecek olursak 42 MHz bir donanım ile 9600 baudrate değeri (saniye başı işlenecek bit) elde edilmek istensin. Bu kapsamda her bir saat darbesi (1/42000000=) 23.8 nanosaniyede vurmaktadır ve 9600 baudrate değeri elde etmek için her (42000000/9600=) 4375 saat darbesinde bir örnek almak gerekmektedir. Bir başka deyişle saatin frekansı uygun USARTDIV değerine bölünerek istenen baudrate değeri elde edilir. USART Baudrate Register (BRR)’ında ise baudrate değeri değil, bu USARTDIV değeri tutulur ve bu değere göre saat sinyali seyrekleştirilerek haberleşmenin iki cihaz için de senkronizasyonu, haberleşme hattında bir saat sinyali eşlik etmeden sağlanır. Sonuç olarak sistemin gönderici tarafında (1/baudrate) saniyerde bir yeni bit çıkarması beklenir. Alıcı tarafındaysa bu süre oversampling ile daha küçük parçalara bölünebilir.

Yukarıdaki görsel RM0090 Reference Manuel kitapçığından alınmıştır. Bu görselde USART_BRR Register yapısı gösterilmiştir. Son 16 bit ayrılmıştır ve sürekli olarak reset (0) değerine ayarlı olmalıdır. 15 ile 4. bitler arası DIV_Mantissa bitleridir ve bu USARTDIV değerinin tam sayı kısmını tutar. İlk 4 bit ise DIV_Fraction bitleridir ve bu USARTDIV değerinin ondalık kısmını tutar. Bu iki alan “rw” olarak, yani hem okunabilir hem de yazılabilir olarak işaretlenmiştir. Not olarak ise baud sayacı eğer TE veya RE bitleri disable edilirse duracağını belirtmektedir. TE biti “Transmission Enable”, yani gönderim aktif flag’i, RE biti “Receive Enable” yani alım aktif flag’idir.
Kısacası istenilen baudrate değerinin elde edilmesi için gönderici ve alıcı kendi donanımlarındaki saatlerin hızlarını ayarlar. Saatin istenen hıza ayarlanması için bir divider devresi kullanılır ve bu divider değeri Baudrate Register içerisinde tutulur. Bu register ile saatin hızı bölünerek sistem istenilen hıza ulaştırılır.
1 saat darbesinde gönderilen verinin değerini 1 saat darbesinde okumaya çalışmak gürültü, baudrate hassasiyeti vb sebeplerden ötürü fazlasıyla risk barındırmaktadır. Bu kapsamda bağlantının alıcı tarafında oversampling ile göndericinin 1 saat darbesi birden çok parçaya bölünmüştür. 8x oversampling bu bir saat darbesinin 8’e, 16x oversampling ise bu bir saat darbesinin 16’ya bölündüğünü ifade etmektedir. Yani gönderici tarafın saati 160 mikrosaniyede bir kez vurduğunu, yani 160 mikrosaniyede 1 bit veri gönderdiğini farzedelim. 8x oversampling durumunda alıcı taraf gelen veriyi (160/8=) 20 mikrosaniyede bir kez okurken 16x oversampling durumunda alıcı taraf gelen veriyi (160/16=) 10 mikrosaniyede bir kez okur. Dolayısı ile gürültü ile değişen değerler, baudrate hassasiyeti ile kaybedilebilecek değerlerin önüne geçilmek istenmektedir. Alıcının 1 bit veri gönderdiği sürede 8x oversampling için 8 veri, 16x oversampling için 16 veri toplandı. Peki hangi veri alıcının gönderdiği doğru veri olarak kabul edilir? Doğru verinin kabulü için tek bir çözüm/kabul vardır. Tam ortada elde edilen veri her zaman doğru veri kabul edilir. Dolayısı ile 8x oversampling için 4. veri, 16x oversampling için 8. veri doğru veri olarak kabul edilir. Bu ilgili örneği seçme sorunu donanımda çözülmüş bir sorundur. Donanım oversampling oranına göre bit süresi botunca belli aralıklarla ölçüm yapar ama CPU bundan haberdar olmaz. UART peripheral’inin içinde bu iş için özel bir sampling logic ve state machine vardır. Bu donanımdaki iki yapı ortadaki veriyi otomatik olarak alır ve yazılımın kullanacağı “Data Register - DR”a bırakır.