Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: z - 24 Aralık 2011, 15:13:13

Başlık: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 15:13:13
Sinav sorularinin samatalarini bu basliktan yapalim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 15:28:53
hocam m4 şamatalarda yazmıştım okudunuz mu bilmem. emin olmamakla birlikte birkaç cevap ve soru yazdım ;D.

GPIOx_OSPEEDR resette sadece B portu için 0x0000 00C0 diğerleri için 0x0000 0000 değerinde.
siz tüm bitleri set ediyorsunuz. 16 bitlik port için her bir bitin 4 farklı alabileceği değerden 11=100MHz i seçiyorsunuz. 30pf da diyor tabiii. bu kristal ile 30pf kullanıldığında anlamına mı geliyor.


System clock (SYSCLK) selection

                                   After a system reset, the HSI oscillator is selected as the system clock. When a clock source
                                   is used directly or through PLL as the system clock, it is not possible to stop it.

sistem 16MHz Rc osilatör ile çalışıyor.

RCC-CFRG reset değeri 0x0000 0000 ile çalışacağıncan AHB ve APB ler için presecale yok. Hepsi 16MHz de çalışır.

PORTlarda AHB den çalıştığına göre onlarda 16MHz de olmazmı.

GPIOD->OSPEEDR= 0xFFFFFFFF bunu yapmanın bir anlamı varmı?

hocam puanları bol verin biraz. hepsini çözdüm soru bile yazdım. ;D
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 16:18:53
Evet cevaplar dogru. Fakat soyle yapalim ki okuyanlara daha cok faydasi bulunsun.

Rehber yada Hard dokumana atifta bulunun sayfa numarasini verin.

Mesela

GPIOx_OSPEEDR resette sadece B portu için 0x0000 00C0 diğerleri için 0x0000 0000 değerinde. (Rehber Sayfa 149)

Sorulari sorarken cevaplarini hazirlamadim. Burda tartisacagiz.

Bu arada yazdigim kodlarin temellerini cogunlukla bir once yazdigim programlardan cut copy ile aliyorum. Dolayisi ile miras yoluyla gelen kodlarda fazlalik satirlar yakalayabilirsiniz.
Bu satirlar kaldirip atilsa bile kodlar duzgun calisacaktir. Bu tip satirlar yakalarsaniz bunlari da tartismaya acabilirsiniz.

Mesela OSPEEDR portunu daha ilk ornekten en yuksek hiza aldim. Cunku bir sonraki ornekte ele almak yada kendi merakimi gidermek icin, portun herhangi bir pininnden en yuksek kac Mhz sinyal cikabilirim sorusuna cevap arayacaktim. Dolayisi ile ilk ornekte port hizinin en yuksek hiza alma sebebi bu.

Ote yandan, kart uzerinde sadece 4 led oldugu halde bu 4 ledin bagli oldugu pinlerin hizini maxa almadim da toptan tum portun tum pinlerini en yuksek hiza aldim sorusu akla gelebilir. Cevabi, boyle yapmamin zarari yok. Fazladan kafa yormak istemedim.

Gene de kafaniza takilan sorulari sorun bazilarinin cevabi yukaridakiler kadar basit olabilir bosu bosuna kafanizi kurcalamasin.

Alıntı YapSystem clock (SYSCLK) selection

                                   After a system reset, the HSI oscillator is selected as the system clock. When a clock source
                                   is used directly or through PLL as the system clock, it is not possible to stop it.

sistem 16MHz Rc osilatör ile çalışıyor.

Hangi sayfada yaziyor? Gene mesajinizda referans verin.

Bu cevaba ilave olarak asagidaki eklentiyi de yapmanizi arzu ederim.

RCC_CR registeri  (Rehber Sayfa 93) reset ardindan 0x0000 XX83 degerini alir.

Bunun anlami HSI High Speed Internal osilator on ve PLL off vaziyettedir.

(http://www.cncdesigner.com/STM/CLK_PLL.JPG)
Yukaridaki blok semadaya bakalim.  (Rehber Sayfa 85) (Blogu sadelestirmistim)

HSI osc calismakta ok. Yukaridaki blok semada HSI, HSE ve PLL den clock secimi yapan SW komutatoru hangi pozisyonda?

RCC_CFGR registeri (Rehber Sayfa 97)  resette 0x0000 0000 degerini almaktadir SW1, SW0 bitleri 0 olacaktir.

Bu bitlerin 0 olmasi asagidaki tablodan da gorulecegi uzere HSI nin sistem osilatoru olarak kullanildiginin gostergesidir.

00: HSI oscillator selected as system clock
01: HSE oscillator selected as system clock
10: PLL selected as system clock
11: not allowed


Seklinde cevap yazarsaniz mesajlar okunasi zevkli ve ogretici olacaktir.

Evet CPU muz 16Mhz ile kosuyor.

AHB ve APB frekanslari icin RCC clock configuration register (RCC_CFGR) (Rehber Sayfa 97) ya bakalim.

Bu registerin resetteki default degeri 0x0000 0000 imis. Bu durumda .......

Seklinde devam edelim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 16:38:35
evet hocam haklısınız. sayfa vs belirtirsek daha güzel olacak. öğrenciyiz biz mazur görün. registerlar felan programdan takip ederken nerden neye baktığımı bende karıştırmaya başladım.
örnek programlarınızda void SystemInit() içini dediğiniz gibi miras yoluyla doldurmuşsunuz. aslında ben biraz da fazlalılığından değilde tam emin olamadığım için(clock mekanizmasından tam emin olamadığımdan) sordum. yani portlar şu durumda 16MHz de mi yoksa GPIOD->OSPEEDR ayarlmasıyla başka bir şekilde daha yüksek frekanslarda mı çalışır merak etmiştim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 16:55:39
Mesela ornek kodlarda RCC->AHB1ENR |= 0x0000000F;    // GPIO A,B,C,D clock'u aktif edelim satirini goreceksiniz. Halbuki uygulamada atiyorum sadece D portu kullaniliyor A,B,C portlari kullanilmiyor.

Neden GPIO A,B,C clock sinyallerini aktif ettiniz diye dusunebilirsiniz. Gene cevabi cok basit. Nasil olsa sonraki ornek kodlarda bu portlari kullanma durumum var simdiden acayim gibi basit bir  mantikla bunlari da harekete gecirdim.

Cipin icinde, clock isareti aktif edilen her donanim akim cekmeye baslar ve cipin guc tuketimini arttirir. Bu aklinizda bulunsun.




Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 17:02:27
peki hocam.anlaşılmıştır. sorularınızı takip ediyoruz. içinden çıkabilirsem açıklayıcı cevaplar vermeye çalışırım. teşekkürler.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 18:07:50
hocam 23.5MHz için uygun P,Q ve N değerleri çıkmıyor gibi geliyor bana. usb yi de 48 alırsak tabi.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 18:09:34
USB iyi isin icine karistirma. 48Mhz uretmeyecegiz.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: mozkan87 - 24 Aralık 2011, 18:10:27
Alıntı yapılan: fryrmnd - 24 Aralık 2011, 18:07:50
hocam 23.5MHz için uygun P,Q ve N değerleri çıkmıyor gibi geliyor bana. usb yi de 48 alırsak tabi.
Evet bende aynı şekilde buldum ama usb frekansını 48 MHz'i geçemeyecek şekilde ayarlarsak sonuç çıkıyor.

Edit: Ben yazarken siz cevap yazmışsınız hocam.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: sayment - 24 Aralık 2011, 18:10:37
Hocam final dönemi vize mi olur :(
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 18:23:33
Ne zaman isterseniz o zaman vizeye girin

Fakat pesin pesin soyleyeyim, en az 70 alamayanin kartini alirim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: sayment - 24 Aralık 2011, 18:30:52
Malesef anca tatilde tüm konuları okuyup halledebilirim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 24 Aralık 2011, 18:40:36
PLL giriş değeri 1-2 MHz arasında olmak zorunda bu yüzden M değerini 8'e ayarlamak 1MHz çıkış ile işimizi kolaylaştırıyor
HARD sf:96
Alıntı YapCaution: The software has to set these bits correctly to ensure that the VCO input frequency
ranges from1 to 2 MHz. It is recommended to select a frequency of 2 MHz to limit
PLL jitter.

P değeri maximum 8 değerine sahip olabiliyor, çıkış frekansımız düşük olduğu için bu değeri kullandım

N/P değeri 23,5 olması için N 188 değerine sahip oluyor, notumuza baktığımızda istenilen değerler içinde olduğunu görebiliyoruz
HARD sf:96
Alıntı YapCaution: The software has to set these bits correctly to ensure that the VCO output frequency is between 64 and 432 MHz.

Bu durumda M=8 P=8 N=188 değeri ile 23,5MHz değerini yakalayabiliyoruz

fakat STM'in kendi clock configuration tool'unda N değerini 192 den aşağı veremiyoruz burada bir çelişki var ve datasheet de sebebini de bulamadım
N değerini 192 den aşağı veremezsek böyle bir frekansta çalışamayız


Kodu sizin kodlardan çalarak yazarsak :)
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 = 0x04432F08;      // PLL katsayilarini M=8, N=188, P=8 ve Q=4 yapalim

    RCC->CR |= 0x01000000;            // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle

    FLASH->ACR = 0x00000600;        // Flash ROM icin 0 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
}
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 18:49:56
ersin hocam şuhliyle PLL N 376 mı gözüküyor. yoksa farklı bir sebepten dolayı 2 katı mı yapmak gerekiyor(188x2)?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 24 Aralık 2011, 18:54:30
yok hocam yerleştirirken kaydırmışım, düzelttim şimdi =)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 19:03:06
Bahsettiginiz tool USB donaniminin calismama ihtimalinden dolayi sinirlama getirmis olabilir. CPU donaniminin 23.5Mhz de calismamasi icin bir neden yok.

Toolda USB donanimini lullanmayacagim diye bir secenek yokmu?

Birde wizardlari bosverin Wizard biziz.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 24 Aralık 2011, 19:06:27
Wizard modda kullanmıyorum hocam, girdiğimiz değeri direk sonuca ulaştırdığı için kolay olur dedim ama yine hesabı kendim yaptım birşey değişmedi =)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 19:15:09
Soruyu hazirlarken sinirlamalari da dikkate alarak P, N, M degerlerini secip 23.5 Mhz gibi bir sonuc elde ettim ve sizlerin 23.5 Mhz den yola cikip tersine bu degerleri tespit etmenizi istedim. 23.5 i ozellikle kafadan atmadim.

Peki sonuc ne bu durumda? 8Mhz xtal ile CPU 23.5Mhz de kosacakmi kosmayacakmi?

Deneyen, olcum yapan oldumu?

Osiloskopunuz yok. Frekansmetreniz yok. CPU nun kosturdugu frekansin 23.5Mhz olup olmadigini bilmek istiyorsunuz. Ne yapardiniz?


Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 19:19:43
hocam 23.5 e göre led yakma söndürme felan ayarlayamazmıyız. 23.5 te 1sn yansın 1sn sönsün.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 19:23:36
Nasil?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 19:28:16
pek iyi bir çözüm olmadı galiba. başka nasıl anlaşılarbilir scopsuz 23.5 te koştuğu? ???
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 19:33:45
Cevabin dogru. Bu is icin kisa bir kod yazip ledleri yakip sondurur ve  kol saatimi bakarim.
Sonucta CPU ya calisir ya calismaz. Calisirsa 23.5 Mhz e set ettigim clock frekansinin belki 23.45 oldugunu anlayamam ama 11.75 yada 47Mhz olup olmadigini anlarim.

Fakat ledleri nasil yakip sondureceksiniz de 23.5 Mhz olduguna karar vereceksiniz kismina daha cok aciklik getirin demek istedim.

PIC projelerinde Delay yerine 1200020200 yaziyorum for dongusunde sayidiririyorum vs diyorlar oyle mi yaparsin?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 19:34:59
hocam kodu mu yaz dedeniz? :)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: NaMcHo - 24 Aralık 2011, 19:45:12
Timer birimini 23.5MHz'e göre 1ms'de bir kesme üretecek şekilde ayarlanır , her kesmede bir değişkenin değeri arttırılır  değişken 1000 değerine ulaşınca led'in durumu terslenir.

1ms'yerine 100ms'de bir kesme oluşturmak hata oranını azaltacıktır demek yanlış olmaz sanırım.


1ms'yeye kurmaya ne gerek var :) 1000ms'de bir kesme oluşturulacak şekildede timer sayacına yazım yapılabiliyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 19:51:46
3. örnekteki gibi yani yazdığınız gibi delay ekleyerek yazılan program sakatmı olur hocam. yoksa namcho hocamın dediği gibi timer mı kurmak gerekli.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 24 Aralık 2011, 19:59:21
şebekeden opto ile herhangi bir interrupt pinine giriş yapıp ayarladığım timer'ın değerini yedekleyip sıfırlamasını sağlarım
elde ettiğim değeri şebeke frekansına göre hesaplayıp sonucu çıkarırım
şebekeyi referans almak biraz tehlikeli ama benzer bildiğiniz bir frekans değer girişi ile aynı şekilde sonuç elde edilebilir
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 20:06:36
Ersinin verdigi system inite ornek kodlardaki timer 7 ile yanip sonen led projesini birlestirdim.

Ledlerin saniyede bir yanip sondugunu gordum. (Scopla da teyid ettim) Evet CPUmuz tami tamina 23.5Mhz de kosuyor.

(Soruyu hazirlarken kullandigim degerler. M=4 N=94 P=8 idi.)


#include "STM32F4xx.h"

// FAHB=FCPU
// FAPB2=FCPU/2
// FAPB1=FCPU/4

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 = 0x04432F08;     // 23.5Mhz icin ayarlayalim
    RCC->CR |= 0x01000000;         // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000));// Pll hazir oluncaya kadar bekle
    FLASH->ACR = 0x00000600;       // Flash ROM icin 0 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
}
int main()
{
    RCC->APB1ENR|=0x00000020;      // Timer7 CLK'u aktif edelim (FCPU/4) x 2  (23.5 / 2 = 11.75 Mhz)
    TIM7->CR1=0x0080;              // Otomatik Reload
    TIM7->PSC =11749;              // Count frekansimiz = 11.75 E6 / 11750 = 1000 Hz
    TIM7->ARR =1000;               // Counter, Decimal 1000 olunca basa donsun 1 sn demek
    TIM7->CR1|=0x0001;             // Counter Enable

    while(1)
      {
         if (TIM7->CNT > 500) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                     // Ledler sonsun
      }
}



Bir arkadas M=8  N=188 P=8 degerlerinden  RCC->PLLCFGR = 0x04432F08;   nin nasil olusturuldugunu usenmeden aciklarsa super olur. (Ben usendim)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 20:10:00
hocam valla gene önce davrandınız.ben de gene azcık çaldım çırptım debelendim aşağıdakini denedim. ama sanki 1sn den biraz uzun yanıyor gibi.

#include "STM32F4xx.h"

void SystemInit()
{
unsigned int i;

    for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
    RCC->CFGR |= 0x00000000;         // AHB ve APB de prescale yok. timer7 ye direk 23.5 MHz gidicek.
    RCC->CR |= 0x00010000;            // HSE Xtal osc calismaya baslasin       
    while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
    RCC->PLLCFGR = 0x04432F08;      // 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
//  Yukarıdaki örnek programdaki kodların aynısı
}

int main()
{
    RCC->APB1ENR|=0x00000020; // Timer7 CLK'u aktif edelim (23.5 Mhz)
    TIM7->CR1=0x0080;               // Otomatik Reload
    TIM7->PSC =23500;               // Prescaler değerimiz 23500, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 23.5E6 / (23500) = 1000 Hz
    TIM7->ARR =1000;                 // Counter, Decimal 1000 olunca basa donsun 1 sn demek (2000 yapmadım çünkü aPB presclae değerim 1)
    TIM7->CR1|=0x0001;             // Counter Enable

    while(1)
      {
         if (TIM7->CNT > 500) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                            // Ledler sonsun
      }
}


hata yaptım düzelticem

şimdi düzeldi.1 sn de bir yanıp sönüyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 20:21:55
Soru Şu
RCC->CFGR |= 0x00009400; Kodu ile Ne yapılmaya Çalışılmış ?
(RCC nin CFGR registerini sayıyla orlama
Kayıcıyı inceledim böyle bir ayar yok
)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 20:26:15
bunalmış hocam P=8, N=188, M=8 verince 23.5 çıkıyor tam. 23.5=(8/M=8)*(N=188/P=8)

registerda tam sağlıyor. versiğiniz 32 bit hesaplayıcı ile baktım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 20:30:28
clock configuration tool
indirdim ama çalıştıramadım. macro lar felan tamam ama olmuyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 20:30:43
muhittin hocam pll ayarı yapılıyor. AHB=160MHz, APB1=42MHZ, APB2=84Mhz elde etmek için presclale değerleri bu registerda ilgili yerlere yazılıyor. ilk sayfada pll blok şeması var.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 20:40:16
0x00001400 versek ne olurdu ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 20:41:10
Benim kodlarimla fryrmnd nin kodlarinda

birimiz TIM7->PSC =23500; yazdi

birimiz TIM7->PSC =11749;

Fakat buna ragmen her iki kod da saniyede 1 kez ledleri yakip sonduruyor.

Cok guzel bir ornek oldu. Sebebini aciklayacak varmi?

Muhittin Kaplan sorunu daha netlestirirmisin? (Sayfa no vermeyi unutmayalim)

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 20:46:19
Hocam Başlık 5.3.2 de RCC PLL configuration register (RCC_PLLCFGR) var.
Sanırım rehber di.
Sizin verdiğiniz değer olan 0x00009400 değeri verilmiş
Etki eden Bitler 6-14 nolu bitler.
Bunlar PLLN: Main PLL (PLL) multiplication factor for VCO
peki neden kullanılmayan 15. biti de 1 yapmaya çalışıyoruz ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 20:50:06
Alıntı yapılan: muhittin_kaplan - 24 Aralık 2011, 20:46:19
Hocam Başlık 5.3.2 de RCC PLL configuration register (RCC_PLLCFGR) var.
Sanırım rehber di.
Sizin verdiğiniz değer olan 0x00009400 değeri verilmiş
Etki eden Bitler 6-14 nolu bitler.
Bunlar PLLN: Main PLL (PLL) multiplication factor for VCO
peki neden kullanılmayan 15. biti de 1 yapmaya çalışıyoruz ?

RCC->CFGR |=0x00009400; yapiyorum.

Sen RCC_PLLCFGR registerine bakiyorsun.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 20:52:07
Ben Pc yi kapatayım Hocam. Doğrusunuz. :-[
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 24 Aralık 2011, 20:55:02
Alıntı yapılan: muhittin_kaplan - 24 Aralık 2011, 20:30:28
clock configuration tool
indirdim ama çalıştıramadım. macro lar felan tamam ama olmuyor.
hocam şu an için hiç uğraşmayın mantığını kapmaya çalışın, finallerden sonra C# üzerinde ayarları yapmamızı sağlayacak bir wizard oluşturmayı düşünüyorum
işlerimiz o zaman daha kolay olacaktır
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 21:11:34
Alıntı yapılan: bunalmis - 24 Aralık 2011, 20:41:10
Benim kodlarimla fryrmnd nin kodlarinda

birimiz TIM7->PSC =23500; yazdi

birimiz TIM7->PSC =11749;

Fakat buna ragmen her iki kod da saniyede 1 kez ledleri yakip sonduruyor.

Cok guzel bir ornek oldu. Sebebini aciklayacak varmi?


Bu soruyu atlamayin. Konuyu pekistirmek adina cok onemli.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 21:35:17
Timer1 geri sayım ile 1sn aralıklı led yakıp söndürme

#include "STM32F4xx.h"

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
}

int main()
{
    RCC->APB2ENR|=0x00000001; // Timer1 CLK'u aktif edelim (84 Mhz)
    TIM1->CR1=0x0090;               // Otomatik Reload(Timer 1 geri sayıcak(down counter şeklinde ayarlandı)
    TIM1->PSC =41999;               // Prescaler değerimiz 41999, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) (84?2)E6 / (42000) = 4000 Hz
    TIM1->ARR =4000;                 //
    TIM1->CR1|=0x0001;             // Counter Enable

    while(1)
      {
         if (TIM1->CNT > 2000) GPIOD->ODR= 0x00000000;     // Ledler yansin
         else GPIOD->ODR= 0x0000F000;                            // Ledler sonsun
      }
}


Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 24 Aralık 2011, 21:38:12
Alıntı yapılan: bunalmis - 24 Aralık 2011, 21:11:34
Bu soruyu atlamayin. Konuyu pekistirmek adina cok onemli.

RCC->CFGR |= 0x00009400 koduyla APB1 frekansını böldüğünüzden kaynaklanıyor hocam
TIM7 e sistem frekansının yarı frekansı giriyor bu şekilde
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 21:58:51
@fryrmnd

Hangi timer hangi busdan clocklaniyor konusuna dikkat etmelisin.


#include "STM32F4xx.h"

// FAHB=FCPU
// FAPB2=FCPU/2
// FAPB1=FCPU/4

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
    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 |= 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
}

int main()
{
    RCC->APB2ENR|=0x00000001;     // Timer1 CLK'u aktif edelim (84 x 2 =168 Mhz)
    TIM1->CR1=0x0080;             // Otomatik Reload
    TIM1->PSC =41999;             // 168E6 / (42000) = 4000 Hz
    TIM1->ARR =4000;              // 4000 de bir yenilensin
    TIM1->CR1|=0x0001;            // Counter Enable

    while(1)
      {
         if (TIM1->CNT > 2000) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                      // Ledler sonsun
      }
}
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 22:15:24
evet hocam baştan sona hatalı hesapladım. APB nin prescale oranı 1 olmadığını, 2 katı hızda saycağını bile bile yanlış hesapladım. TMR->CNt yi bile 2000 başlangıç değeri verip 500 yapmışım. kusura bakmayın. ben eskisini azıcık değiştireyim. 4000 den geri sayan haliyle değiştireyim.yanlış kalıp kafa karıştırmasın.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 22:18:50
Yalniz 3.soruyu neden atladik?

3.soru su ana kadarki donanim bilgileri ile C bilginizi birlestirmeye yonelik.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 22:20:54
hocam 3. soruda deidğiniz  gibi c bilgisi girdiğinden c ye biraz bakmam lazım. define felan. tam emin değilim. kolayıma geleni yapmaya çalıştım da onu da beceremedim  :(
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 22:24:31
Bende Anlamaya Çalışıyorum..
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 22:29:49
Nerede takildin?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 22:34:45
hocam 3. soruda define ile cpu ve bus frekanslarını belirlerken Hz değerleriniz decimal olarak verip  System _Init() içinde tanıtılmasın şeklinde mi istediniz. yoksa define a RCC_CFRG ye atanması gereken hex değerini mi vermemizi istiyorsunuz. yani System_Init() içinde decimal hexadecimal çevrimi şeklinde mi yapıcaz. 
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 22:35:02
Bunalmış Hocam asker adamım.
Bana Sırasıyla Şurasını Şunu Burasnı Bunu Yap demen gerek Bu OSC ayarları için. 15 sene sonra zor oluyor liberal yaklaşımlar. :)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 22:41:38
bunalmış hocam isterseniz dilim döndüğünce ben yapayım osc ayarlarını muhittin hocama
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 22:44:00
Alıntı yapılan: fryrmnd - 24 Aralık 2011, 22:34:45
hocam 3. soruda define ile cpu ve bus frekanslarını belirlerken Hz değerleriniz decimal olarak verip  System _Init() içinde tanıtılmasın şeklinde mi istediniz. yoksa define a RCC_CFRG ye atanması gereken hex değerini mi vermemizi istiyorsunuz. yani System_Init() içinde decimal hexadecimal çevrimi şeklinde mi yapıcaz.

Diyelimki programin tepesinde

#define Fcpu 168000000
#define Fahb 168000000
#define Fapb1 84000000
#define Fapb2 42000000

yazdik.

Demekki yazacagimiz fonksiyon  PLL ve dividerlari set etmek icin bu verilerden yola cikacak,
RCC->CFGR, RCC->PLLCFGR  vs registerlere yuklenecek sayisal degerleri bulacak.

@Muhittinkaplan

Sanirim 3.soru cevaplandiginda RCC->CFGR, RCC->PLLCFGR registerlerine neden o sayilar yukleniyor daha iyi anlayacaksin.

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 22:48:39
anladım hocam bir abdest namaz arası versem. sonra yazmaya başlasam o fonksiyonları.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 24 Aralık 2011, 22:49:32
Aynen Benimde Mola Vermem Gerekiyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: GreeN - 24 Aralık 2011, 23:19:40
#include "STM32F4xx.h"

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
    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 |= 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

}

int main()
{
    RCC->APB2ENR|=0x00000002; // Timer8 CLK'u aktif edelim (84 Mhz) Rehber 117
    TIM8->CR1=0x0080;              // Otomatik Reload  Rehber 333
    TIM8->PSC =42000-1;           // Prescaler değerimiz 42000, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 42E6 / (42000) = 1000 Hz
    TIM8->ARR =1000;                // Counter, Decimal 1000 olunca basa donsun 1 sn demek
    TIM8->CR1|=0x0001;            // Counter Enable

    while(1)
      {
         if (TIM8->CNT > 500) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                            // Ledler sonsun
      }
}
// Programin sonu

Dersi Kaçırdık ,Sorular çözülmüş sanırım ben 4. yapayım dedim yapayım dedim.
Timer 8 'i kullandım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 23:25:49
green hocam 3. yü yapsaydınız da rahatlatsaydınız bizi  ;D
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: mozkan87 - 24 Aralık 2011, 23:39:17
Ben hala bir çözüm yöntemi bulamadım M,N,P yi nasıl hesaplatacağımıza dair.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: GreeN - 24 Aralık 2011, 23:48:41
Alıntı yapılan: fryrmnd - 24 Aralık 2011, 23:25:49
green hocam 3. yü yapsaydınız da rahatlatsaydınız bizi  ;D
Yaf 3 çözülmemişmiydi :P
Çözelim abi...
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 24 Aralık 2011, 23:56:52
N-> 64-432  arası
P->2,4,6,8      "
Q->2-15         "
M->2-63         "

değer alabiliyor. önce bir algoritmasını çözsem yarım yamalak c bilgim ile yaparım inşallah.  :)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 24 Aralık 2011, 23:59:55
PLL frekansinin Xtal, M, N cinsinden degerini veren bagintiyi yazin.

Daha sonra da CPU clk frekansi ile PLL frekansi arasindaki bagintiyi yazin.

Gerisi corap sokugu gibi gelmesi lazim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 25 Aralık 2011, 00:02:36
Soru 3 nedir bulamadım başlıkta.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 25 Aralık 2011, 00:04:46
Alıntı yapılan: muhittin_kaplan - 25 Aralık 2011, 00:02:36
Soru 3 nedir bulamadım başlıkta.

https://www.picproje.org/index.php/topic,36897.msg267159/topicseen.html#msg267159
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 25 Aralık 2011, 00:05:02
https://www.picproje.org/index.php/topic,36897.0.html
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 25 Aralık 2011, 00:21:18
hocam bir bildiğiniz vardır diyorum bakınıp duruyorum ama bir türlü göremedim ve olayı  çözemedim. şimdi spu frekansı zaten pll frekansı olmuyor mu?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 25 Aralık 2011, 00:43:55
Olurmu? PLL, istenirse 432Mhz e kadar kitlenebiliyor. Halbuki CPU en fazla 168Mhz de işletilebiliyor. PLL çıkışında P bölücüsü var. Rehber Sayfa 85.

Şimdi bu durumda 2 soru biraz ezbere çözüldü gibi duruyor. 2. soruyu çözebiliyorsan bu soruyu da çözebilmen gerekir. En azından CPU clk için gerekli M, N, P değerlerini hesaplayabilirsin.

Mesela atıyorum 8Mhz xtal ile CPU yu 84Mhz de koşturmak istesek M, N ve P yi bulamazmısın?

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 25 Aralık 2011, 00:47:06
Tam istediğiniz kod değil hocam, biraz işi compiler yüklensin istedim ama hesaplama kısmında istediğim verileri bulamadım
Hiç içime sinmedi ama şimdilik bunu vereceğim, Optimizasyon ile de çalışmıyor >:( ayrıca bilginize, yarın düzeltmeye çalışırım

bu arada belki arkadaşlar kopya çekerler  :)

#define KHZ 1000
#define MHZ 1000000
#define XTAL 8*MHZ
#define F_CPU 23500*KHZ
#define F_AHB 23500*KHZ
#define F_APB1 23500*KHZ
#define F_APB2 23500*KHZ

#if F_CPU >168*MHZ
#error "F_CPU >168MHz"
#elif F_AHB >168*MHZ
#error "F_AHB >168MHz"
#elif F_APB1 >42*MHZ
#error "F_APB1 >42MHz"
#elif F_APB2 >84*MHZ
#error "F_APB2 >84MHz"
#endif

#if XTAL < 2*MHZ
#error "Crystal frequency too Low"
#elif XTAL > 63*MHZ
#error "Crystal frequency too High"
#endif

#if !((F_AHB!=F_CPU)||(F_AHB!=F_CPU/2)||(F_AHB!=F_CPU/4)||(F_AHB!=F_CPU/8)||(F_AHB!=F_CPU/16)||(F_AHB!=F_CPU/32)||(F_AHB!=F_CPU/64)||(F_AHB!=F_CPU/128)||(F_AHB!=F_CPU/256)||(F_AHB!=F_CPU/512))
#error "You can't produce AHB Frequency with current CPU Frequency"
#endif

#if !((F_APB1!=F_AHB)||(F_APB1!=F_AHB/2)||(F_APB1!=F_AHB/4)||(F_APB1!=F_AHB/8)||(F_APB1!=F_AHB/16))
#error "You can't produce APB1 Frequency with current AHB Frequency"
#endif

#if !((F_APB2!=F_AHB)||(F_APB2!=F_AHB/2)||(F_APB2!=F_AHB/4)||(F_APB2!=F_AHB/8)||(F_APB2!=F_AHB/16))
#error "You can't produce APB2 Frequency with current AHB Frequency"
#endif


void SystemInit(void){
volatile unsigned int i,j,chk_brk=0;
volatile unsigned int PLL_P=0,PLL_M=0,PLL_N=0,PLL_RG=0,PLL_Q=2;
for(i=(XTAL/(2*MHZ));i<=(XTAL/MHZ);i++){
for(j=32;j<433;j++){ //P=2 için
if ((F_CPU==((XTAL*j)/(i*2)))&&(((XTAL*j)/(i*MHZ))>63)){
PLL_P=0; //2
PLL_M=i;
PLL_N=j;
chk_brk=1;
break;
}
}
if(chk_brk==1) break;
for(j=32;j<433;j++){ //P=4 için
if ((F_CPU==((XTAL*j)/(i*4)))&&(((XTAL*j)/(i*MHZ))>63)){
PLL_P=1; //4
PLL_M=i;
PLL_N=j;
chk_brk=1;
break;
}
}
if(chk_brk==1) break;
for(j=32;j<433;j++){ //P=6 için
if ((F_CPU==((XTAL*j)/(i*6)))&&(((XTAL*j)/(i*MHZ))>63)){
PLL_P=2; //6
PLL_M=i;
PLL_N=j;
chk_brk=1;
break;
}
}
if(chk_brk==1) break;
for(j=32;j<433;j++){ //P=8 için
if ((F_CPU==((XTAL*j)/(i*8)))&&(((XTAL*j)/(i*MHZ))>63)){
PLL_P=3; //8
PLL_M=i;
PLL_N=j;
chk_brk=1;
break;
}
}
if(chk_brk==1) break;
}
if((PLL_M==0)||(PLL_N==0)){
while(1);
}
PLL_RG=(PLL_Q<<24)|(PLL_P<<16)|(PLL_N<<6)|PLL_M;


sorun çözüldü düzgün değerler üretiyor, şimdi kısaltmada  :)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 25 Aralık 2011, 02:58:41
Eline sağlık. Kodları tamamen incelemedin ve denemedim. Gözüme ilişen bir durum var.

#if !((F_AHB!=F_CPU)||(F_AHB!=F_CPU/2)||(F_AHB!=F_CPU/4)..........

yerine

#if !((F_AHB!=F_CPU)||(2*F_AHB!=F_CPU)||(4*F_AHB!=F_CPU)..........   olması gerekmez mi?





Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 25 Aralık 2011, 03:17:49
Haklısınız hocam o kısımları düzelttim, biraz kısaltma ile bu hale getirdim, Optimizasyon ile de çalışıyor
#define KHZ 1000
#define MHZ 1000000
#define XTAL 8*MHZ
#define F_CPU 47000*KHZ
#define F_AHB 23500*KHZ
#define F_APB1 23500*KHZ
#define F_APB2 23500*KHZ
#define XTAL_K XTAL/MHZ

#if F_CPU >168*MHZ
#error "F_CPU >168MHz"
#elif F_AHB >168*MHZ
#error "F_AHB >168MHz"
#elif F_APB1 >42*MHZ
#error "F_APB1 >42MHz"
#elif F_APB2 >84*MHZ
#error "F_APB2 >84MHz"
#endif

#if XTAL < 2*MHZ
#error "Crystal frequency too Low"
#elif XTAL > 63*MHZ
#error "Crystal frequency too High"
#endif

#if !((F_AHB!=F_CPU)||(2*F_AHB!=F_CPU)||(4*F_AHB!=F_CPU)||(8*F_AHB!=F_CPU)||(16*F_AHB!=F_CPU)||(32*F_AHB!=F_CPU)||(64*F_AHB!=F_CPU)||(128*F_AHB!=F_CPU)||(256*F_AHB!=F_CPU)||(512*F_AHB!=F_CPU))
#error "You can't produce AHB Frequency with current CPU Frequency"
#endif

#if !((F_APB1!=F_AHB)||(2*F_APB1!=F_AHB)||(4*F_APB1!=F_AHB)||(8*F_APB1!=F_AHB)||(16*F_APB1!=F_AHB))
#error "You can't produce APB1 Frequency with current AHB Frequency"
#endif

#if !((F_APB2!=F_AHB)||(2*F_APB2!=F_AHB)||(4*F_APB2!=F_AHB)||(8*F_APB2!=F_AHB)||(16*F_APB2!=F_AHB))
#error "You can't produce APB2 Frequency with current AHB Frequency"
#endif


void SystemInit(void){
volatile unsigned int i,j,chk_brk=0;
volatile unsigned int PLL_P=0,PLL_M=0,PLL_N=0,PLL_RG=0,PLL_Q=2;
for(i=(XTAL_K/2);i<=XTAL_K;i++){ // VCO girişi 1MHz-2MHz arası tara
for(j=((64*i)/XTAL_K);j<((432*i)/XTAL_K);j++){ // 64 - 432 MHz arası tara
if ((((XTAL/2)*j)/i)==F_CPU){ //P=2 için
PLL_M=i;PLL_N=j;PLL_P=0;chk_brk=1;break;
}
if ((((XTAL/4)*j)/i)==F_CPU){ //P=4 için
PLL_M=i;PLL_N=j;PLL_P=1;chk_brk=1;break;
}
if ((((XTAL/6)*j)/i)==F_CPU){ //P=6 için
PLL_M=i;PLL_N=j;PLL_P=2;chk_brk=1;break;
}
if ((((XTAL/8)*j)/i)==F_CPU){ //P=8 için
PLL_M=i;PLL_N=j;PLL_P=3;chk_brk=1;break;
}
}
if(chk_brk==1) break;
}
if((PLL_M==0)||(PLL_N==0)){
while(1);
}
PLL_RG=(PLL_Q<<24)|(PLL_P<<16)|(PLL_N<<6)|PLL_M;
    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 = 0x00400000 | PLL_RG;     // PLL ayarlansın
    RCC->CR |= 0x01000000;         // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000));// Pll hazir oluncaya kadar bekle
    FLASH->ACR = 0x00000600;       // Flash ROM icin 0 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
}
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 25 Aralık 2011, 03:46:05
Kağıt kalemsiz hesaplardaki cambazlıklar pek gözükmüyor, birkaç kez düzenleme yedi ama Q çıkışına bakmaksızın kullanılabilir durumda
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 25 Aralık 2011, 11:52:23
Hocam ne Yapmışsınız Siz ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 25 Aralık 2011, 11:59:03
evet hocam haklısınız. ben blok  şemadan bakıp pll frekansı herzaman system clock a eşit olcak diye bağlamışım kendimi. halbuki dediğiniz gibi N 432 ye kadar gidiyor. dediğim gibi ben yaptıklarımdanemin değilim hocam zaten c kodlamada da sıkıntı var. birşeyler bölük pörçük aklımda şuan birleştiremiyorum. c programlama başlığını da tam olarak inceleyemedim. gerçi kodda da pek bir zorluk gözükmüyor.
ersin hocam eline sağlık.
kitler bunalmış hocama gidecek bu gidişle.  :)

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 25 Aralık 2011, 15:33:09
hocam başka soru yok mu  :)

@muhittin_kaplan hocam o kadar karmaşık bir yapı değil, sadece bilinmeyen fazlalığı var
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 25 Aralık 2011, 15:48:19
hocam programlama konusundaki başlıkları hala bitiremedim hızla ilerliyorum. tabii yazmadan aşama kaydedilmeyecek. ama üşünmeden önceki başlıklarda cevabını yazdığınızı  gördüğüm sorularımı cevapladığınız için sağolun.
kafama takıldı. ersin hocamın programında
if((PLL_M==0)||(PLL_N==0)){
        while(1);
    }

kısmında uygun frekans değeri yoksa sonsuz döngüye girmek için sanırım. peki ramin 0x20000000 adresine 1 byetlık veri yazan kod kısmı var mı? farkedemedim de.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 25 Aralık 2011, 15:55:50
hata kodlarını başta ürettiğim için bir değişken koymadım, şu an sadece cpu üretilemiyorsa çakılıyor diğer türlü hiç derlenmiyor

ayrıca programda AHB APB1 APB2 atamalarıda eksik hocam

hatta işin içine wait state hesabınıda sokmak lazım ama soruda yazmıyor =)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 25 Aralık 2011, 16:21:02
Burada bir ara verelim. Cok az katilimci var. Diger kart sahiplerinin durumunu bilmiyoruz. Muhittin kaplanin sorusuna cevap olmasi acisindan

Asagidaki soruyu adim adim cozelim.

Xtal frekansimiz 8Mhz dir.

Islemcimizi 100Mhz de kosturmak istiyoruz. AHB frekansimiz 100Mhz, APB1 ve APB2 frekanslarimiz 25Mhz olacaktir. USB donanimini kullanmayacagiz.

Bu amaci gercekleyecek register ayarlamalarini yapalim.

Cozum:

(Burada USB donaninminin kullanilmayacak olmasi, FPLL/Q oraninin 48Mhz olmasi sartini kaldirir. Dolayisi ile FPLL icin sinirlayici faktorlerden birisi kalkmis durumdadir.
Bu aciklamayi anlamaya bu asamada calismayin)

PLLin kitlendigi frekans    FPLL=(Xtal/M)*N bagintisi ile hesaplanir.

FCPU=FPLL/P dir.   Bu konuyu anlatmistik. https://www.picproje.org/index.php/topic,35721.0.html (https://www.picproje.org/index.php/topic,35721.0.html)

Uretici bazi sinirlamalar getirmis. (Rehber Sayfa 96) Bunlar;

Xtal/M orani 1...2 araliginda olmak zorundadir.

N 64...432 araliginda olmak zorundadir.

M 2...63 araliginda olmak zorundadir.

P 2, 4, 6 yada 8 olabilir.

Bu sartlar altinda

M=4 yaparak Xtal/4 den 2 buluruz.

FPLL=(Xtal/M)*N  ve FCPU=FPLL/P bagintilarindan

FCPU= 100= 2*N/P  yazariz.

O halde N/P orani 50 dir. Yani N=50P olmalidir.

P=2 alirsak N=100 cikar ve uretici sinirlamalarina uymus oluruz.

Yani PLL e 2 Mhz girer 200Mhz cikar. Bunu 2 ye bolunce de 100Mhz CPU clock elde etmis oluruz.

@Muhittin_kaplan su ana kadar her hangi bir sorun varmi?



Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 25 Aralık 2011, 18:55:52
Yok, gayet Anlaşılır.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 25 Aralık 2011, 19:19:05
bunalmış hocam şöyle bir kod yazdıydım. klasik registerları oku sırayla ayarla. çok hakim olmadığımdan gene bir gariplik var gibi.anlayamadığım yerler var.




toggle kısmını değiştirdim. bu şekilde olması gerekir diye düşünüyorum. butona basışımda karasızlık var mı var. baze çekerken de ledler durum değiştiriyor.  biraz da debug ile uğraşayım.


kod hatalı ve koda benzemediği için sildim  :(
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 25 Aralık 2011, 19:24:56
Keilde derleyin calistirin. Calismiyorsa sorunu kendiniz bulacaksiniz.

Debug etmeyi deneyeceksiniz. Mesela butona basilinca bir yerlerde bir bit set ediliyormu? Bu tip calismalari yapmazsaniz bu isi yurutemezsiniz.

Isin puf noktasi DEBUG.

Bu arada bir pini Toggle etmek, eger bu pin 1 ise 0 yapmak, 0 ise 1 yapmak demektir.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 25 Aralık 2011, 19:30:39
anladım hocam. bitlere hakim olmam gerek. ama birkaç register ın fonksiyonunu tam anlayamadım. program çalıştı. basıp çekince yanıp sönüyor. biraz basılı tutup çekersem çekerken de yanıp sönüyor.

  evet toggle ı da yanlıi yapmışım.

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 25 Aralık 2011, 20:19:33
Cevap 5
#include "STM32F4xx.h"

// FCPU =168Mhz
// FAHB =FCPU
// FAPB2=FCPU/2
// FAPB1=FCPU/4

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
    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 |= 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
}

void EXTI0_IRQHandler ()
{
    EXTI->PR|=0x00000001;           // EXTIO INT flagimizi silelim
    GPIOD->ODR^=0x00001000;     
}

int main()
{
//  Butona basinca pinimiz H oluyor

    GPIOA->MODER&=~0x00000003;      // GPIO pin ancak inp modunda interrupt uretebilir (Rehber 143)
    SYSCFG->EXTICR[0]&=~0x0000000F; // GPIO A0 interrupt uretecek
    EXTI->RTSR=1;                   // Yukselen kenar tetiklemesi yapacagiz. (EXTI0)
    EXTI->FTSR=0;                   // Dusen kenar tetiklemesi istemiyoruz.  (EXTI0)
    EXTI->IMR=1;                    // EXTI0 Int enable (Rehber 202-203)
    EXTI->EMR=0;                    // Event istemiyoruz
    NVIC->ISER[0] = 0x00000040;     // NVIC EXTI0_IRQ interrupti acalim
    while(1);     
}

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 25 Aralık 2011, 22:30:56
hocam
RCC->CFGR |= 0x00009400;        // AHB ve APB hizlarini max degerlere set edelim
ataması ile SSW ve SW ayarlamaları nedir ? (PLL, HS seçimi yapıyorda sizin verdiğiniz Clock block diyagramında nereler ? )
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 25 Aralık 2011, 23:02:05
RCC_CFGR registerine 9400 Hex sayisini yuklersen SSW ve SW bitleri ne deger alir?

Sorun bu mu? Eger oyle ise dersleri atlaya atlaya izliyorsun hocam.

Calc.exe diye bir programimiz var.  Bunu kullaniyormusun?

9400 yukledigimizde SW bitleri 00 olur. SSW bitlerini yazarak biz degistiremeyiz. O bitlerle  sadece switch statusunu ogrenebiliriz.

SW bitleri 00 ise HSI yani 16Mhz lik dahili RC osc calisacak demektir.

Blok diyagram Rehber 85 de. Benim renkli resim olarak koydugum blokdan bahsediyorsan  orjinal blogun konumuzla alakasi olmayan kisimlari kesip attim sadelestirdim. Sayfa 85 de SW bitleri tam olarak gosterilmiyor.   Blokdan sadece  clock kaynaklarinin secildigi anlasiliyor.

Zaten bu tip diyagramlar semboluk olurlar,  fikir vermesi acisindan konuyor.



Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 25 Aralık 2011, 23:02:47
bunalmış hocam yazmış zaten. sildim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: madpic - 25 Aralık 2011, 23:10:31
.....
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 25 Aralık 2011, 23:25:46
Alıntı yapılan: bunalmis - 25 Aralık 2011, 23:02:05
RCC_CFGR registerine 9400 Hex sayisini yuklersen SSW ve SW bitleri ne deger alir?

Sorun bu mu? Eger oyle ise dersleri atlaya atlaya izliyorsun hocam.

Calc.exe diye bir programimiz var.  Bunu kullaniyormusun?

9400 yukledigimizde SW bitleri 00 olur. SSW bitlerini yazarak biz degistiremeyiz. O bitlerle  sadece switch statusunu ogrenebiliriz.

SW bitleri 00 ise HSI yani 16Mhz lik dahili RC osc calisacak demektir.

Blok diyagram Rehber 85 de. Benim renkli resim olarak koydugum blokdan bahsediyorsan  orjinal blogun konumuzla alakasi olmayan kisimlari kesip attim sadelestirdim. Sayfa 85 de SW bitleri tam olarak gosterilmiyor.   Blokdan sadece  clock kaynaklarinin secildigi anlasiliyor.

Zaten bu tip diyagramlar semboluk olurlar,  fikir vermesi acisindan konuyor.
Tamam Hocam RCC_CR registerinden yapılıyormuş.

İnt Osc ile Xtal Seçimini Nasıl Yaptığımız aklıma takılmıştı. Blok da iki adet swich görünüyor ben yukardaki (Biri PLL girişi Diğeri System Clock Girişi) SSW ve SW bitleri ile hangisinin kontrol edildiğini sormak istemiştim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 26 Aralık 2011, 14:49:09
#include "STM32F4xx.h"

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 = 0x07431008;      // PLL katsayilarini M=8, N=64, P=8 ve Q=7 yapalim =8Mhz
    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 |= 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= 0xAAAAAAAA;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz (25Mhz)
}

int main()  
{
   
    while(1)
   {
     
   
      GPIOD->ODR=0x00001000;
GPIOD->ODR=0x00000000;

   }
}
 

Hocam Yukarıdaki gibi bir ayarlamada CPU um 8mhz de çalışması gerekiyor.
Portlar 25Mhz e ayarlı.
24Mhz lik Lojik analizere bağladığım PortD nin 12 sinde nedense bu hızı göremiyorum
Sebebi nedir ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 26 Aralık 2011, 14:55:08
PORTD12 de hangi frekansi gormeyi bekliyorsun? Neden?

RCC->PLLCFGR = 0x07431008;  satirinda

Yanlisim yoksa;

P=3 den dolayi bolme oranini 8,
N=0x40 dan dolayi Carpma oranini 64 secmissin.
M=8

Bu durumda secilen bu degerlere gore (8/8)*(64)/8 den CPU 8 Mhz de kosamasi lazim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 26 Aralık 2011, 15:29:36
hocam be artık boş kağıt veriyorum.  :). hocam buton interrupt uygulamsında debug işleminde register içeriklerini nasıl izleyebilicem. ne yazıkki beceremedim.  flag set edildimi. o register ı nasıl izleyebilirim. o satıra geldiğinde kartta butona mı basmam gerekicek.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 26 Aralık 2011, 15:36:37
Boyle durumlarda Debug yaparken Keil yada bir baska programa guvenemem. Kendi yontemimi uygularim. (Bu kendi tercihim)

Deneme yaptigim cevre biriminin int uretmesine izin verir fakat NVIC dan izin vermem.

Her cevre biriminin kendi int flagi olur.

Bir while dongusu icinde bu flagin set olmasini beklerim.

while dongusunun hemen altina break point koyarim.

Programi isletirim. Ornek soruda butona basarim. Butona bastigimda int uretilir fakat yanitlanmaz. Ancak while dongum durumdan haberdar olur ve donguden cikar ve bir alt satirdaki breakpointte sistem durur. Bu, butona basmamla ayni anda gerceklenir.

Bu da bana int uretildigini soyler.

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 26 Aralık 2011, 15:40:14
Hocam Cpu nun ayarladığım frekansta çalışıp çalışmadığını nasıl ölçerim ?
Soru Bu aslında..
Yazdığım Kodun Ledleri yakma kısmında birer satırlık asm oluşturmuş. buna bağlı olarak (mov komutuna bakmadım kaç saykılda çalışıyor.) işlemcinin hızını görebilmeliyim sanırım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 26 Aralık 2011, 15:44:27
hocam farkındayım ama çok soruyoz ama. daha önce debugla felan çok uğraşmayınca. peki dışardan buton ve interrupt kısmında bir nevi test noktası koyarak gözlemliyorsunuz. başka bir register mesela bir çevre birimin konfigürasyon registerı. değer atadık. bunun içeriğini kartı debug ederken peripherals menüsünden mi görebilirim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 26 Aralık 2011, 15:50:36
muhittin hocam bunalmış hocam bunun için üretilen clock frekansını dışarı veren bir program yazmıştı.
https://www.picproje.org/index.php/topic,35896.0.html
sanırım bu denemeniz için uygun olabilir.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 26 Aralık 2011, 16:01:28
Alıntı yapılan: fryrmnd - 26 Aralık 2011, 15:44:27
hocam farkındayım ama çok soruyoz ama. daha önce debugla felan çok uğraşmayınca. peki dışardan buton ve interrupt kısmında bir nevi test noktası koyarak gözlemliyorsunuz. başka bir register mesela bir çevre birimin konfigürasyon registerı. değer atadık. bunun içeriğini kartı debug ederken peripherals menüsünden mi görebilirim.

Dedigim gibi ben peripheral menu falan kullanmiyorum.

Benim yontemimi kullanmak istersen asagida.


#include "STM32F4xx.h"
// FCPU =168Mhz
// FAHB =FCPU
// FAPB2=FCPU/2
// FAPB1=FCPU/4
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
    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 |= 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
}
void EXTI0_IRQHandler ()
{
    EXTI->PR|=0x00000001;           // EXTIO INT flagimizi silelim
    GPIOD->ODR^=0x00001000;     
}
int main()
{
//  Butona basinca pinimiz H oluyor
    GPIOA->MODER&=~0x00000003;      // GPIO pin ancak inp modunda interrupt uretebilir (Rehber 143)
    SYSCFG->EXTICR[0]&=~0x0000000F; // GPIO A0 interrupt uretecek
    EXTI->RTSR=1;                   // Yukselen kenar tetiklemesi yapacagiz. (EXTI0)
    EXTI->FTSR=0;                   // Dusen kenar tetiklemesi istemiyoruz.  (EXTI0)
    EXTI->IMR=1;                    // EXTI0 Int enable (Rehber 202-203)
    EXTI->EMR=0;                    // Event istemiyoruz
//    NVIC->ISER[0] = 0x00000040;   // NVIC EXTI0_IRQ interrupti acalim
    EXTI->PR|=1;                    // Flagi silelim ve pusuya yatalim
    while((EXTI->PR&1)==0);         // Int uretilirse flag set olur
    while(1);                       // Bu satira break point koy   
}



Gecmisteki deneyimler nedeniyle neden peripheral menu vs kullanmadigimi soyleyeyim.

Keil bile olsa peripheral menuler vs BUG icerebilir. Hata yapiyorsam ben yapayim, bir baskasinin hatasi yuzunden sac bas yolmayayim mantigindan
boyle yapiyorum.

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 26 Aralık 2011, 16:08:27
anladım hocam teşekkür ederim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 26 Aralık 2011, 18:25:56
Örnek Programlara Baktım Bulamadım. Bende Biraz Tırmaladım Ama Güzel Oldu sanırım
#include "STM32F4xx.h"

void SystemInit()
{
unsigned int i;
for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
    RCC->CFGR |= 0x00609400;         // AHB ve APB hizlarini max degerlere set edelim
//6 ile Cout1 i PLL clock selected yapıldı.
    RCC->CR |= 0x00010000;            // HSE Xtal osc calismaya baslasin       
    while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
    RCC->PLLCFGR = 0x07431008;      // PLL katsayilarini M=8, N=20, 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

    GPIOA->MODER = 0xAAAAAAAA;      // GPIOA nin tüm pinleri cikisları Alternatif yapıldı Clock 1 çıkış İçin
// GPIOA.8 Clock Out REFBER Sayfa 91
    GPIOA->OSPEEDR= 0xFFFFFFFF;   // GPIOA nin tum cikislari en yuksek hizda kullanacagiz 

    GPIOD->MODER = 0x55000000;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
    GPIOD->OSPEEDR= 0xAAAAAAAA;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz
}

int main()  
{
   
    while(1)
   {
     
   
      GPIOD->ODR=0x00001000;
GPIOD->ODR=0x00000000;

   }
}
 

Şu an Pll çıkışını porta.8 den görüyorum sanırım (8Mhz.)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 26 Aralık 2011, 18:56:28
örnek program alttta hocam. // satırına alınmamış bazı yorumlarıda almayı unutmayın.

CPU 8 Mhz Xtal OSC ile 168Mhz de koşuyor.  (Acaba)
AHB frekansı 168 Mhz (Acaba)
APB1 frekansı 42 Mhz (Acaba)
APB2 frekansı 84 Mhz (Acaba)

// Programın başı

#include "STM32F4xx.h"

void SystemInit()
{
//  Yukarıdaki örnek programdaki kodların aynısı
}

int main()
{
//  MOC2 pininden SYSCLK cikacagiz
    RCC->CFGR &= 0x07FFFFFF;         // 31,30,29,28,27 nolu bitleri silelim (Aslinda zaten 0)  (Prescaler degerinide silelim)
    RCC->CFGR |= 0x30000000;   // MCO2 prescaler /4 secildi

//  Hard sayfa 46 dan MCO2 nin GPIO C9 pini oldugu tespit edildi
//  http://img263.imageshack.us/img263/4633/pinlistesi.jpg dan PC9 un bos pin oldugu teyid edildi
//  PC9 a hangi alternatif fonksiyon atanacağını bulalım  (Hard Sayfa 50 den MCO2 nin AF0 oldugu goruldu)

    GPIOC->AFR[1] &= ~0x000000F0;  // 7,6,5,4 nolu bitler silindi
//  Keil yada ST yukarıdaki registeri neden structure içinde array tanımlamış anlamadım,
//  Halbuki diğer regler gibi yapabilirdi (header dosyayı değiştirmek istemiyorum ama istersek yapabiliriz)

    GPIOC->OSPEEDR =  0xFFFFFFFF;  // GPIOC nin tum cikislarinı en yuksek hizda kullanacagiz

// GPIOC de 9 nolu pine ait cikisi alternatif fonksiyon secelim

    GPIOC->MODER =  0x00080000;    // Bit 19=1 ve Bit 18=0 yaparak pinin alternatif fonksiyon olmasini sagladik


    while(1)
      {
      }
}

// Programın sonu

MCO2 pini (PC9) scopla gözlendi ve 42Mhz ölçüldü. MCO2 prescaler 4'e set edildiğindenö SYSCLK frekansımızın 4x42=168Mhz oldugu anlaşıldı.
Burda hata olsaydı yanlışlıkla overclock yapmış ve bir ihtimal sistemi 336Mhz ile besleyebilirdik.

Neden prescalerı 1 yapmadıkda 4 yaptık?  Dokümanlarda, GPIO lardan 100Mhz den yüksek frekansda sinyal çıkamazsınız deniyor.

SYSCLK 168Mhz buna rağmen Timer7 örneğindeki ledler 1 sn yerine 0.5 sn de yanıp sönüyorsa, olası durumlar;

1. APB1 BUS'ı 42 yerine 84Mhz ile besledik.
2. Timer Clk kaynağı APB1 BUS clk dan beslenmiyor.
3. Timer programında mantık hatası yapıyorum.

Sonuç: Timer7 programındaki hatayı hala bulamadık. Fakat bu program sayesinde alternatif fonksiyon kullanımını görmüş olduk.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 26 Aralık 2011, 22:32:57
Bu baslik altinda bir arkadasin LIS302DL MEMS motion sensor ile ilgili sorusu vardi. Ornek kodlardaki MEMS uygulamasini tekrar denedigimde bazen tutarsiz davrandigini gordum.

Asagidaki programda, karti elinizle tutup egdikce ledler egilen yonde isildiyor.


#include "STM32F4xx.h"

unsigned short PWM[8];  // PWM registerler
unsigned short SRG[8];  // Shadow Registerler
unsigned short CNTR;    // PWM Counter
signed char who,x,y,z,xo,yo,zo;   


/*****************************************************************************************************
         CPU PLL ile 168Mhz de kosturulur
         AHB frekansy 168 Mhz
         APB1 frekansy 42 Mhz
         APB2 frekansy 84 Mhz
*****************************************************************************************************/
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
     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
     GPIOD->MODER  = 0x55550000;     // GPIOD nin 15, 14, 13, 12, 11, 10, 9, 8 pinleri cikis tanimlandi (LEDler icin)
     GPIOD->OSPEEDR= 0xFFFFFFFF;     // GPIOD nin tum cikislari en yuksek hizda kullanacagiz

//  GPIOA da A7, A6, A5 pinleri, LIS302DL cipiyle haberlesmek icin SPI moduna alinacak   

     GPIOA->AFR[0]=0x55500000;       // SPI1 secelim (Rehber Sayfa 141), Hard Sayfa 49
     GPIOA->MODER|=0x0000A800;       // A7,A6,A5 Alternatif fonksiyon
     RCC->APB2ENR|=0x00001000;       // SPI1 clk enable   //   GPIOE3 pinini output tanimlayalim (LIS302DL SPI/I2C secimi)   
     GPIOE->MODER  = 0x00000040;     // GPIOE nin 3 nolu pini cikis tanimlandi
     GPIOE->OSPEEDR= 0xFFFFFFFF;     // GPIOE nin tum cikislari en yuksek hizda kullanacagiz
     GPIOE->BSRRL=0x0008;            // GPIOE3=1; LIS302DL CS=1   
     SPI1->CR1=0x00000B7F;           // SPI1 16 bit, master , fulldublex vs
     SPI1->CR2=0X0000;

     RCC->APB1ENR|=0x00000020;       // Timer7 CLK'u aktif edelim (84 Mhz)
     TIM7->CR1=0x0080;               // Otomatik Reload
     TIM7->PSC =839;                 // 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
     NVIC->ISER[1] = 0X00800000;     // NVIC de Timer 7 interrupta izin verelim
     TIM7->CR1|=0x0001;              // Counter Enable
     
}

void TIM7_IRQHandler()
{
unsigned short d,i,j;

    TIM7->SR=0;                       // Timer Int Flagini silelim
    d=GPIOD->ODR | 0xFF00;
    CNTR++;
    if(CNTR>=255)
      {
        CNTR=0;
        for(i=0;i<8;i++)
         {
           if(PWM[i]>255) PWM[i]=255;
           SRG[i]=PWM[i];
         } 
      }
    j=0x8000;
    for(i=0;i<8;i++)
      {
       if (CNTR>=SRG[i]) d&=~j;
       j=j>>1;
      }
    GPIOD->ODR=d;
}

void Write(char Adr,unsigned char Data)
{
      GPIOE->BSRRH=0x0008;            // LIS302DL CS=0
      SPI1->DR=((Adr&0x3F)<<|Data;
      while(!(SPI1->SR&2));
      GPIOE->BSRRL=0x0008;            // LIS302DL CS=1
}   

char Read(char Adr)
{
char Dat;
      GPIOE->BSRRH=0x0008;            // LIS302DL CS=0
      SPI1->DR=((Adr&0x3F)|0x80)<<8;
      while(!(SPI1->SR&1));
      Dat=SPI1->DR;
      GPIOE->BSRRL=0x0008;            // LIS302DL CS=1
      return(Dat);
}   

int main()
{
int i;
      if(Read(0x0F)==0x3B)   // Who are you ?
       {
          Write(0x20,0x47);  // Data Rate=100Hz, Full Scale=2g, Activate, x,y,z enable
          while(1)
            {
               who=Read(0x27); // Statusu ogrenelim. Kim hazir kim deðil?
               if (who&1)
                {
                  x=(Read(0x29)+xo);
                  xo=x>>1;
                  if (x>=0) PWM[0]=x;
                  else PWM[2]=-x;
                } 
               if (who&2)
                {
                  y=Read(0x2B)+yo;
                  yo=y>>1;
                  if (y>=0) PWM[1]=y;
                  else PWM[3]=-y;
                } 
               if (who&4)
                {
                  z=Read(0x2D);
                } 
            }
       }
       
      TIM7->DIER=0x0000;              // Update Int disable
      while(1)
       {
         for(i=0;i<0x1000000;i++);
         GPIOD->ODR^=0x0000F000;
       } 
       
}
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: M_B - 26 Aralık 2011, 23:18:08
Merhaba Hocam;
kodunuzu kopyala yapıstır yaptım derleme esnasında altakı hatayı verdi.
Hatanının oldugu yere baktıgımda ise bir parantezin eksik oldugunu gordum duzeltım ama olmadı.

Build target 'Target 1'
assembling startup_stm32f4xx.s...
compiling main.c...
main.c(81): error:  #29: expected an expression
Target not created


Parantezin eksik oldugu yer.



void Write(char Adr,unsigned char Data)
{
      GPIOE->BSRRH=0x0008;            // LIS302DL CS=0
      SPI1->DR=(Adr&0x3F)<<|Data);                         // Eksik olan yer.
      while(!(SPI1->SR&2));
      GPIOE->BSRRL=0x0008;            // LIS302DL CS=1
}   


Not: Yazım duzeltmesi yapıldı.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 26 Aralık 2011, 23:26:09

void Write(char Adr,unsigned char Data)
{
      GPIOE->BSRRH=0x0008;            // LIS302DL CS=0
      SPI1->DR=((Adr&0x3F)<<|Data;
      while(!(SPI1->SR&2));
      GPIOE->BSRRL=0x0008;            // LIS302DL CS=1
}   



Yukarida 8 ve parantez kapa yan yana gelince parantez yutuluyor.

Asagida ise 8 ve parantez kapa yan yana gelince siritan gozluklu adam cikiyor.

void Write(char Adr,unsigned char Data)
{
      GPIOE->BSRRH=0x0008;            // LIS302DL CS=0
      SPI1->DR=((Adr&0x3F)<< 8) |Data;
      while(!(SPI1->SR&2));
      GPIOE->BSRRL=0x0008;            // LIS302DL CS=1
}   


8)  8 )

Bu durumda kodlara guvenemeyecekmiyiz?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: K46 - 26 Aralık 2011, 23:28:49
Alıntı yapılan: bunalmis - 26 Aralık 2011, 23:26:09


8 ve parantez kapa yan yana gelince siritan gozluklu adam cikiyor.



Hocam mesaj yazma ekranının alt kısmında "Gülümseme kullanma" kutucuğu var orayı işaretleyince ne yazıldıysa o şekilde çıkması lazım.

Deneme 8)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: madpic - 26 Aralık 2011, 23:36:29
Bu baslik altinda bir arkadasin LIS302DL MEMS motion sensor ile ilgili sorusu vardi.

teşekkürler sayın hocam
kit işyerinde kaldığı için deneyemiyorum
ilk fırsatta kodları inceleyeceğim
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 00:18:52
Hocam NVIC nedir ? Biraz Anlatabilirmisiniz ?(Bu birinci Sorum)
Alakasız ikinci Sorum CMSIS Nedir ? (Bir çeşit kütüphane mi ?)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 00:41:28
NVIC Nested Vectored Interrupt Controller

Gelen interruptlari yoneten birimin adi. Bir interrupt geldiginde sapilacak adresi ogrenen, kesme icinde kesmelere de izin veren, interrupt onceliklerini ayarlamamiza saglayan donanim.

Interruptlarin kullanildigi ornek programlarimiza bakarsaniz yaptigimiz is, cevre biriminin interrupt ozelligini acmak, daha sonra da NVIC de bu interrupta izin vermek.

Iyi hatirlattin. Bir ara da birden fazla interrupt kullanan ornek yapalim ve interrupt oncelikleriyle oynayalim.

-----------------

CMSIS ise Cortex Microcontroller Software Interface Standart

Registerlerle ugrasip cevre birimlerini hazirliyoruz ya. Bu islem her islemci degistirdigimizde yeni bastan ogrenilmesi gereken bir islem.  STM CM4 de calisiyoruz. Diyelimki registerlerle kedinin fareyle oynadigi gibi oynamaya basladiniz. Fakat ileri bir tarihte NXP CM4 islemci kullanmaya karar verdiniz. Bu kez bu cipin dokumanlarini da sil bastan okumaya baslayacagiz.

Gerci bir firmanin islemcisinde ustalasinca baska bir firmanin islemcisinde zorlanmazsiniz fakat dokumanlari sil bastan okumaniz gerekir.

CMSIS de rutinler standartlastirilmis. Hangi islemciyi kullanirsaniz kullanin degismeyecek. Fakat bunun icin CMSIS kullanimini ogrenmeniz gerekecek. Ben bu konuya hic girmeyecegim. Bir ara bir arkadas bu konuda notlar hazirlayacagini soylemisti.


Mesela NXP sitesinden aldigim bir ornek

/* Set PORT0_4 direction to output */

LPC_GPIO0->DIR |= 0x10;

/* Set PORT0_4 high */

LPC_GPIO0->DATA |= 0x10;

Ornegin yukarida bizim yaptigimiz gibi yani registerlere veri yukleyerek portun  4 nolu biti 1 yapilmis.Asagida ise CMSIS fonksiyonlari kullanilarak ayni islem yapilmis

/* Set PORT0_4 to output */
/* void GPIOSetDir( uint32_t portNum, uint32_t bitPosi, uint32_t dir) */
GPIOSetDir(0, 4, 1);

/* Set PORT0_4 to HIGH */
/*void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal ) */
GPIOSetValue(0, 4, 1);

CMSIS evet bir kutuphane ve bana cok itici geliyor.  Fakat bir kere ogrenirseniz rahat edebilirsiniz.
CMSIS rutinleri cipin icindeki ROMA gomulu hazir derlenmis fonksiyonlar da olabilir, derleme sonucunda elde edilecek fonksiyonlarda olabilir.

TI ciplerinde ROMDA duruyor. (Flash haricinde)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 13:08:43
Yani Şunumu Anlamalıyım ?
CAMIS Öğrenirsem ST, NXP vs fark etmeden yazabilirim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 13:12:30
Emin olmamakla birlikte evet. Fakat bir elektronikci olarak guzelim registerler varken kafani bir suru ivir zivir fonksiyon isimleriyle dolduracaksin. Degermi?
Yazilimci olsan neyse.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 13:13:26
ben pes ediyorum bunalmış hocam. açarsanız seneye tekrar alırım bu dersi. biraz daha picle uğraşmak gerek galiba. adc yi bile ayarlayamadım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: CoşkuN - 27 Aralık 2011, 13:14:35
Bence öğrenme aşamasındayken işlemcileri iyice tanımak için register'larla çalışmakta fayda var. Ama iş birşeyler halletmeye ve proje yapmaya gelince CMSIS kullanmak daha mantıklı (rahat) geliyor. Özellikle taşınabilirlik açısından avantajlar getiriyor. Bu da tek bir üreticiye bağımlı kalmak istemeyenler için önemli bir özellik olabilir.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 13:26:02
Alıntı yapılan: bunalmis - 27 Aralık 2011, 13:12:30
Emin olmamakla birlikte evet. Fakat bir elektronikci olarak guzelim registerler varken kafani bir suru ivir zivir fonksiyon isimleriyle dolduracaksin. Degermi?
Yazilimci olsan neyse.
Derste PIC anlatırken "Direncin Ne olduğunu Bilmeyen Birilerine"
Programlama biliyormusunuz Sorusuna "Hayııırr" cevabı ile birlikte sözlü olarak Yumurta Haşlatır çay demletirim.
Sonrasında Mutfaktaki Malzemeleri bilmeden yemek yapamaz, çay demleyemez, yumurta haşlayamazsınız derim. Sonrasında Stack reg, PC, Program Memory dalarız konuya.
Biz Böyle gidelim CAMIŞ dursun orada şimdilik. Donanıma Hakim olalım nerede neler yapılıyor?

AMa Katılım az neden ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 13:29:12
Yok oyle kacmak.

Simdi mantigi yeni yeni kavramaya basladiniz.  Su ana kadar temel mantigi az bucuk anlamis olmaniz gerekiyor.

Hangi cevre birimini kullanmak istiyorsak o cevrebiriminin temel ayarlamalarini yapiyoruz.

Ornegin ADC kullanmak icin.

Oncelikle CPU clock ayarlamalarini yapiyoruz. AHB , ABP bus frekanslarini ayarliyoruz.
ADC cevre biriminin clock sinyalini harekete geciriyoruz.
ADC girisi icin kullanilacak pini Analog moduna geciriyoruz.
ADC icin diger ivir zivir ayarlari yapiyoruz.

Ivit zivir diyorum su ana kadar ben de ADC mizi kullanmayi denemedim.

Rehberin: REHBER
Labaratuvarin adi: Keil
Kitin adi: STM32F4 Discovery
Damarlarindaki kan: TURK KANI

Dot kadarcik kart sana pes dedirtiyorsa bu meslegi birakmalisin bosuna meslekte zaman kaybetme.

Kendini komutan yerine koy. Registerler de senin askerlerin. Sana bir gorev verildi. Senin yapacagin tek sey
askerlerine emretmek.

Yep yeni bir islemci ile calisiyorsunuz. Fazla tanimiyorsunuz. Isin basindasiniz. Gozunuz korkmasin.
Bu dunyada zor olan hic bir sey yoktur. Eksik bilgi ve bu bilgiyi temin etmeme vardir.

Basarisizligimizin tek sebebi problemin ustune gitmek yerine kacmaktir.

Boyle kacacaksaniz islerimizi yapsinlar diye bu ulkeye gavur teknisyenler gavur muhendisler mi getirecegiz?

-----------------------

ADC donanimini bastan asagi adim adim kullanmayi aciklayan not yazacagim. Zaman taniyin.


Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 13:36:03
Zaman Sizin Hocam Ama Biraz Hızlı Gidiyoruz Sanırım.
Bence Giriş Çıkış işlemleri Pekişmeden Diğer Donanımlara Geçmemeliyiz. Sonrasında Birkaç Fonksiyon yazıp denemeliydik.(For, vs gibi yavaşlatma bekleme fonksiyonları gibi.) Sonrasında Ledler 7 segmentler gibi basitten gidip PWM ADC DAK gibi int gerektirmeyen sistemler ve Sonunda int rutinleri olabilirdi.
Şöyleki, Sorular bölümündeki verdiğiniz soruları çözemeyince  Sönümlenme yaşayabiliriz.
Ama Hoca Sizsiniz Saygım Sonsuz Son Karar Sizin
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: CoşkuN - 27 Aralık 2011, 13:37:15
Ben de uzun zamandır yoğunluktan uzak kalmıştım ARM işleriyle... Bu kitle oynamaya başladım ben de bugünlerde... Notlarımı paylaşacağım ben de ilerledikçe...
Bence de kimsenin gözü korkmasın. Datasheet'i 1300 sayfa görünce bende "oha" dedim ama sonra bakınca:

300 küsür sayfa usb on the go
100 küsür sayfa ethernet modüllerinin

Geri kalanlardan da 300-400 sayfa başlangıçta işimize yaramayan şeyler...
Yani asıl odaklanmamız gereken temelde 100-200 sayfa ve ilgilendiğimiz ana modüllere ait bölümler. Onların da her biri ortalama 30 sayfa felan...

Bence bu kit ve Bülent hocamızın emekleri herkes için büyük bir nimet... Artık şu memlekette "elektronik" diye bir sektör olmasının vakti gelmedi mi?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 13:43:19
Yukardaki Yazımda, Kendi Üzerime Alarak Genelleme Yapmaktı amacım. Yazılımdan Yana Sıkıntım Olmaz. Ama C bilmeyenler Fonksiyonu/Parametreyi bilmeyenler olduğunu ve Register Kavramının nasıl oluştuğunu bilmeyenler vardır diye düşünüyorum.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: CoşkuN - 27 Aralık 2011, 13:46:23
Alıntı yapılan: muhittin_kaplan - 27 Aralık 2011, 13:43:19
Yukardaki Yazımda, Kendi Üzerime Alarak Genelleme Yapmaktı amacım. Yazılımdan Yana Sıkıntım Olmaz. Ama C bilmeyenler Fonksiyonu/Parametreyi bilmeyenler olduğunu ve Register Kavramının nasıl oluştuğunu bilmeyenler vardır diye düşünüyorum.

Yürümeden koşulmaz tabi. Bence ARM ile oynamaya başlamadan önce biraz temel gerekli:
1- Temel C programlama
2 - Temel Mikrodenetleyici bilgisi (en azından 8 bitlerle biraz oynamış olmak)

Belki bu konular başka bir başlık altında ayrıca işlenebilir. Zaten Bülent hocamız C programlama için başlıklar açmıştı.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 14:11:29
dediğiniz mantığı anlamada sıkıntım yok. tüm ayarları yapıyorum. yanlış anlamıyorsam tabii. gelgelelim öyle bir kod yazıyorum ki. stlink utility ile kodu yükleyip resetleyince karttan bağlantı kopuyor. diyorum bir yerde büyük bir hata yapıyorum işlemci çküp mü kalıyor artık. tabii aynı kod debug etmeye çalışınca da bilmem kaçıncı adresten okumada hata oluştu diyor. program hatasız derleniyor. ama int rutininde işlemcinin işlemcinin doğasına mı dilin doğasına(meşhur doğa  ;D) mı aykırı bir yazım yapıyom bilmiyom.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 14:21:49
@fryrmnd
Download lamı yüklüyorsun ? eğer öyleyse bağlantıyı koparıyor doğru. ben önce debug yapıp programın yüklenmesini sağlıyor sonrasında debug ı kapatıp normal çalışmasını göslüyorum.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 14:33:07
ben st link utility ile yüklüyorum hocam. programı yükleyince bağlantı kopmaması lazım. tabii düzgünse. bunalmış hocamın programlarda sıkıntı olmuyor mesela.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 14:42:52
Bahsettigin hataya neden olan programin bulundugu klasoru oldugu gibi rarlayip bir yere yukle. Biz de soruna bir bakalim.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 14:54:15
http://hotfile.com/dl/138653582/a97d93d/deneme.zip.html (http://hotfile.com/dl/138653582/a97d93d/deneme.zip.html)
buyrun hocam.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: sayment - 27 Aralık 2011, 15:11:47
Hocam açıkçası benim de kafam iyice karıştı. Dersler hızlı, karmaşık ve bana göre üst seviyede gidiyor.
Çalışmaya okumaya nereden başlayayım hepten şaşırdım bir sürü konu var. C var, örnek proramlar var, örnek sorular var, bir sürü şamata var..
Çalışırken nereden başlayalım, nasıl bir yol izleyelim yardımcı olabilir misiniz?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 15:12:18
stlink in vin7 64bit sürücüsü yok sanırım.
şimdi masaüstüne kurayım dedim yok.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 15:18:55
muhittin hocam ben kullanıyorum 64bit win7 de . gayet güzel çalışıyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 15:19:31
Kurdum çalıştı.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 15:31:21
Hocam Sanki Keil Debug.ini de bir hata veriyor. ama neden bu programda veriyorda başkasında vermiyor ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 15:31:41
Alıntı yapılan: sayment - 27 Aralık 2011, 15:11:47
Hocam açıkçası benim de kafam iyice karıştı. Dersler hızlı, karmaşık ve bana göre üst seviyede gidiyor.
Çalışmaya okumaya nereden başlayayım hepten şaşırdım bir sürü konu var. C var, örnek proramlar var, örnek sorular var, bir sürü şamata var..
Çalışırken nereden başlayalım, nasıl bir yol izleyelim yardımcı olabilir misiniz?

C diline  https://www.picproje.org/index.php/topic,35908.0.html (https://www.picproje.org/index.php/topic,35908.0.html) basligindaki samatalardan dolayi artik asina oldugunuzu varsayiyoruz. (Mukemmel C bilgisi gerekmiyor)

https://www.picproje.org/index.php/topic,35719.0.html (https://www.picproje.org/index.php/topic,35719.0.html) linkini okuyup denemeler yaparak Keil konusuna artik yabanci olmadiginizi varsayiyoruz.

https://www.picproje.org/index.php/topic,35721.0.html (https://www.picproje.org/index.php/topic,35721.0.html) yi okudugunuzu varsayiyoruz.

https://www.picproje.org/index.php/topic,35813.0.html (https://www.picproje.org/index.php/topic,35813.0.html) yi okudugunuzu ve bu terimlerle karsilastiginizda sorun olmayacagini varsayiyoruz.

https://www.picproje.org/index.php/topic,35896.0.html (https://www.picproje.org/index.php/topic,35896.0.html) deki ornekleri Keil de sirayla derleyip isletip Rehber dokumanini acip programi anlamaya calisiyoruz.
ORnegi anlamadan bir sonrakine kesinlikle gecmiyoruz. (VGA ve RTOS konusunu atlayin)

Anliyorsak https://www.picproje.org/index.php/topic,36897.0.html (https://www.picproje.org/index.php/topic,36897.0.html) yi okuyor ve sorulari cozmeye calisiyoruz.

Anlamiyorsak https://www.picproje.org/index.php/topic,36908.0.html (https://www.picproje.org/index.php/topic,36908.0.html) de konuyu tartisiyoruz.

Burada daha genel sorular soruyor ve tartisiyoruz.  https://www.picproje.org/index.php/topic,35794.0.html (https://www.picproje.org/index.php/topic,35794.0.html)

Rehber ve Hard  dokumanini elimizden dusurmuyoruz.

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 15:38:25
Alıntı yapılan: fryrmnd - 27 Aralık 2011, 14:54:15
http://hotfile.com/dl/138653582/a97d93d/deneme.zip.html (http://hotfile.com/dl/138653582/a97d93d/deneme.zip.html)
buyrun hocam.

Option for Target Target1 de Debug menuye gel.

Sag tarafta yani ST link Debugger tarafinda initializaion file kisminda yazan .\Debug.ini yi sil.

Bu dosya kartla calisirken kullanilmiyor.

Ayni sekilde Utilities menude init file kisminda yazan .\Debug.ini yi sil.

Yasadigin sorunun kaynagi bu.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 15:45:15
Yok Hocam Bir Sıkıntı Var. Sanki Debugda Takılı Kalıyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 15:45:39
STM32 ST-LINK Utility ile yüklemeyi denermisiniz ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 15:48:06
hocam silik çıktı zaten.   ???
Alıntı Yap
Option for Target Target1 de Debug menuye gel.

Sag tarafta yani ST link Debugger tarafinda initializaion file kisminda yazan .\Debug.ini yi sil.

Bu dosya kartla calisirken kullanilmiyor.

Ayni sekilde Utilities menude init file kisminda yazan .\Debug.ini yi sil.

Yasadigin sorunun kaynagi bu.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 15:53:05
Bir de  options for Target for Target 1 de degug da

ST_Links tarafinda sagda Run to main de centigi kaldirin. Eger SystemInit fonksiyonunda hata yaparsaniz ve oradaki while vs dongulerinde takili kalirsa Debug takili kalir.

Stop ile durdurmaniz gerekir. Eger SystemInit i dogru yazdiysaniz Run to main centigini koyun. Boylece bosu bosuna Startup ve SystemInit i adimlatmak zorunda kalmazsiniz.

Programi karta yuklemek icin ben dogrudan Debug tusuna basiyorum.

F7 ile derle sonrada Ctrl F5


Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 15:54:33
Alıntı yapılan: fryrmnd - 27 Aralık 2011, 15:48:06
hocam silik çıktı zaten.

Nasil silik cikti?

Bir ekran goruntusu verebilirmisin?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 15:56:22
osilator seçeneği kaç mhz olacak hocam ?
normalde 8 ama st nin firmware inde 25 görünüyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 16:03:40
hocam st util ile içeriği sildim.
Keilden debug.ini leri sildim
Flash/Download yaptım yüklemedi.
Debug Start Yaptım yükledi.

Stlink Utilden OpenFile yapıp Deneme.hex i seçtiğimde
"OpenFile Sucsess"
"The File is not downloded to the device...." hatası veriyor.
Yüklemeye devam et dediğimde yüklüyor.
Bağlantıyı kesene kadar "keilde Debug" Yapınca renk değiştiren led hep renk değiştiriyor.
Bağlantıyı kesip boardı resetleyince çalışıyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 16:05:42
st util de st nin verdiği firmware demo da da aynı mesajı veriyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 16:09:46
Option for target for target 1 de target menudeki xtal frekansinin bir ise yaradigina tanik olmadim.

Ne yazarsam yazayim sorunsuz calisiyor.

En iyisi ben deneme yaptigim klasoru rarlayip bir yere koyayim. Siz onu desktopa aynen acin. (Desktop altinda deneme klasoru, bunun da icinde dogrudan dosyalar)

Boylece benim bu projeye ozgu tum sorunsuz Keil vs setuplari sizde de olur. Bir de oyle bakin.

http://www.cncdesigner.com/STM/Deneme.rar

Bu dosyayi indirip acin. Bir deneyin.

Eger sorun yoksa main.c icini bosaltip ornek kodlarinizi buraya yazin.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 16:11:07
Hocam Sorum şu
keil de programı yüklerken hangi yolu izliyorsunuz ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 16:11:25
bunalmış hocam silik çıktı dedğim. zaten debug.ini yi seçmemişim st link için. hatta keil için de kaldırmışım. yolladığım klasörde adc projesini doğru düzgün  çalıştıramıyorum hocam. yolladığım haliyle  siz debug edebildiniz mi.

@muhittin hocam utility programında hex dosyayı gösterince çipe yüklenmemiş gibi bir uyarı veriyor. program diyince yüklüyor bende. ama o programın debug etme özelliği yok yanlış görmediysem. disconnect etmeden de programı yükleyip reset e basınca çalışması lazım. ama onu disconnect etmeden keilde debug etmeye çalışırsanız olmuyor sanırım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 16:11:40
Alıntı yapılan: muhittin_kaplan - 27 Aralık 2011, 16:03:40
hocam st util ile içeriği sildim.
Keilden debug.ini leri sildim
Flash/Download yaptım yüklemedi.
Debug Start Yaptım yükledi.

Stlink Utilden OpenFile yapıp Deneme.hex i seçtiğimde
"OpenFile Sucsess"
"The File is not downloded to the device...." hatası veriyor.
Yüklemeye devam et dediğimde yüklüyor.
Bağlantıyı kesene kadar "keilde Debug" Yapınca renk değiştiren led hep renk değiştiriyor.
Bağlantıyı kesip boardı resetleyince çalışıyor.

Nerede okudum hatirlamiyorum. Flash programlamak icin DEBUG u kullanmak gerekiyor.  Debug kullanmadan yapilan yuklemelerde sorun oluyormus ST yada Keil her kim ugrasiyorsa
bunu duzeltmemis deniyordu. Hic ugrasmayin Debugu baslattiginizda zaten kendisi otomatik yukleme yapiyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 16:12:31
Alıntı yapılan: fryrmnd - 27 Aralık 2011, 16:11:25
bunalmış hocam silik çıktı dedğim. zaten debug.ini yi seçmemişim st link için. hatta keil için de kaldırmışım. yolladığım klasörde adc projesini doğru düzgün  çalıştıramıyorum hocam. yolladığım haliyle  siz debug edebildiniz mi.

@muhittin hocam utility programında hex dosyayı gösterince çipe yüklenmemiş gibi bir uyarı veriyor. program diyince yüklüyor bende. ama o programın debug etme özelliği yok yanlış görmediysem. disconnect etmeden de programı yükleyip reset e basınca çalışması lazım. ama onu disconnect etmeden keilde debug etmeye çalışırsanız olmuyor sanırım.

Iyide bana verdigin rarlanmis klasoru actigimda debug.iniler vardi. Bunlar senden geldi.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 16:16:12
Alıntı YapNerede okudum hatirlamiyorum. Flash programlamak icin DEBUG u kullanmak gerekiyor.  Debug kullanmadan yapilan yuklemelerde sorun oluyormus ST yada Keil her kim ugrasiyorsa
bunu duzeltmemis deniyordu. Hic ugrasmayin Debugu baslattiginizda zaten kendisi otomatik yukleme yapiyor.
Daha Önce Yine Benimle Konuşmuştunuz Hocam.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 16:17:17
Keil bende Debug ini ile de yüklüyor bu arada hocam (Debug Start ile)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 16:27:53
Yukluyor fakat Build Output penceresinde bir suru ivir zivir hata mesaji veriyor.

Debug.ini dosyasini kartsiz calismak icin hazirlamistik. Bunu Keil programinin kurulumu konusunda ozellikle vurguladik.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 16:31:36
hocam sizin dosyadan da açtım adc dosyasını. debug dediğimde led turuncu yanıyor. f11 yapıyorum error veriyor.  0x8000020c den okumada hata diyor. size de saç baş yoldurduk .benim iki üç tel de daha bişey yapmadan gitti.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 27 Aralık 2011, 16:58:22
Deneme klasorunuzu sildiniz.
http://www.cncdesigner.com/STM/Deneme.rar (http://www.cncdesigner.com/STM/Deneme.rar)   Deneme.rar i indirdiniz

Rar dosyasini Destop'a actiniz.

Deneme diye bir klasorunuz oldu. Icine girdiniz.

(Deneme icinde bir tane daha Deneme diye bir klasor varsa, Deneme altindaki tum dosyalari bir ustteki Deneme klasorunun altina tasiyin, onemi yok ama kafamiz rahat etsin)

Deneme.uvproj dosyasini cift tiklayin. Keil karsimiza gelsin.

F7 bastiniz. Derledi.

Rebuild target 'Target 1'
assembling startup_stm32f4xx.s...
creating preprocessor file for main.c...
compiling main.c...
linking...
Program Size: Code=788 RO-data=424 RW-data=11744 ZI-data=1632 
"Deneme.axf" - 0 Error(s), 0 Warning(s).

Daha sonra CTRL F5 yaptiniz.

Load "C:\\Documents and Settings\\TI\\Desktop\\Deneme\\Deneme.AXF"

Mesaji aldiniz. değilmi. Ne 1 satir fazla ne 1 satir eksik.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 27 Aralık 2011, 18:06:55
hocam ben galiba karıştırmışım dosyaları. siz ayar options ayarlarını yapıp yolladınız sandım. bende ki adc dosyasını kullandım galiba. işyerinde kaldı o artık evden giriyom.

dedikleriniz aynen oldu. debug da run edebiliyorum. ama benim adc dosyamda aynısını yapamıyorum. size yolladığım adc elinizde duruyorsa yollayabilirmisiniz hocam. sizin deneme de main içine yazıp çalıştırayım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 27 Aralık 2011, 23:54:35
Bu Başlık Biraz (Özellikle Son Mesajlar ) Temizlenirse Güzel Olur Kanısındayım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 28 Aralık 2011, 22:59:04
bunalmış hocam gene ben. şimdi hafızdan hafızaya memroy örneğinizi debug ettim. target dizisini izlemeye aldım. target[ 0 ]=0, target[ 1 ] =1

gibisinden gidiyor. şimdi yanlarında da semboller çıkıyor. sebebini merak ettim.(herşeyi bitirdim ya!). bir de char tipi diziye int tipi değerleri 8 bit lik transfer ile atıyoruz.yanılmıyorsam. bu vhar int olayından mı kaynaklanıyor. mı kaynaklanıyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 29 Aralık 2011, 07:43:03
char Source[1024];

volatile int i;     

for(i=0;i<1024;i++) Source [ i ] =i;

Burada char tipindeki arraya int tanimli i uzerinden gene char veri aktariyoruz. Asagidakiler gibi de yapabilirdik fakat  herhangi bir avantaji olmazdi.

for(i=0;i<1024;i++) Source [ i ] =(char) i;

yada

char n;

n=0;
for(i=0;i<1024;i++) { Source [ i ] =n; n++}

Target alanina veriler atildikca yanlarinda  sembollerde cikiyor derken 0x20000000 adresli memory penceresinde semboller cikiyorsa pencere ASCI gosterim icin ayarlanmis olabilir.
Memory window da verilerin oldugu alanda sag click yapip gosterilecek verilerin decimal, ASCI, unsigned vs olusunu ayarlayabilirsin.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 29 Aralık 2011, 10:23:58
hocam watch 1 de target a bakıyorum.target dizisini açınca dizinin elemanları için value nun altında decimal değerleri ve yanlarında tırnak içerisinde semboller gözüküyor.

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 29 Aralık 2011, 10:34:10
Char verilerin ASCI karşılıklarını gösteriyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 29 Aralık 2011, 23:04:43
timer 1 APB2ENR ile çaıştırmaya başladıktan sonra. 84mhz olan hatta da daha önce açıklandığı gibi iki kat hızlı çalışma durumu mevcutmudur ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 29 Aralık 2011, 23:12:53
evet hocam dediğiniz gibi.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: M_B - 29 Aralık 2011, 23:14:20
Bunalmıs Hocam;
Keilin Toolbarinda Derleme sırasında  Load ikonu var onu tıkladıgımda
Load "C:\\Documents and Settings\\TI\\Desktop\\Deneme\\Deneme.AXF"

gibi mesaj cıkıyor. Kit uzerindeki Resete bastıgımda veya USB baglantısını cıkarıp taktıgımda kite yuklenen program calısmıyor.

Yalnız Derlemeden sonra
CTRL + F5 yaparsam debug moduna giriyoriyor. Adım adım calıstırdıgımda calısıyor veya Debug moddan cıkınca program atılmıs oluyor.
Debug moduna girmeden program atamıyormuyuz.

Teşekkürler

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: ErsinErce - 29 Aralık 2011, 23:16:28
7. soru ile ilgilenen pek yok galiba =)
yarın kartımı bitirir bitirmez kolları sıvıyorum hocam merak etmeyin  :)
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 29 Aralık 2011, 23:17:58
@m_b
Maalesef atamıyoruz.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 29 Aralık 2011, 23:19:15
keil de debug etmeden program atılmıyor. st nin sitesinde stlink utility var onu kullanabilirsiniz.

ersin hocam daha 6 yı yapamadım  ;D. nerden çıktı 7.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 29 Aralık 2011, 23:29:30
Timer1 Zamanlaması Nasıl Yapılıyor ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 29 Aralık 2011, 23:30:55
zamanlaması derken hocam. belli sürese sonunda kesme almak için gibi mi sordunuz.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 29 Aralık 2011, 23:33:50
Bunalmı Hoca Timer7 ile yaıp Bunu Timer 1 ile sormuştu. yaptım ama bir türlü zamanlamayı tutturamadım.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 29 Aralık 2011, 23:37:55
hocam hızlı mı yanıyor ledler.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 29 Aralık 2011, 23:39:20
evet.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 29 Aralık 2011, 23:42:57
hocam prescaler ve auto reload register yüklemesinde sıkıntı olabilir. yazarsanız kodları bakabilirim belki bulurum sıkıntıyı.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 29 Aralık 2011, 23:44:11
Kodları vereyim yanlız Amacım Bir Standart Oluşturmak. Yani Timer lar nasıl ayarlanır.
#include "STM32F4xx.h"
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
}

int main()
{
    RCC->APB2ENR|=0x00000001; // Timer1 CLK'u aktif edelim (84 Mhz)
    TIM1->CR1=0x0080;              // Otomatik Reload
    TIM1->PSC =42000-1;           // Prescaler değerimiz 42000, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 42E6 / (42000) = 1000 Hz
    TIM1->ARR =2000;                // Counter, Decimal 2000 olunca basa donsun 1 sn demek
    TIM1->CR1|=0x0001;            // Counter Enable

    while(1)
      {
         if (TIM1->CNT > 1000) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                            // Ledler sonsun
      }
}
// Programin sonu
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 29 Aralık 2011, 23:58:11
#include "STM32F4xx.h"
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
}

int main()
{
    RCC->APB2ENR|=0x00000001; // Timer1 CLK'u aktif edelim (84 Mhz)
    TIM1->CR1=0x0080;              // Otomatik Reload
    TIM1->PSC =42000-1;           // Prescaler değerimiz 42000, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 84E6 / (42000) = 4000 Hz
    TIM1->ARR =4000;                // Counter, Decimal 2000 olunca basa donsun 1 sn demek
    TIM1->CR1|=0x0001;            // Counter Enable

    while(1)
      {
         if (TIM1->CNT > 2000) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                            // Ledler sonsun
      }
}
// Programin sonu


hocam birde böyle deneyin. prescaler ve arr hesaplamalarınızda yanlışık var.

şöyle ek yapayım. hocam sanırım timerların hepsinde clock aktif etme, otomatik reload,counter enable vs sabit var. sadece timer clock frekansı ne. timer 1 apb2(84) den aldığı için  84x2Mhz oluyor. 42000 prescaler verirsek. 4000 hz ediyor.bu yüzden otomatik reload 4000 verirsek 1sn debir yanıp söner. tabii if bloğunun içinde 2000 değeriverice ki saniyenin yarısı sönsün yarısında yansın
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 30 Aralık 2011, 00:13:07
hehe evet ;D https://www.picproje.org/index.php/topic,35896.15.html
ben hala dac çalıştıramadım.   :'(
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 30 Aralık 2011, 00:15:04
Tamam 48Mhz olan hat (timer7 nin) 84 de bu ise 168 de çalışıyor.
bu arada Herşyin bir zamanı var yavaş yavaş gidelim.
Yanlız Şu "Camış" işine girmek gerek.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 30 Aralık 2011, 00:32:59
http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php
CMSIS de aslı ben camış diyorum.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: GreeN - 03 Ocak 2012, 12:46:44
Arkadaşlar ADC de  injected ve regular kanallar arasındaki fark nedir anlayamadım? Yani  nerede hangisi kullanılır.

Edit:İnjected kanallar clock pulsleri dışardan alanlarmı?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 03 Ocak 2012, 13:02:57
yok hocam regular grup da dışardan trigger oluyor gözüküyo. neden böyle bir ayrım var ben de bilimiyorum
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: GreeN - 03 Ocak 2012, 14:14:16
Evet söylediğin doğru. Sanırım injected olarak ayarlanmış bir adc de kullanılan kanallardan bir adc sonucu bitmeden diğer bir kanaldan istediğimiz bir anda 2. okumayı yapabiliyoruz.  Karışık oldu ama .... mesela injected olarak ayarlanmış ADC1 'e ait 2 kanal düşünelim , 1. kanaldan adc çevrimini başlattım , adc sonucunun ADC injected data register'e yazılabilmesi için geçen süre sampling + convertion olacak  (3 clk + 12 clk). 1. kanalda sampling süresi geçtikten sonra ADC1 in diğer bir kanalından 2. adc çevrimine başlayabiliyoruz. Regularda bu yok . Bu konuyu aslında Simultaneous(eş zamanlı) çalışma ile karıştırdım.  Ama eş zamanlı çalışmada ADC1 ve ADC2 kanalları kullanılıyor. dsPIC'lerde sequential çalışma gibi değilmiş. Regularde ise sanırım herşey sıra ile oluyor.

Regular kanallarla injected kanllar birlikte de kullanılabiliyor galiba.. Baya karıştı . Vesselam...
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 03 Ocak 2012, 16:25:36
anladım hocam. çevrim süresi bitmeden farklı kanaldan da çevrime başlayabiliyoruz. bu regular da yok. teşekkür ederim bilgilendirmeniz için. sadece microchip ile uğraşmış biri olarak bu st nin datasheet ler bana biraz daha karışık geldi. çok fazla tecrübemin olamaması da etken tabii.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: pisayisi - 03 Ocak 2012, 18:05:57
injected grup stm32 modellerine göre değişmekle beraber 4 kanala kadar yazılım ya da donanımsal olarak tetiklenebilen ve bu tetikleme işlemi ile regular kanaldaki adc dönüşümlerini durduran bir adc yapısıdır. injected adc dönüşümü bitince regular kanallardaki dönüşümler devam edecektir. regular gruptan farklı olarak ta injected dönüşümde farklı birer sonuç ve ofset register ları mevcut.

Genelde injected adc işlemi motor kontrolu gibi  pwm işareti ile eşgüdümlü adc işlemi yapmak için kullanılıyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: fryrmnd - 04 Ocak 2012, 21:38:50
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00258017.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00258017.pdf)

adc modlarının ne işe yaradığı, ne tarz uygumalarda kullanılabileceği hakkında bir uygulma notu.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: gambit1244 - 05 Şubat 2012, 03:53:48
Alıntı yapılan: bunalmis - 26 Aralık 2011, 22:32:57
Bu baslik altinda bir arkadasin LIS302DL MEMS motion sensor ile ilgili sorusu vardi. Ornek kodlardaki MEMS uygulamasini tekrar denedigimde bazen tutarsiz davrandigini gordum.

Asagidaki programda, karti elinizle tutup egdikce ledler egilen yonde isildiyor.


#include "STM32F4xx.h"

unsigned short PWM[8];  // PWM registerler
unsigned short SRG[8];  // Shadow Registerler
unsigned short CNTR;    // PWM Counter
signed char who,x,y,z,xo,yo,zo;   


/*****************************************************************************************************
         CPU PLL ile 168Mhz de kosturulur
         AHB frekansy 168 Mhz
         APB1 frekansy 42 Mhz
         APB2 frekansy 84 Mhz
*****************************************************************************************************/
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
     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
     GPIOD->MODER  = 0x55550000;     // GPIOD nin 15, 14, 13, 12, 11, 10, 9, 8 pinleri cikis tanimlandi (LEDler icin)
     GPIOD->OSPEEDR= 0xFFFFFFFF;     // GPIOD nin tum cikislari en yuksek hizda kullanacagiz

//  GPIOA da A7, A6, A5 pinleri, LIS302DL cipiyle haberlesmek icin SPI moduna alinacak   

     GPIOA->AFR[0]=0x55500000;       // SPI1 secelim (Rehber Sayfa 141), Hard Sayfa 49
     GPIOA->MODER|=0x0000A800;       // A7,A6,A5 Alternatif fonksiyon
     RCC->APB2ENR|=0x00001000;       // SPI1 clk enable   //   GPIOE3 pinini output tanimlayalim (LIS302DL SPI/I2C secimi)   
     GPIOE->MODER  = 0x00000040;     // GPIOE nin 3 nolu pini cikis tanimlandi
     GPIOE->OSPEEDR= 0xFFFFFFFF;     // GPIOE nin tum cikislari en yuksek hizda kullanacagiz
     GPIOE->BSRRL=0x0008;            // GPIOE3=1; LIS302DL CS=1   
     SPI1->CR1=0x00000B7F;           // SPI1 16 bit, master , fulldublex vs
     SPI1->CR2=0X0000;

     RCC->APB1ENR|=0x00000020;       // Timer7 CLK'u aktif edelim (84 Mhz)
     TIM7->CR1=0x0080;               // Otomatik Reload
     TIM7->PSC =839;                 // 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
     NVIC->ISER[1] = 0X00800000;     // NVIC de Timer 7 interrupta izin verelim
     TIM7->CR1|=0x0001;              // Counter Enable
     
}

void TIM7_IRQHandler()
{
unsigned short d,i,j;

    TIM7->SR=0;                       // Timer Int Flagini silelim
    d=GPIOD->ODR | 0xFF00;
    CNTR++;
    if(CNTR>=255)
      {
        CNTR=0;
        for(i=0;i<8;i++)
         {
           if(PWM[i]>255) PWM[i]=255;
           SRG[i]=PWM[i];
         } 
      }
    j=0x8000;
    for(i=0;i<8;i++)
      {
       if (CNTR>=SRG[i]) d&=~j;
       j=j>>1;
      }
    GPIOD->ODR=d;
}

void Write(char Adr,unsigned char Data)
{
      GPIOE->BSRRH=0x0008;            // LIS302DL CS=0
      SPI1->DR=((Adr&0x3F)<<|Data;
      while(!(SPI1->SR&2));
      GPIOE->BSRRL=0x0008;            // LIS302DL CS=1
}   

char Read(char Adr)
{
char Dat;
      GPIOE->BSRRH=0x0008;            // LIS302DL CS=0
      SPI1->DR=((Adr&0x3F)|0x80)<<8;
      while(!(SPI1->SR&1));
      Dat=SPI1->DR;
      GPIOE->BSRRL=0x0008;            // LIS302DL CS=1
      return(Dat);
}   

int main()
{
int i;
      if(Read(0x0F)==0x3B)   // Who are you ?
       {
          Write(0x20,0x47);  // Data Rate=100Hz, Full Scale=2g, Activate, x,y,z enable
          while(1)
            {
               who=Read(0x27); // Statusu ogrenelim. Kim hazir kim deðil?
               if (who&1)
                {
                  x=(Read(0x29)+xo);
                  xo=x>>1;
                  if (x>=0) PWM[0]=x;
                  else PWM[2]=-x;
                } 
               if (who&2)
                {
                  y=Read(0x2B)+yo;
                  yo=y>>1;
                  if (y>=0) PWM[1]=y;
                  else PWM[3]=-y;
                } 
               if (who&4)
                {
                  z=Read(0x2D);
                } 
            }
       }
       
      TIM7->DIER=0x0000;              // Update Int disable
      while(1)
       {
         for(i=0;i<0x1000000;i++);
         GPIOD->ODR^=0x0000F000;
       } 
       
}


(http://img268.imageshack.us/img268/3680/screenshotgz.jpg)

hocam iyi geceler.
bir konuda yardımınıza ihtiyacım var
logic anayzerimi spi moduna ayarladım
önce yüksek değerli bitler
sonrada düşük değerlikli bitler first olarak sample aldım
program çalışmaya başlar başlamaz
bu data geliyor
configuration ayarları gibi sanırım
fakat buradaki değerler ile yukarıdaki programın değerleri arasında
if(Read(0x0F)==0x3B)   // Who are you ?
daki 0x0F dışında hiçbir değer tutmuyor bende hangisini bizim gönderdiğimizi hangisinin sensörden gelen açı bilgisi olduğunu ayırt edemiyorum
eğer birazcık ipucu verirseniz bu şeyi çozmek istiyorum
datalara dikkat ettinizmi bilmiyorum yada sizdede logic analyzer vardır mutlaka
bu datalar doğru gelmişmi mosi ile miso datalarında sanki bi gariplik var yada ben çözemedim mesela resimde bakarsanız
0x22 ile 0xFF
0x13 ile 0x17
0x03 ile 0x8B
alt alta geliyor bunlar neye göre gidip geliyor 3 gündür bakıyorum datasheetlerede fakat bir ucundan yakalayamadım işi
derdimi anlatabilmişimdir umarım biraz uzun oldu :(
şimdiden cok teşekkür ederim herkese iyi geceler...
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 05 Şubat 2012, 10:39:22
Gambit Neden Dataları Görmek İstiyorsun ?
SPI ile gönderilen
0x27
0x28
0x29
adreslerden X,Y,Z bilgileri alınıyor.
0x20 adresinde Config ayarlanıyor.
bunları için Sensörün Datasına Bak..
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: gambit1244 - 05 Şubat 2012, 15:13:48
Alıntı yapılan: muhittin_kaplan - 05 Şubat 2012, 10:39:22
Gambit Neden Dataları Görmek İstiyorsun ?
SPI ile gönderilen
0x27
0x28
0x29
adreslerden X,Y,Z bilgileri alınıyor.
0x20 adresinde Config ayarlanıyor.
bunları için Sensörün Datasına Bak..



hocam dedikleriniz doğru fakat neden ben bunları logic analyzer ile göremiyorum onu anlamış değilim ayarlarınımı yanlış yapıyorum bilemedim...
gönderip aldığımı gormeden başlarsam cok zorlanırım ileride.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 05 Şubat 2012, 16:15:53
Bu kodda bir zamanlar hata vardi. Daha sonra nedeni anlasildi ve duzeltildi.

Asagidaki program parcasi uzerinde calisin.

https://www.picproje.org/index.php/topic,35896.msg269160.html#msg269160
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: gambit1244 - 05 Şubat 2012, 17:47:03
Alıntı yapılan: bunalmis - 05 Şubat 2012, 16:15:53
Bu kodda bir zamanlar hata vardi. Daha sonra nedeni anlasildi ve duzeltildi.

Asagidaki program parcasi uzerinde calisin.

https://www.picproje.org/index.php/topic,35896.msg269160.html#msg269160

hocam cok teşekkür ederim..
son düzeltilmiş örneği ve datasheetleri iyice kurcaladıktan sonra biraz yol katettim diyebilriim
spi iletişim mantığına göre gönderilen 8 bitlik datanın
ilk 2 biti read write ve multiple okuma ayarlarını barındırdığı için bunları gözardı ediyormuşuz
yani logic analyzerden
1000 0111 yani 87 datası geliyorsa bunu
xx00 0111 yani 07 olarak okumamız gerekiyormuş



fakat ufak bir sorum daha var mazur görün.

signed char Read(char Adr)
{
      return(SPI_CMD(((Adr&0x3F)|0x80)<<8 ));
}

şu minik programcıkta
b=Read(0x29) dedik mesela
şimdi read yaparken

return(SPI_CMD(((Adr&0x3F)|0x80)<<8 ));
satırında adr yerine 0x29 yazarsak

29= 0010 1001
3F= 0011 1111
& =  0010 1001  = 29
80= 1000 0000
|   = 1010 1001 = A9 buluyoruz

0xA9 u <<8 yaparsakta sağdan 8 sıfır ile besleyerek 0x00 bulmazmıyız
yani read adr yerine ne yazarsak yazalım sonuç 0x00 olarak dönmüyormu yoksa ben biyerdemi saçmalıyorum anlayamadım :(

aynı şekilde
return(SPI_CMD(((Adr&0x3F)<<8 )|Data));

buradaki write programcığındada adres değeri ne olursa olsun en sonunda silinip yerine data yazılmıyormu ozaman adres değerini yazmanın ne anlamı var anlayamadım
saygılar.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 05 Şubat 2012, 19:50:46
Bizim kullaniminizda SPI registerleri 16 bit.
CM4 nun SPI registerlerine bir goz atin.

Bir de haberlestigimiz cipin komut setine bakin. Bit treninde adres nereye yerlesiyor veri nereye yerlesiyor bakin.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 05 Şubat 2012, 19:59:33
Hocam Bu arada Başka Örnek Program verecekmisiniz  :-[
ADC gibi yada Kartın üzerindeki DAC gibi
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 05 Şubat 2012, 20:04:37
CMIS da bir anlamda iyi olurdu. Nasıl Kullanılır, nelerden oluşur, Kimdir nedir, Ayımıdır Kurtmudur, Çalımıdır Murt mudur
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: z - 05 Şubat 2012, 20:19:11
Su siralar yogun oldugum icin hizim kesildi kartla pek ilgilenemiyorum. Fakat bunca kart sahibinden de artik ornek programlar bekleme zamani geldi diye dusunuyorum. Kart uzerindeki Audio DAC icin ornek diyorsan bu cipi tanimak bir hayli ugrastirici. Bana cok da cazip gelmedigi icin registerlerine detayli inceleme ihtiyaci duymadim.

Eger sizin de bu cipe odaklanma durumunuz yoksa STM nin bu ciple uygulamalarinin bulundugu ornek programlarda kullanilmis hazir fonksiyonlari kullanabilirsiniz.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 05 Şubat 2012, 23:59:50
#include "STM32F4xx.h"
unsigned char WAdr,RAdr;
char RxBuf[128];
/*****************************************************************************************************
         CPU PLL ile 168Mhz de kosturulur
         AHB frekansy 168 Mhz
         APB1 frekansy 42 Mhz
         APB2 frekansy 84 Mhz
*****************************************************************************************************/
void SystemInit()
{
volatile 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
     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
     GPIOD->MODER  = 0x55550000;     // GPIOD nin 15, 14, 13, 12, 11, 10, 9, 8 pinleri cikis tanimlandi (LEDler icin)
     GPIOD->OSPEEDR= 0xFFFFFFFF;     // GPIOD nin tum cikislari en yuksek hizda kullanacagiz
//  GPIOA da A7, A6, A5 pinleri, LIS302DL cipiyle haberlesmek icin SPI moduna alinacak   

     GPIOA->AFR[0]=0x55500000;       // SPI1 secelim (Rehber Sayfa 141), Hard Sayfa 49
     GPIOA->MODER|=0x0000A800;       // A7,A6,A5 Alternatif fonksiyon
     RCC->APB2ENR|=0x00001000;       // SPI1 clk enable   //   GPIOE3 pinini output tanimlayalim (LIS302DL SPI/I2C secimi)   
     GPIOE->MODER  = 0x00000040;     // GPIOE nin 3 nolu pini cikis tanimlandi
     GPIOE->OSPEEDR= 0xFFFFFFFF;     // GPIOE nin tum cikislari en yuksek hizda kullanacagiz
     GPIOE->BSRRL=0x0008;            // GPIOE3=1; LIS302DL CS=1   
     SPI1->CR1=0x00000B7F;           // SPI1 16 bit, master , fulldublex vs
     SPI1->CR2=0X0000;
   
}
//-----------------------------------------------------------------------------------------------------------USART3_IRQHandler
void USART3_IRQHandler()
{
volatile int Sts;
     Sts=USART3->SR;
     RxBuf[WAdr]=USART3->DR;
     WAdr=(WAdr+1)&0x7F;
}

//-----------------------------------------------------------------------------------------------------------SPI_CMD
signed char  SPI_CMD(short DAT)   
{
signed char RxDat;
      GPIOE->BSRRH=0x0008;      // LIS302DL CS=0
      RxDat=SPI1->SR;           // AMAC DELAY (kalmasinda fayda var)
      SPI1->DR=DAT;             // Komutu yukle
      while(!(SPI1->SR&0x01));  // RX BUF bos ise beklemede kal 
      while(SPI1->SR&0x80);     // BSY durumu varsa kalkmasini bekleyelim
      RxDat=SPI1->DR;           // Cipten gelen veriyi oku
      while(SPI1->SR!=0x02);    // CS=1 yapmadan once cipin orjinal duruma donmeyi bekleyelim
      GPIOE->BSRRL=0x0008;      // LIS302DL CS=1
      return(RxDat);
}   
//-----------------------------------------------------------------------------------------------------------SpiWrite
signed char SpiWrite(char Adr,unsigned char Data)
{
      return(SPI_CMD(((Adr&0x3F)<<8 )|Data));
}
//-----------------------------------------------------------------------------------------------------------SpiRead
signed char SpiRead(char Adr)
{
      return(SPI_CMD(((Adr&0x3F)|0x80)<<8 ));
}
//-----------------------------------------------------------------------------------------------------------SendChar
void SendChar(int Tx)
{
      while(!(USART3->SR&0x80));  // TX Buffer dolu ise bekle (Rehber Sayfa 646)
      USART3->DR=Tx;
}
//-----------------------------------------------------------------------------------------------------------UsartInit

void UsartInit()
{
     WAdr=0;RAdr=0;

// USART3 MODULUNU AKTIF HALE GETIRELIM

      RCC->APB1ENR|=0x00040000;  // USART3 Clk Enable (Rehber Sayfa 113)
      RCC->APB1RSTR|=0x00040000;  // USART3 Resetlendi
      GPIOB->AFR[1]=0x07777700;  // PB10..PB14 pinleri USART3 ile alakalandirildi (Hard Sayfa 49)
      GPIOB->MODER|=0x2AA00000;  // GPIOB 10..14 icin alternatif fonksiyon tanimi (Rehber Sayfa 148)

// USART3 MODULUNU AYARLAYALIM  // 1 Start, 8 Data, 1 Stop, No parity (Default degerler)

      RCC->APB1RSTR&=~0x00040000;  // USART3 Reseti kaldiralim
//      USART3->SR&=~0X03FF;   // Status registeri silelim
      USART3->BRR=0X1112;    // 9600 Baud

      USART3->CR1|=0x0000202C;  // USART3 enable
      NVIC->ISER[1]|=0x80;         // NVIC da USART3 interrupta izin verelim
}
//-----------------------------------------------------------------------------------------------------------main

     
int main()
{
int i;
signed char who,xo,yo;
short x=0,y=0;   

      UsartInit();

      if(SpiRead(0x0F)==0x3B)       // Who are you ?
       {
          SpiWrite(0x20,0x47);  // Data Rate=100Hz, Full Scale=2g, Activate, x,y,z enable
          while(!(SpiRead(0x27)&1));
          xo=SpiRead(0x29);
          while(!(SpiRead(0x27)&2));
          yo=SpiRead(0x2B);
         
          while(1)
            {
               who=SpiRead(0x27);   // Statusu ogrenelim. Kim hazir kim değil?
               if (who&1)
                {
                  x=(SpiRead(0x29));
SendChar(x);
//SendChar(0x0A);
                 
         
//               if (who&2)
//                {
//                 y=(SpiRead(0x2B));           
//                 SendChar(y);
// SendChar(0x0A);
//                } 
            }
       }
       
      TIM7->DIER=0x0000;              // Update Int disable
      while(1)
       {
         for(i=0;i<0x1000000;i++);
         GPIOD->ODR^=0x0000F000;
       } 
       
}
//-----------------------------------------------------------------------------------------------------------STOP


programda X den aldgım bilgiyi Usart tan göndrmee çalışıyorum. Yanlış gidn birşeyler var gibi geliyor bana
değer 0-255 arasında olmalı değilmi ?
X yönünde oynattığım değişim görmem gerek ama anlamsız bir değişim var
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: Klein - 06 Şubat 2012, 00:20:12
ADC örneğini  "Örnek temel programlar" başlışındaki  accelerometer örneği ile biraz modifiye ettim. sorun yok.
Kodlarını incelemedim sorunun nerede bilmiyorum. Bu örneğe bakarak sorunun kaynağını tespit edebilirsin.


#include "STM32F4xx.h"
#include "stdio.h"

unsigned char WAdr,RAdr;
char RxBuf[128];
char TxBuf[128];
unsigned char timer_update=0;
uint16_t adc_val;
/*********************************************************************************
CPU frekansi 168Mhz
AHB frekansi 84 Mhz
APB frekansi 42 Mhz
*********************************************************************************/

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
      GPIOD->MODER  = 0x55550000;     // GPIOD nin 15, 14, 13, 12, 11, 10, 9, 8 pinleri cikis tanimlandi (LEDler icin)
      GPIOD->OSPEEDR= 0xFFFFFFFF;     // GPIOD nin tum cikislari en yuksek hizda kullanacagiz
RCC->APB1ENR|=0x00000020;       // Timer7 CLK'u aktif edelim (84 Mhz)

     TIM7->CR1=0x0080;               // Otomatik Reload
     TIM7->PSC =839;                 // Prescaler degerimiz 839, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 84E6 / (840) = 100 KHz
     TIM7->ARR =5;                   // Counter, Decimal 1 olunca basa donsun. Her 20 mikrosaniye de bir timer int olusacak.
     TIM7->DIER=0x0001;              // Update Int enable
     NVIC->ISER[1] = 0X00800000;     // NVIC de Timer 7 interrupta izin verelim
     TIM7->CR1|=0x0001;              // Counter Enable

RCC->APB2ENR|=0x00000100;  // ADC saat kaynağını aktif ettik.
//PB->MODER.p0 = PORT_ANALOG; // PortB0 analog
GPIOB->MODER |= 0x00000003;

ADC1->CR1 |=0x00000100; //  ADC scan modunda çalışacak.
ADC1->SQR3 |= 0x00000008; // Çevrime ilk girecek kanal 8. (PB0)
ADC1->CR2 |=0x00000003;   // AD converter'i açtık. Sürekli çevirim yapacağımızı belirttik.

GPIOA->AFR[0]|=0x55500000;       // SPI1 secelim (Rehber Sayfa 141), Hard Sayfa 49
     GPIOA->MODER|=0x0000A800;       // A7,A6,A5 Alternatif fonksiyon
     RCC->APB2ENR|=0x00001000;       // SPI1 clk enable   //   GPIOE3 pinini output tanimlayalim (LIS302DL SPI/I2C secimi)   
     GPIOE->MODER  = 0x00000040;     // GPIOE nin 3 nolu pini cikis tanimlandi
     GPIOE->OSPEEDR= 0xFFFFFFFF;     // GPIOE nin tum cikislari en yuksek hizda kullanacagiz
     GPIOE->BSRRL=0x0008;            // GPIOE3=1; LIS302DL CS=1   
     SPI1->CR1=0x00000B7F;           // SPI1 16 bit, master , fulldublex vs
     SPI1->CR2=0X0000;

}

/*********************************************************************************
      USART3 modulunu kullanarak asenkron haberlesme (Hata kontrolu yapilmiyor)
*********************************************************************************/
void USART3_IRQHandler()
{
volatile int Sts;
     Sts=USART3->SR;
     RxBuf[WAdr]=USART3->DR;
     WAdr=(WAdr+1)&0x7F;
}

void UsartInit()
{
     WAdr=0;RAdr=0;

// USART3 MODULUNU AKTIF HALE GETIRELIM

      RCC->APB1ENR|=0x00040000;  // USART3 Clk Enable (Rehber Sayfa 113)
      RCC->APB1RSTR|=0x00040000;  // USART3 Resetlendi
      GPIOB->AFR[1]=0x07777700;  // PB10..PB14 pinleri USART3 ile alakalandirildi (Hard Sayfa 49)
      GPIOB->MODER|=0x2AA00000;  // GPIOB 10..14 icin alternatif fonksiyon tanimi (Rehber Sayfa 148)

// USART3 MODULUNU AYARLAYALIM  // 1 Start, 8 Data, 1 Stop, No parity (Default degerler)

      RCC->APB1RSTR&=~0x00040000;  // USART3 Reseti kaldiralim
//      USART3->SR&=~0X03FF;   // Status registeri silelim
      USART3->BRR=0X1112;    // 9600 Baud

      USART3->CR1|=0x0000202C;  // USART3 enable
      NVIC->ISER[1]|=0x80;         // NVIC da USART3 interrupta izin verelim
}

void SendChar(char Tx)
{
      while(!(USART3->SR&0x80));  // TX Buffer dolu ise bekle (Rehber Sayfa 646)
      USART3->DR=Tx;
}

void SendTxt(char *Adr)
{
      while(*Adr)
        {
          SendChar(*Adr);
          Adr++;
        } 
}

char DataReady()
{
       return(WAdr-RAdr);
}

char ReadChar()
{
char Dat;
   
      Dat=RxBuf[RAdr];
      RAdr=(RAdr+1)&0x7F;
      return(Dat);
}


void TIM7_IRQHandler()
{
TIM7->SR=0;   
timer_update=1;
}

// Rx ve TX pinlerini (GPIOB10 ve GPIOB11) birbirine baglarsaniz gonderdiginiz datalar geri gelecektir

signed char  SPI_CMD(short DAT)   
{
signed char RxDat;
      GPIOE->BSRRH=0x0008;      // LIS302DL CS=0
      RxDat=SPI1->SR;           // AMAC DELAY (kalmasinda fayda var)
      SPI1->DR=DAT;             // Komutu yukle
      while(!(SPI1->SR&0x01));  // RX BUF bos ise beklemede kal 
      while(SPI1->SR&0x80);     // BSY durumu varsa kalkmasini bekleyelim
      RxDat=SPI1->DR;           // Cipten gelen veriyi oku
      while(SPI1->SR!=0x02);    // CS=1 yapmadan once cipin orjinal duruma donmeyi bekleyelim
      GPIOE->BSRRL=0x0008;      // LIS302DL CS=1
      return(RxDat);
}   
signed char Write(char Adr,unsigned char Data)
{
      return(SPI_CMD(((Adr&0x3F)<<8 )|Data));
}
signed char Read(char Adr)
{
      return(SPI_CMD(((Adr&0x3F)|0x80)<<8 ));
}
     

int main()
{
unsigned int ledtime;
signed char who, b;

      UsartInit();
      SendTxt("PicProje");
ADC1->CR2 |=0x40000000; // ADC çevrimini başlattık.

      if(Read(0x0F)==0x3B)       // Who are you ?
       {
          Write(0x20,0x47);  // Data Rate=100Hz, Full Scale=2g, Activate, x,y,z enable
    }
         

      while(1){
               who=Read(0x27);   // Statusu ogrenelim. Kim hazir kim değil?
               if (who&1)
                {
      b=Read(0x29);
                } 
  if(ADC1->SR & 0x0002){
    ADC1->SR &= ~0x0002;
adc_val = ADC1->DR;
}

  if(timer_update){
timer_update=0;
if(++ledtime > 5000){
  ledtime =0;
GPIOD->ODR ^= 0x0000008000;
// sprintf(TxBuf,"ADC Degeri :%u\r",adc_val);
sprintf(TxBuf,"X = %d\r",b);
SendTxt(TxBuf);
  }
}
  };
}

Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 06 Şubat 2012, 00:25:50
Verdiğiniz Program Tam Olarak ne Yapıyor Hocam ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: Klein - 06 Şubat 2012, 00:28:40
kartın eğimine göre X ekseni ( Y de olabilir) açısını seri porttan gönderiyor.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 06 Şubat 2012, 00:34:14
"sprintf" i stdio dan mı çalışıyor hocam ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: Klein - 06 Şubat 2012, 00:34:45
evet.
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 06 Şubat 2012, 00:39:01
Yeri Gelmişken Sorayım Ozaman.
Bu STDIO bu chip için düzenlenmiş/yazılmış olmalı değil mi ?
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: Klein - 06 Şubat 2012, 00:59:17
Doğrudan işlemci için değil ama işlemci ailesi için düzenlenmiş olması gerekebilir. emin değilim. 
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 10 Şubat 2012, 01:57:34
Alıntı Yapsprintf fonksiyonu da, printf ve fprintf fonksiyonlarına benzer şekilde çalışmaktadır. Bu fonksiyonun diğerlerinden temel farkı ise, yazacağı ifadeleri bir dosyaya ya da ekrana değil, bir karakter katarına yazmasıdır
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: Klein - 10 Şubat 2012, 02:49:01
???
Başlık: Ynt: STM32F4 Discovery - Vizeler
Gönderen: muhittin_kaplan - 12 Şubat 2012, 20:05:19
Şaşırmayın Hocam Dediğinizi Desteklemek için Alıntı yaptım biryerden.