Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Kaanx - 16 Mart 2013, 15:28:33

Başlık: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: Kaanx - 16 Mart 2013, 15:28:33
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 ?
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: memo333 - 16 Mart 2013, 15:32:21
system init içinde açmana gerek yok...
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: Kaanx - 16 Mart 2013, 15:49:52
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 ?
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: Klein - 16 Mart 2013, 16:47:52
STDLib kullanıyorsan ikisini de kullanma.

"system_stm32f4xx.c" kullan. içerisinde "SystemInit()" fonksiyonu var zaten. 
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: Kaanx - 16 Mart 2013, 17:45:50
Hocam cok sagolun gercekten bugune kadar yaptıklarımın yanlıs oldugunu dusunmeye baslamıstım  iyi çalısmalar :)
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: muhittin_kaplan - 03 Temmuz 2013, 00:49:26
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ş
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: diot - 03 Temmuz 2013, 09:26:15
25 mhz yi nereden çıkardınız anlayamadım. systeminit'de 8Mhz olarak ayarlı görünüyor.
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: muhittin_kaplan - 03 Temmuz 2013, 09:54:10
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)
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: diot - 03 Temmuz 2013, 10:24:59
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. ?
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: muhittin_kaplan - 03 Temmuz 2013, 10:46:04
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ı.
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: camby - 03 Temmuz 2013, 11:29:04
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ı ?
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: SERRO EFE - 03 Temmuz 2013, 11:33:26
http://blog.stm32f4.eu/overclock-stm32f4-controllers/ (http://blog.stm32f4.eu/overclock-stm32f4-controllers/)
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: diot - 03 Temmuz 2013, 13:15:51
Ö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
Başlık: Ynt: Stm32f4 discovery STD lib kullanımında SystemInit()
Gönderen: Kaanx - 03 Temmuz 2013, 19:15:12
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 ?