Merhaba arkadaşlar stm32f4 dicovery kıtımızde system ınit dosyalarımızın ne kadar iyi olursa o kadar düzgün işleyecegını bılıyoruz (sagolsun bulent hocam bu konuda acıklamaları sayesınde ).Peki std_periph_lib kullanırken de bu systemınit dosylarını olusturmalımıyız ? Bunu neden soruyorum.Atollic true studıo kullananlar bilir systemınıt kodları system_stm32f4xx.c de yazılı bu zaman kadar library kullanarak yazdıgım kodlarda system ınıt kodlarını hıc degıstırmedım.Neden degıstırmedım ? Cunku ornegın gpıo kullanımında a portu ıcın confıg dosyamızda sunu yazıyorum RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);
burada a portu ıcın gereklı ahb1 yolunu aktıf etmıs oluyorum.Bunu tekrardan SystemInit( ) de belırtmem gerekıyor mu ? kafamın karıstıgı yer burası. Diyeceksniz systemınit in bu kadar önemli oldugunu bılıyo neden olusturmuyor ? onu da söyleyim Library kodlarını kulalnarak systemınit olusturamadıgım ıcın :) konuyu saptırmadan gercekten merak ettiğim konu bu std_lib kod yazarken kullandıgım port i2c spı ...adc blogu vs modullerı kullanırken bunları önceden system ınıtte yollarını acmalı mıyım ?
system init içinde açmana gerek yok...
mesela atollite kı hazır systemInit kodları sunlar
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset CFGR register */
RCC->CFGR = 0x00000000;
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset PLLCFGR register */
RCC->PLLCFGR = 0x24003010;
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
/* Disable all interrupts */
RCC->CIR = 0x00000000;
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
/* Configure the System clock source, PLL Multiplier and Divider factors,
AHB/APBx prescalers and Flash settings ----------------------------------*/
SetSysClock();
/* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
}
System ınıti bu sekılde kullansam bı sorun olur mu ? yoksa bulent hocamızın örneklerınde ki bu systemInit i mi kullanmalıyım ?
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 = 0x07405408; // PLL katsayilarini M=8, N=336, P=2 ve Q=7 yapalim
// RCC->PLLCFGR = 0x07402A04; // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
RCC->CR |= 0x01000000; // PLL calismaya baslasin (Rehber Sayfa 95)
while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
// FLASH->ACR = 0x00000705; // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
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 |= 0x0000000F; // GPIO A,B,C,D clock'u aktif edelim
GPIOD->MODER = 0x55000000; // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
GPIOD->OSPEEDR= 0xFFFFFFFF; // GPIOD nin tum cikislari en yuksek hizda kullanacagiz
}
hangisini kullanmalıyım ?
STDLib kullanıyorsan ikisini de kullanma.
"system_stm32f4xx.c" kullan. içerisinde "SystemInit()" fonksiyonu var zaten.
Hocam cok sagolun gercekten bugune kadar yaptıklarımın yanlıs oldugunu dusunmeye baslamıstım iyi çalısmalar :)
Konunun Üzerinden Vakit geçmiş ama F4 disko kartı ile çalışıyordum. systeminit ile ilgili bakınırken adı geçen dosyaların içerisinde xtal un 25000000hz olarak tanımlandığını gördüm. evet nereden değiştiriyoruz bunu ?
mesaj birleştirme:: 03 Temmuz 2013, 01:25:34
Dosyayı YenidenHAzırlamak Gerekiyor.Muş
25 mhz yi nereden çıkardınız anlayamadım. systeminit'de 8Mhz olarak ayarlı görünüyor.
system_stm32f4xx.c dosyasının içeriğinde Hocam.
Yada Neden 8Mhz diye Sorayım O dosyada "Sizin İçin" 8Mhz ama 16Mhz lik OSC kullanacaksam Ne yapmalıyım ?
(Aslında Cevabını Buldum.
Stm324 clock configuration tool adında excel dosya vardı. Bu dosyayı çalıtırdığınızda istediğiniz osc ayarını yaparak adı geçen system_stm32f4xx.c dosyasını oluşturuyor)
Peki ben bir soru sorayım malum discovery kit i 168Mhz yerine 200Mhz de overclock calıştırıyorlar. Bu durumda system init ayarları nasıl olacak. ?
Hocam dediğim Tool Müsade etmiyor. Bülent Hocanın verdiği İnit gibi bir init hazırlanacak ve Pll At gibi koşturulacak. Ama Mantıklımı Değil, Adanalı.
Aslında header içindeki HSE değerinin ne olduğu çalışma frekansını etkilemiyor. Sysclock ayarı ,bus clock ayarları yine katsayılar ve bölücülerle yapılıyor ve yine sizin hesapladığınız istediğiniz değerden çalışıyor. HSE değeri 8M de olsa 25M de olsa.
Fakat çevresel libraryleri kullanırken örneğin USART olsun , bu modüller bus clocklara bakıp kendi hızlarını alıyorlar ve katsayılardan bunu hesaplayarak öğreniyorlar. Bu da clock_update fonksiyonu.
@Diot
P-L-M-N ayarları ile oynayarak yapabilirsin sanırım. Kim kullanıyor link var mı ?
http://blog.stm32f4.eu/overclock-stm32f4-controllers/ (http://blog.stm32f4.eu/overclock-stm32f4-controllers/)
Örnek : STM32F4-Discovery Motion Player (http://www.youtube.com/watch?v=0ETyFmAMFjY#ws)
mesaj birleştirme:: 03 Temmuz 2013, 13:22:51
sanırım 250 Mhz için.
PLL_VCO = (HSE_VALUE / PLL_M) * PLL_N
SYSCLK = PLL_VCO / PLL_P
ex. 250MHz
HSE_VALUE=8MHz
PLL_M = 4
PLL_N = 250
PLL_P = 2
Bülent hocam cok güzel bir uygulama bu kaynak kodlarına ulaşmak mumkun mudr acaba ? Bende günlerdir forumda böyle bişi soruyorum herkese USB_HOSt üzerinden yapılmıs mp3 örneklerı ve mp3 player örneklerı uzerinde bunun üzerine kayıt etme gibi özellikler eklenebilir falan yapa bilirmiyiz böyle bişi ?