Daha önceki örneklerimizde SysInit fonksiyonu ana programımızın içinde tanımlıydı ve osilatör başlatma rutini olarak, @bunalmış hocanın yazdığı örnekleri kullanıyorduk. Artık kütüphane kullanarak sistemimizi ve osilatörümüzü başlatacağız.
Bunun için önce
system_stm32f4xx.c
system_stm32f4xx.h
dosyalarını proje klasörüne kopyalıyoruz. Kütüphane klasöründe de durabilir ancak, kristal frekansımıza göre dosyada değşiklik yapacağız. Bu sebeple proje klasöründe olmasında fayda var.
Önceki SystemInit kodlarımız şöyleydi:
void SystemInit()
{
unsigned int i;
for (i=0;i<0x00100000;i++); // OSC oturtma ve kurtarma rutini
RCC->CFGR |= 0x00009400; // AHB ve APB hizlarini max degerlere set edelim
RCC->CR |= 0x00010000; // HSE Xtal osc calismaya baslasin
while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
RCC->PLLCFGR = 0x07402A04; // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim 168 Mhz
RCC->CR |= 0x01000000; // PLL calismaya baslasin (Rehber Sayfa 95)
while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
FLASH->ACR = 0x00000605; // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
RCC->CFGR |= 0x00000002; // Sistem Clk u PLL uzerinden besleyelim
while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
/*********************************************************/
RCC->AHB1ENR |= 0x0000001F; // GPIO A,B,C,D,E clock'u aktif edelim
RCC->APB1ENR|=0x00000020; // Timer7 CLK'u aktif edelim (84 Mhz)
TIM7->CR1=0x0080; // Otomatik Reload
TIM7->PSC =4199; // Prescaler degerimiz 839, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 84E6 / (840) = 100 KHz
TIM7->ARR =1; // Counter, Decimal 1 olunca basa donsun. Her 20 mikrosaniye de bir timer int olusacak.
TIM7->DIER=0x0001; // Update Int enable
TIM7->CR1|=0x0001; // Counter Enable
NVIC->ISER[1] = 0X00800000; // NVIC de Timer 7 interrupta izin verelim
}
Öncelikle bu fonksiyon içindeki osilatör başlatma kodlarının dışındaki kodları başka bir fonksiyonun içine alın.
Sonra SystemInit(){} fonksiyonunu komple silin.
system_stm32f4xx.c dosyasını , proje yöneticisinden sisteme dahil edin.
system_stm32f4xx.h dosyası başka bir yerde #include edilmemişse, #include edin.
system_stm32f4xx.c dosyasını açıp aşağıdaki satırı
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M 25 // başka bir değer de olabilir
#define PLL_N 336
şu şekilde değiştirin.
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M 8 // MHz cinsinden kristal frekansımız. stm32F4 discovery kartında 8MHz.
#define PLL_N 336
stm32f4xx.h dosyasını açıp, aşağıdaki satırı bulun. Eğer buradaki değer kristal frekansınızdan farklıysa, düzeltin.
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
Derleyin ve çalıştırın.
Teşekkürler hocam,
ST_Lib ile frekans değiştirmek için kolay bir yöntem var mı?
Yani şöyle bir kolaylıktan bahsediyorum: Parametre olarak, kullandığım kristal değerini vereceğim, istediğim frekansı vereceğim, otomatik olarak frekansı ayarlayacak.
Böyle bir şey yoksa bile, yazmam gereken kodları üreten bir arayüz,
hiç olmadı bana M,N,Q,P değerlerini verebilecek bir hesaplama uygulaması var mıdır?
Alıntı yapılan: meftun - 19 Mayıs 2014, 04:35:40
Teşekkürler hocam,
ST_Lib ile frekans değiştirmek için kolay bir yöntem var mı?
Yani şöyle bir kolaylıktan bahsediyorum: Parametre olarak, kullandığım kristal değerini vereceğim, istediğim frekansı vereceğim, otomatik olarak frekansı ayarlayacak.
Böyle bir şey yoksa bile, yazmam gereken kodları üreten bir arayüz,
hiç olmadı bana M,N,Q,P değerlerini verebilecek bir hesaplama uygulaması var mıdır?
"Clock configuration tool" lar var. Excel dosyası olarak hazırlanmış. Onu kullanarak rahatlıkla clock ayarları yapılabilir. Ayarları yaptıktan sonra "system_stm32f4xx.c" dosyasını üretiyor. Sizde projenize ekleyip kullanıyorsunuz.
http://yadi.sk/d/8B7M91PAQfJ9r (http://yadi.sk/d/8B7M91PAQfJ9r)
Alıntı yapılan: fgokcegoz - 19 Mayıs 2014, 08:24:35
"Clock configuration tool" lar var. Excel dosyası olarak hazırlanmış. Onu kullanarak rahatlıkla clock ayarları yapılabilir. Ayarları yaptıktan sonra "system_stm32f4xx.c" dosyasını üretiyor. Sizde projenize ekleyip kullanıyorsunuz.
http://yadi.sk/d/8B7M91PAQfJ9r (http://yadi.sk/d/8B7M91PAQfJ9r)
libre office de basic söz dizimi hatası verdi.acaba sadece excel e mi özgü bu.
Alıntı yapılan: sfiber - 19 Mayıs 2014, 12:31:15
libre office de basic söz dizimi hatası verdi.acaba sadece excel e mi özgü bu.
libre office ile denemediğim için bilemiyorum...
Ferudun hocam teşekkür ederim, inceliyorum.
Alıntı yapılan: meftun - 19 Mayıs 2014, 13:56:04
Ferudun hocam teşekkür ederim, inceliyorum.
Rica ederim. STM32F4x9 serisi 180MHz olunca güncellenmesini bekledik ama güncel versiyonu çıkmadı herhalde. ST nin sayfasında yeni "CUBE" librarylerine yönlendiriyor. Belki içinde mevcuttur, güncel halleri.