“system_stm32f4xx.c” Dosyasında Clock Ayarlarının Yapılması

system_stm32f4xx.c içeriğinde STM32F4xx için system clock ayarlamalarının yapıldığı dosyadır.

STM32F4 kodlamaya başladığım ilk zamanlarda bu dosyanın ne işe yaradığını pek bilmezdim. Timer kullanarak yaptığım bir kaç uygulamadan sonra aslında bu dosyanın gerçekten çok önemli olduğunu anladım. Bir çok yerde aradım ve bulması çok zor oldu. Özellikle Timer gibi süre gerektiren işlemlerde clock ayarları eğer yanlışsa belirlediğiniz süreçler de hatalar oluyor. Örnek verecek olursam, diyelim ki LED’i her saniyede bir yakıp söndürmek istiyoruz. Eğer bu dosya ayarları düzgün yapılmamışsa, LED’imiz saniyede bir değilde iki yanabiliyor.

Bildiğimiz gibi süre olayı mikroişlemcilerde çok ama çok önemlidir. Bu sebeple system clock ayarlarının nasıl yapılacağını aşama aşama göstereceğim.

system_stm32f4xx.c dosyasını oluşturabilmemiz için ST bir excel dosyası çıkartmış. Bu dosyanın ismi stm32f4xx_Clock_Configuration_V1.1.0.xls‘dir.

Clock configuration tool for STM32F40x/41x microcontrollers (AN3988) linkinden aşağıda STSW-STM32091 karşısından Download butonuna tıklayarak indirebilirsiniz.

AN3988 Application note – Clock configuration tool for STM32F40xx/41xx/427x/437x microcontrollers linkinde bu clock ayarlama aracının nasıl kullanılacağı detaylı bir şekilde anlatılmıştır.

Ayarlamaların nasıl yapılması gerektiğini anlatmak istiyorum.  Dosyamızı linkten indirdikten sonra uygun bir yere çıkartalım. stm32f4xx_Clock_Configuration_V1.1.0.xls dosyasını açalım.

System Clock Configuration

Yukardaki resimde görüldüğü gibi ayarları yapalım. Bu ayarlara göre HSE OSC 8Mhz yaptık. Yani dışarıdan kristal kullanmış olduk.Generate’e tıklayarak system_stm32f4xx.c dosyası stm32f4xx_Clock_Configuration_V1.1.0.xls dosyasının bulundunduğu klasörde oluşur. Oluşturduğumuz yeni system_stm32f4xx.c dosyasını kopyalayıp kullanacağımız proje klasörüne yapıştırıp eski system_stm32f4xx.c dosyasıyla değiştirelim.

HSE OSC’yi stm32f4xx.h dosyasında da değiştirmemiz gerekiyor. Bunun için stm32f4xx.h dosyasını herhangi bir text editor ile açalım. Aşağıdaki satırları bulalım.

Bu kodda HSE_VALUE karşısında bulunan 25000000 değerinin yerine 8000000 yazıp kaydedelim. 8000000 değerini yazmamızın sebebi HSE OSC’yi 8 MHz olarak ayarlamış olmamızdır. Yeni kod aşağıdaki gibi değiştirilmiş olmalı.

Eğer yanılmıyorsam HSE_VALUE=8000000 ifadesini aşağıda gördüğümüz gibi compiler’ımıza ekleyerek stm32f4xx.h dosyasındaki ibareyi değiştirmeden de bu ayarlamayı yapabiliriz. Çünkü “if not defined” diyor. Yani HSE_VALUE’yu eğer belirtmişsek belirttiğimiz değeri HSE_VALUE’ya atamış oluruz. Ben yine de garanti olsun diye ilk metodu kullanıyorum. Siz her ikisini de deneyebilirsiniz.

hse_value

Artık işlemcimizi 168 MHz’de istediğimiz gibi kullanabiliriz. Bu clock ayarlamalarıyla nano saniyelik hassasiyetler dahi yakalanabilir. Bir sonraki konuda Timer anlatmayı planladığım için öncesinde clock ayarlarımızı doğru yapmamız çok önemliydi.

İnşallah faydalı olabilmişimdir. Herkese iyi çalışmalar…

5 thoughts on ““system_stm32f4xx.c” Dosyasında Clock Ayarlarının Yapılması

  1. 8mhz kristal kullanacağımızı soldaki clock source kısmına 8 yazarak belirttik.
    168mhz osilatör istediğimizi nereye belirtiyoruz?
    Yoksa PLL değerleriyle oynayarak mı denk getiriyoruz?

    • Resimdeki ayarlar 8mhz’lik dışardan bağlanan bir kristale göre yapılmıştır. Diğer değerler ise her peripheral için kullanılabilecek maksimum hıza göre ayarlanmıştır.
      168 mhz işlemcinin hızıdır. Osilatör ise farklı bir terimdir. Şu ayarlarla zaten işlemci 168mhzde çalışıyor. Fakat eğer değerler degisirse peripherallardaki hizlar degisir. Elde edilebilecek maksimum hizlar resimdeki ayarlar ile mümkün. Örneğin Timer3 maksimum 84Mhz hızda çalışır. Çünkü Timer3’ün bulunduğu Rcc peripheral clocku system core clock / 2 dir. Yani 168/2’den 84Mhz elde edilir.
      Aynen 168mhz PLL değerleriyle elde ediliyor. Değerleri değiştirip testler yapabilirsiniz.

Leave a Comment

%d bloggers like this: