STM32F030 CLOCK KONFİGÜRASYONLARI

Keil ile proje oluşturduğumuzda program önceden yazılmış olan sistem konfigürasyon ayarlarını “system_stm32f0xx.c” içerisinde yapmaktadır.Burdaki clock ayarlarını değiştirerek istediğimiz şekilde clock konfigürasyonunu yapabiliriz.

Clock_Config

Clock konfigürasyonunu 4 bölümde incelememiz gerek ve akılda kalıcılığı arttırmak için şematik olarak göstermek istedim. “system_stm32f0xx.c” içindeki void SetSysClock(void)  fonksiyonu içinde bu 4 konfigürasyon yapılmaktadır.

1.KISIM:Bu kısım HSI ve HSE osilatörlerinin aktif edildiği kısımdır. Bunu gerçekleştiren kodlar ise şöyledir.

RCC->CR |= ((uint32_t)RCC_CR_HSEON);   Harici osilatörün devreye sokulmasını sağlayan komut.Bu işlemi gerçekleştirmek için RCC_CR registerının HSEON isimli biti set edilmiştir.

#define  RCC_CR_HSEON                        ((uint32_t)0x00010000) görüldüğü gibi registera yazdığımız değer aslında bu şimdi registerın bitlerine bakalım.

RCC_CR_Register

0x00010000 hex sayısı bu registerdaki 16.biti yani HSEON bitini set eder.

2.KISIM:Bu kısımda AHB(HCLK) ve APB(PCLK) bus hatlarının clocklarının ayarlanması işlemi yapılır.Dikkat edilmesi gereken nokta AHB hattının clock sinyali belli bir bölme oranıyla sistem clock kaynağından alınırken, APB hattının sinyali AHB hattı üzerinden belli bir bölme oranıyla alınır. Aşağıdaki kodlarla bu bölme oranlarının ayarlanmasını görelim.

RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;//HCLK=SYSCLK olarak ayarlanır.

RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;  //PCLK=HCLK olarak ayarlanır.

Görüldüğü gibi bölme oranları 1 alınmıştır bu işlemi yapmak için RCC_CFGR registerı kullanılmaktadır. Şimdi register içinde yaptığımız değişikliğe bakalım.

#define  RCC_CFGR_HPRE_DIV1                  ((uint32_t)0x00000000)  

#define  RCC_CFGR_PPRE_DIV1                  ((uint32_t)0x00000000)

RCC_CONF_REG

HCLK için 1, 2,4,8,16,32,64,128,256,512 olmak üzere toplam 9 bölme seçeneği.

PCLK için  1,2,4,8,16 olmak üzere toplam  5 tane bölme seçeneği vardır.

Bu nedenle register içerisinde en az 3 bitlik yere ihtiyaç vardır.Yukardaki komutlarla biz her iki bus hattının bölme oranını , 000 verisi göndererek  1 e ayarladık.Unutulmaması gereken nokta bu hatların en fazla 48MHz frekansa ayarlanabileceğidir.Bölme oranları buna göre ayarlanmalıdır.

 

3.KISIM :

Bu kısımda PLL kaynağı,kaynağın bölme oranı ve PLL çarpım faktörü değerleri ayarlanır.

RCC->CFGR &= (uint32_t)((uint32_t)~( RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));

Bu komut ile RCC_CFGR_PLLSRC , RCC_CFGR_PLLXTPRE ,  RCC_CFGR_PLLMULL bitleri resetlenir.

 RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE__PREDIV1 | RCC_CFGR_PLLMULL6);

Bu komut ile bölme oranı 1’e ayarlanır ve PLL giriş sinyalinin 6 katını  ile çarparak çıkışa verir.

RCC->CR |= RCC_CR_PLLON:PLL aktif hale getirilir.Dikkat edilmesi gereken nokta PLL ayarları PLL akitif hale getirildikten sonra yapılamaz.

4.KISIM:Sistem clock frekans kaynağının seçildiği kısımdır.

RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); // SW bitinin içeriği resetleniyor
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; //Sistem clock kaynağı olarak PLL çıkışı seçiliyor.
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
{

}//Sistem clock sinyali ayarlanana kadar beklenir.

Yorum bırakın