STM32 ile ARM Programlama – USART Birimine Giriş

STM32’yi anlattığımız derslere kaldığımız yerden devam ediyoruz. Önceki makalelerimizde giriş/çıkış, saat ayarı, ADC ve kesme özelliklerini anlatmıştık. Bütün ayrıntıları ile olmasa da başlangıç için yeterli bilgiyi verip uygulamaları yapmıştık. Daha ilerisi için nasıl çalışmanız gerektiğini ise makalelerin başından beri anlatıyoruz. Şimdi ise yeni bir birime ve konuya geçeceğiz. Bu birim USART birimi olup mikrodenetleyicinin seri iletişimi sağladığı en önemli birimdir.

USART iletişim protokolünü ve UART/USART’ın ne olduğunu Arduino Eğitim Kitabı’nda da C ile AVR Programlama kitabında da anlattım. Bu daha ileri seviye olduğu için burada sıfırdan sizlere tekrar anlatmak istemiyorum. O yüzden bilmeyenlerin sitemizde yer alan ilgili yazıyı öncelikle okuması gerekli.

http://www.lojikprob.com/avr/c-ile-avr-programlama-19-usart-iletisim-protokolu-ve-birimine-giris/

STM32F3’ün USART biriminin sayısına ve özelliklerine baktığımızda oldukça zengin olduğunu söyleyebiliriz. USART birimi AVR’de olduğu gibi hem senkron hem de asenkron iletişimi desteklemektedir. Uygulamada büyük çoğunlukla asenkron iletişim kullanılmaktadır. O yüzden biz de asenkron iletişim odaklı olacağız. Burada bu birimler tek bir USART başlığı altında anlatılsa da HAL kütüphanesinde UART ve USART olmak üzere iki ayrı sürücü bulunmaktadır. Ben sadece UART sürücüsünü anlatmakla yetineceğim ve USART’ı öğrenmeyi sizlere bırakacağım. Uygulamada da USART hiç karşıma çıkmadığı için ihtiyaç duyduğumda öğreneceğim.

USART birimine referans kılavuzundan baktığımızda şu özelliklerin sıralandığını görüyoruz.

  • Full dubleks asenkron iletişim (Alma ve gönderme)
  • NRZ standart formatı
  • Ayarlanabilir örnek aşımı
  • 9 MBit’e kadar ayarlanabilir akış hızı (baud)
  • Çift saat hattı
  • Otomatik hız oranı tespiti (baud)
  • Programlanabilir veri bloku uzunluğu (7, 8 ya da 9-bit)
  • Programlanabilir veri sırası (Sola veya sağa hizalı)
  • Ayarlanabilir STOP biti (1 ya da 2 bit)
  • Senkron modda senkron iletişim için saat sinyali çıkışı
  • Tek hattan yarı dubleks (tek yönlü) iletişim
  • DMA kullanarak sürekli iletişim
  • Merkezi DMA ile alınan ve gönderilen veriler SRAM’de geçici olarak saklanır.
  • Gönderici ve alıcı için ayrı etkinleştirme bitleri
  • Gönderici ve alıcı için ayrı sinyal kutbu denetimi
  • Değiştirilebilir RX ve TX ayakları
  • Modem ve RS-485 için donanım akışı denetimi
  • İletişim denetimi ve hata bayrak bitleri
  • Eşlik (Parity) denetimi
  • 14 bayrak bitli kesme kaynağı
  • Çoklu işlemci iletişimi
  • Susturma modundan uyanış.

Bir de USART biriminin genişletilmiş özellikleri vardır. Bu özellikler yukarıdaki özelliklerden farklı olarak F3 serisine mahsustur.

  • LIN master senkron mola gönderme ve tespit desteği
  • IrDA SIR enkoder ve çözümleyici desteği.
  • Smartcard modu
  • ModBus desteği

Bu özelliklerin her birinin her mikrodenetleyicinin her biriminde göremeyiz. Aşağıdaki tablo hangi mikrodenetleyicinin biriminde hangi özelliğin olduğunu göstermektedir.

Şimdi de USART fonksiyonlarını açıklayalım. Önceki yazılarımızı okuyanlar bu özellikleri daha rahat anlayacaktır. USART birimini kullanıyorsak iki yönlü iletişim için en az iki adet hattı kullanmak gerekecektir. İki hat için de mikrodenetleyicinin birime denk gelen iki ayağı gereklidir. Bu ayaklar RX (Alıcı) ve TX (Verici) olarak adlandırılmıştır. Burada RX ayağını karşı aygıtın TX  ayağına bağlamak, TX ayağını ise karşı aygıtın RX ayağına bağlamak gereklidir. Yani vericiyi alıcıya, alıcıyı da vericiye bağlıyoruz.

USART iletişimde çerçeve (frame) diye tabir edilen bir veri akış süreci vardır. Yani bir veri aktarımında başlama biti, veri bitleri ve stop bitlerinin toplamına veri çerçevesi adı verilir. Burada USART üzerinden sadece göndermek istenilen verinin değil diğer durum bitlerinin de gönderildiğini anlayabiliriz.

USART kullanırken I2C ve SPI’da olduğu gibi eş zamanlılığı sağlamak için bir saat sinyali çıkışı olmalıdır. Bunu da CK ayağından alırız. CK ayağı verici aygıtın saat sinyali çıkış ayağıdır ve alıcı aygıtın saat sinyali giriş ayağına bağlanmalıdır. Asenkron iletişimde sadece RX ve TX ayakları olmak üzere iki ayak yeterli olaraktır. Eğer tek yönlü bir iletişim tercih ediyorsak tek bir ayak üzerinden de iletişimi sağlayabiliriz. Şimdi USART biriminin blok diyagramına bakalım ve incelemeye devam edelim.

Burada öncelikle üst kısımdaki alıcı ve verici ünitelerinin veri kısmını görüyoruz. Burada alıcı için de verici için de ayrı yazmaçlar yer almaktadır. AVR mikrodenetleyicilerde alıcı ve verici için sadece bir yazmaç olduğunu hatırlatalım. Bu ayrı olması durumunda okuma ve yazma birbirinden bağımsız olmuş oluyor. Bu verici verisini TDR yazmacı, alıcı verisini ise RDR yazmacı saklamaktadır. Bu yazmaçlar ise RX ve TX ayaklarına bağlı olup oraya veri yollamakta veya oradan gelen veriyi kaydetmektedir.

USART biriminde ayarlamaları yapmak için USART_CR1, USART_CR2 ve USART_CR3 olmak üzere üç ayrı denetim yazmacı bulunmaktadır.  USART_ISR yazmacı da adından anlaşılacağı üzere USART ile ilgili kesme bitlerini bulunduran yazmaçtır. Ayrıca veri iletim oranını (baud) ayarlamak için USART_BRR yazmacı bulunmaktadır. USART saati ise Fck adı verilen saat sinyalinden beslenmektedir.

Bu yazmaçlar ve blok diyagramı C ile AVR programlama derslerimizi takip edenlere oldukça tanıdık gelecektir. Neden öncelikle iyi bir 8-bit denetleyiciyi donanımıyla ve yazılımıyla öğrenmeniz gerektiğini buradan anlayabilirsiniz. Size çoğu şey yabancı gelmeyecektir.

Referans kılavuzundan donanımın temelini sizlere anlattık. Geri kalan kısmı ve yazmaçları HAL kütüphanesini kullanacağımız için anlatmaya gerek görmüyoruz. Önceden nasıl yazmaçları kullandığımızı anlatmıştık. Eğer dileyen olursa bu kılavuzdan yararlanıp yazmaçlar üzerinde program yazabilir.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.