STM32 Reset ve Clock (Saat) Ayarı ve Özellikleri

STM32 yazı dizimize mikrodenetleyicinin en temel birimlerinden biri olan Reset ve Saat denetimi ünitesini (RCC) anlatmakla devam ediyoruz. Bundan önceki yazılarımızda HAL kütüphanesinin RCC sürücüsüyle ve CubeMX programıyla nasıl saat ayarı yaptığımızı size anlatmıştık. Şimdi daha ayrıntılı olarak öğrenmek istediğimizden RM0316 adlı mikrodenetleyici referans kılavuzunu okuyarak bu birim hakkında daha ayrıntılı bilgi edineceğiz.

Reset

Reset sistemi yeniden başlatma anlamı taşıyıp yazmaçları ve program sayacını sıfırlamak gibi belli başlı işlemler yürütür. Mikrodenetleyici mevcut programı en baştan başlatıp çalışmaya devam eder. Bu reset özelliğini kullandığımız kişisel bilgisayarlarda da görmemiz mümkündür. STM32 mikrodenetleyicilerde ise üç farklı reset tipi bulunmaktadır.

  • Sistem Reseti
  • Güç Reseti
  • RTC reseti

Sistem resetinde reset bayrakları ve saat denetimci yazmacı ve RTC etki alanındaki yazmaçlar haricindeki bütün yazmaçlar yeniden başlatma değerlerine geri döndürülür. Sistem reseti aşağıdaki durumlardan birinde gerçekleşir.

  • NRST ayağının sıfıra çekilmesi (harici reset)
  • Pencere watchdog olayı (WWDG reseti)
  • Bağımsız watchdog olayı (IWDG reseti)
  • Yazılım reseti (SW reset)
  • Güç tasarrufu reseti
  • Seçenek baytı reseti
  • Güç reseti

Reset kaynağı Kontrol ve durum yazmacındaki bayrak bitleri kontrol edilerek tespit edilebilir. Mikrodenetleyicinin içindeki reset devresinin basitleştirilmiş şeması şu şekildedir.

SYSRESETREQ biti kesme ve reset denetim yazmacında yer alır ve aygıtı yazılımsal resete götürür . Düşük güç denetimi resetinde ise iki yol bulunmaktadır. Bunlardan biri bekleme (Standby) moduna girerken yürütülür diğeri de Stop (Durdurma) moduna girerken yürütülür. RTC resetinde ise yazılımsal bir resetin yanında güçle alakalı bir reset de bulunmaktadır.

Saat

Sistem saatini sürmek için aşağıdaki saat kaynakları kullanılır.

  • HSI Dahili 8MHz RC osilatör saati
  • HSE Harici Kristal osilatör saati
  • PLL saati

Bu aygıtlar ayrıca aşağıdaki ek saat kaynaklarına sahiptir

  • 40 kHz düşük hız dahili RC osilatör. Bu osilatör bağımsız watcdog birimini beslemektedir ve RTC için durma ve bekleme modunda otomatk uyanma için kullanılabilir.
  • 32.768 kHz düşük hızlı harici kristal (LSE kristali) RTC’yi sürmek için kullanılabilir.

Güç tüketimini iyileştirmek için her saat kaynağı bağımsız olarak kapatılıp açılabilir. AHB frekansını ayarlamak için birkaç ön derecelendirici kullanılır. APB2 veri yolu yüksek hızlıdır ve APB1 veri yolu düşük hızlıdır. AHB ve APB2 hatlarının azami frekansı 72MHz’dir. APB1 hattının azami frekansı ise 36MHz’dir. Aşağıdaki çevre birimleri hariç bütün çevre birimlerinin saati HCLK, PCLK1 ve PCLK2’den sağlanır.

  • Flash hafıza programlama arayüzü saati her zaman HSI saatinden beslenir.
  • 48 MHz USB saati PLL VCO saatinden beslenir.
  • Seçenek baytı yükleyici saati her zaman HSI saatinden beslenir.
  • ADC saati PLL çıkışından sağlanır ve 72MHz’e kadar çıkabilir. Pek çok da ön derecelendirici seçeneği vardır.
  • USART saatleri sistem saatinden, HSI saatinden, LSE saatinden ve APB1 ya da APB2 saatinden beslenebilir.
  • I2C saatleri sistem saatinden ya da HSI saatinden beslenebilir.
  • I2S saatleri harici saat kaynağından beslenebilir.
  • RTC saati LSE, LSI ya da HSE saatinin 32’ye bölünmesiyle beslenebilir.
  • IWDG saati LSI saatine bağlıdır.

RCC birimi Cortex Sistem Zamanlayıcısı (SysTick) birimini beslemektedir. Bu besleme sinyali AHB (HCLK) saatinin 8’e bölümüdür. SysTick zamanlayıcısı bu saatle beslenebileceği gibi doğrudan HCLK yani Cortex saati ile beslenebilir. Bunlar SysTick denetim ve durum yazmacı ayarlarından belirlenir. STM32F303x serisinin saat şeması şu şekildedir.

 

Burada gördüğümüz şemanın daha kolay anlaşılır olanını STMCubeMX programında görmekteyiz. O yüzden okuyucular bir yandan da CubeMX programını açıp şemayı incelemelidir.

HSE Saati

Yüksek hızlı harici saat sinyali (HSE) iki muhtemel saat kaynağından üretilebilir. Bunlardan biri harici kristal ya da rezonatör diğeri ise harici bir saat sinyalidir. Bu sinyal ya da devre elemanı OSC_IN ve OSC_OUT ayaklarına aşağıdaki şemadaki gibi bağlanmaktadır.

Denetleyiciye bağlanan harici osilatörün frekansı 4 ile 32MHz arasında olabilir. Harici saat modunda ise 32 MHz’e kadar sinyal girişini desteklemektedir. Kare, sinüs ya da üçgen dalga olup %40-60 arasında görev döngüsüne sahip olması gereklidir.

HSI Saati

HSI saati dahili 8MHz RC osilatör tarafından üretilir ve doğrudan sistem saati olarak ya da PLL beslemesi olarak verilebilir. HSI osilatörün en büyük avantajı maliyeti düşürmesidir fakat kristal osilatöre göre isabetliliği daha düşüktür. RC osilatör frekansı her çip için farklı olup fabrika tarafından %1 isabetlilik sağlayacak şekilde kalibre edilmiştir. Resetten sonra saat denetim yazmacının HSICAL bitlerinde fabrika kalibrasyon verisi bulunmaktadır. Ayrıca gerilim ve sıcaklıktan dolayı da RC osilatör hızı etkilenebilir. Bunu ayarlamak için saat denetim yazmacında (RCC_CR) bitler bulunmaktadır.

PLL

Dahili PLL HSI ya da HSE’den gelen çıkış saatini alarak bunları çarpıp frekansı artırır. Yani düşük frekanslı bir osilatörde yüksek frekans elde etmek için bu saat sinyalini PLL’den geçirmemiz gereklidir. PLL etkinleştirilmeden önce PLL ayarları yapılması gerekir. PLL etkinleştirildiğinde ayarlara dokunma şansımız yoktur.

LSE Saati

LSE kristali 32.768 kHz değerinde krisyal veya seramik rezonatör olabilir. Bu saat sinyali elektronikte genellikle gerçek zaman saatlerini sürmek için kullanılır. Burada da düşük güçlü fakat yüksek isabetliliğe sahip olan osilatör dahili RTC birimini çalıştırmakta kullanılır. Ayrıca LSE kısmı harici bir saat ile de beslenebilir. Bu durumda frekans 1MHz’e kadar çıkabilir.

LSI Saati

LSI saati düşük güç tüketimli dahili RC osilatör olarak görev yapmaktadır. Bu saat uyku modunda uyandırmaya, watchdog zamanlayıcısını çalıştırmaya ve aynı zamanda RTC sinyali olarak kullanılmaya müsaittir.

Sistem Saati (SYSCLK) Seçimi

Sistem saatini üç farklı kaynaktan seçmemiz mümkündür. Bunlar aşağıda sıralanmıştır.

  • HSI Osilatör
  • HSE Osilatör
  • PLL

Sistem resetinden sonra HSI osilatör sistem saati olarak seçilir. Saat sinyali doğrudan ya da PLL üzerinden seçildiğinde bunu durdurmak mümkün değildir.

Saat Güvenlik Sistemi (CSS)

Saat güvenlik sistemi yazılım tarafından etkinleştirilebilir. HSE başlangıç beklemesinden sonra saat dedektörü etkinleştirilir ve osilatör durduğunda devre dışı kalır. Eğer HSE saatinde bir hata tespit edilirse HSE saati otomatik olarak devre dışı bırakılır. Bu durumda HSI saatine dönüş yaparak sistemin çalışmasına devam edilir.

ADC Saati 

ADC saati PLL çıkışından beslenmektedir. 72MHz’e kadar çıkabilir ve ön derecelendirici değerleri ile bölünür. AHB saati ile eş zamanlı değildir. Ayrıca ADC saati AHB saatinden de beslenebilir ve 1, 2 veya 4’e bölünebilir. Böyle olduğunda eş zamanlı çalışmış olur.

RTC Saati 

RTC saati HSE/32, LSE ya da LSI saatlerinden biri olabilir. Bunlar RTC denetim yazmacındaki RTCSEL bitlerinin ayarlanmasıyla seçilir. RTC kullanılırken sistemin PCLK saati RTC saatine her zaman eşit veya daha fazla olmak zorundadır. HSE ve LSI saatleri seçilmediğinde LSE saati saat olarak kullanılır. Eğer LSE saati RTC saati olarak seçilirse Vdd yani besleme gerilimi kapatıldığında Vbat yani bağlı bulunan pilden beslenerek çalışmaya devam eder. Sistem resetinde RTC saati beslenmeye devam eder ve çalışır haldedir. Eğer LSI saati RTC’yi beslemek için seçilmişse Vdd beslemesi kesildiğinde RTC’nin garantisi yoktur. Aynı şekilde LSI ve HSE saatleri RTC’yi besliyorsa güç kesildiğinde RTC devre dışı kalabilir.

Zamanlayıcı Saati

Zamanlayıcılar AHB ya da PLL saatinden saat sinyali alabilir. APB’den saat sinyali aldığında zamanlayıcıların saat frekansı donanım tarafından otomatik olarak ayarlanır. Eğer APB ön derecelendiricisi bire eşitse APB yolu ile aynı frekansta çalışır. Böyle olmadığı durumda ise APB yolunun frekansının iki katına eşit olur.

Watchdog Saati 

Bağımsız watchdog (IWDG) donanım seçeneği veya yazılım tarafından erişilebilir. Etkinleştirildiğinde LSI osilatör etkinleştirilir ve devre dışı bırakılamaz.

Saat Çıkışı Desteği 

Mikrodenetleyici saat çıkışı (MCO) birimi saat çıkış ayaklarından belli saat sinyallerinin çıkışını verebilir. Bunun için ilgili GPIO portlarının ayakları alternatif fonksiyon moduna ayarlanmalıdır. MCO yani çıkış saati olarak şu sinyallerden biri seçilebilir.

  • LSI
  • LSE
  • SYSCLK
  • HSI
  • HSE
  • PLL / 2

Buraya kadar saat birimi ile ilgili önemli yerleri sizlere anlattık. Yazmaçları ve nasıl kullanılacaklarını ise burada anlatmıyoruz ve RM0316 kılavuzunun ilgili yerlerini okumayı size bırakıyoruz.

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.