STM32F407 Cortex M4 şamataları

Başlatan bunalmis, 16 Ekim 2011, 17:14:50

ErsinErce

Sizinde dediğiniz gibi fabrikasyon değerlerinin sağlandığını düşünerek direk ayarlamalara girdik
bu değerlerden emin olmak için ilk başta kendimiz yüklememiz gerek ki çalışmama vb durumlara düşmeyelim
doğru mudur hocam?

kck87

Alıntı yapılan: ErsinErce - 24 Ekim 2011, 16:26:10
Sizinde dediğiniz gibi fabrikasyon değerlerinin sağlandığını düşünerek direk ayarlamalara girdik
bu değerlerden emin olmak için ilk başta kendimiz yüklememiz gerek ki çalışmama vb durumlara düşmeyelim
doğru mudur hocam?

bana da mantıklı geldi, olabilir.
 nickim'in terör örgütünün kck yapılanması ile alakası yoktur. bazı arkadaşlarımdan butarzda duyumlar aldım.

z

#272
Mesela ST nin kodundaki   

RCC->CIR = 0x00000000;     /* Disable all interrupts */  satırına bakalım.

Resetten taze kurtulmuş çipin zaten tüm interruptları disable durumundadır.

Biz RCC_CIR registerden tekrardan disable etme yoluna gitmedik.

Dolayısı ile lüzumsuz kodları yazmadık.

Ancak;

Yazdığımız SystemInit,  herhangi bir zamanda herhangi bir yerden tekrar çağrılacaksa bu durumda SystemInit kodları bizim yazdığımız gibi basit yazılmamalıdır.

Fakat daha kursa başlar başlamaz da kodlarımızı, çok sayıda çevrebirimi registeri kullanarak yazıp anlatmaya kalksaydım kursu anlaşılır kılamazdım.

Zaten bizim de SystemInit kodlarını Hard Reset haricinde çağırmak gibi niyetimiz de yok.




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

gambit1244

@bunalmis hocam merhaba

FLASH->ACR = 0x00000605;        // Flash ROM icin 6 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)

satırında

6 vaitstate seçmiyoruz 5 wait state seçiyoruz
fakat bu 6 clock cycle a tekabül ediyor anladıgım kadarıyla. arkadaşların kafası karışmasın diye soyliyim dedim.
örnek c programları bolümünde yazıyordu
kolay gelsin
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

z

Dogru diyorsun. Aciklama kismindaki 6WS yi 5WS olarak degistireyim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

gambit1244

#275


hocam birşey daha kafama takıldı
şimdi bu clock tree ye ve bizim system init dosyamıza baktıgımızda

ilk başta

16MHz HSI RC yi kullanıyoruz
burda AHB presc ' a giden bir switch var 3 kademeli
aynı zamanda paralel olarak "M" bölücüsüne giden iki giriş var

16Mhz HSI RC ile işimiz bittiğinde 8Mhz HSE 'ye ordanda PLL i aktif edip 168 mhz ile P den çıkıp "AHBPRESC" e giriyoruz.
artık PLL e geçtiğimize göre "HSION" bitini sıfır yapıp(16 MHZ'i durdurup) enerji tasarrufu sağlayabilirmiyiz
yoksa bu bize her daim lazımmı bunu kapatırsak sonra işlemcinin çalışmama ihtimali gibi(kısır döngü) şeyler olabilirmi
yada her resetlediğimizde bu internal osc ayarları başa dönermi(sadece bu sistemin çalışma mantıgını anlamak için sordum yoksa okadar enerjinin kaybının önemi yok benim için)
teşekkür ederim
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

ilhan_mkp

üstat alttakiler çıkış bence hse kendine gelip işinin başına geçince kapatılır

gambit1244

Alıntı yapılan: ilhan_mkp - 25 Ekim 2011, 00:37:15
üstat alttakiler çıkış bence hse kendine gelip işinin başına geçince kapatılır

hocam alttakiler derken switch in altındakilerden bahsettim

yani m bölücüsüne girenlerden

en alttakiler ise çıkışlar

PLLCLK  ve PLL48CK

peki bu HSI off yapıldıgında
işlemciye reset attığımızda kısır döngü olurmu
yoksa resetten sonra fabrikasyon ayarlaramı doner onu anlamadım
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

z

#278
CPU, PLL'den gelen clock ile beslenmeye basladigi andan itibaren elbette HSI yi kapatabilirsin. Bu da guc tasarrufu yapar.

Her reset isleminde registerlerin alayi fabrikasyon degerlerine doner.

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

Kirmizi satirlarda CPU hala HSI ile besleniyor
Yesil olan satirda artik PLL ile besleniyoruz ve artik HSI yi bu satirda yda daha sonra kapatabilirsiniz.

Kavunici satirda CPU HSI ile mi yoksa PLL ile mi besleniyor tam belli degil fakat HSI ile beslenmesi daha mantikli
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

gambit1244

#279
Alıntı yapılan: mcan - 23 Ekim 2011, 11:30:46
#include "STM32F10x.h"

void delay(unsigned int);
int ih;

void SystemInit (void)
{

 	RCC->APB2ENR |= 0x00000016;    // GPIOD donanımının clock sinyalini uygulayalım
    GPIOC->CRL = 0x33333333;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (Ledler bu pinlerde)
	GPIOC->CRH = 0x33333333;

	RCC->CR |= 0x0010000;	   			// HSE aç
	while (!(RCC->CR & 0x00020000))		// HSE tamam mı devam mı?
	{
		GPIOC->ODR |= 0x20;     // Ledler yansin
	 	delay(0x90000);
     	GPIOC->ODR &= 0xFFFFFFDF;     // Ledler sonsun
	 	delay(0x40000);
	}

	RCC->CFGR = 0x001D0000;	   			// PLL ayarla
	RCC->CR  |= 0x001000000;	   		// PLL aç
	while (!(RCC->CR & 0x0002000000))	// PLL Kilitlendi mi?
	{
		GPIOC->ODR |= 0x200;     // Ledler yansin
	 	delay(0x90000);
     	GPIOC->ODR &= 0xFFFFFDFF;     // Ledler sonsun
	 	delay(0x40000);
	}

	
	FLASH->ACR =  0x32;					// Flash gecikme ayarı
	RCC->CFGR = 0x001D0002;	   			// SİNYAL KAYNAĞI PLL 

} 

{																											   
void delay(unsigned int i)
   unsigned int z;
    for(z=0;z<i;z++);
	 
}
 
 
int main()
{
    while(1)
   {
     GPIOC->ODR= 0x0000FFFF;     // Ledler yansin
	 delay(0x80000);
     GPIOC->ODR= 0x00000000;     // Ledler sonsun
	 delay(0x80000);
   } 
}


C4 tam hızda çalışırda c3 çalışmazmı :) Yine @Bunalmis hocamızın kodundan esinlenerek yazdım,Flash ile alaklı kodu kaldırırsanız hse kaynaklı pll çalışmıyor,sadece hsı,hse yada hsi+pll çalışıyor dökümana göre hsi+pll de çalışmaması lazım ancak orda bir güzellik var hsi yi ikiye bölüp pll ye giriyor o da 36 mhz ediyor sanırım fark azaldıkca flash latency kompanze edebiliyor ,kesin bilmiyorum...Bende debugger olmadığından led kodlarını system_init in içine yazdım.



{																											   
void delay(unsigned int i)
   unsigned int z;
    for(z=0;z<i;z++);
     
}


satırında  üstteki süslü parantez yanlış yerde oyüzden derleme yapmaz
cortexM3 kiti ile deneme yapıcak arkadaşlar o parantezi 2 satır aşagıya indirirse sorun ortadan kalkar

NOT: CORTEX M3 kiti için koddur
mcan eline sağlık

birde bu kodu düzgün derledim fakat
sanırım debug.ini dosyasından sorun kaynaklanıyor
orjinal stm32 klasoründeki ram.ini ilede denedim yine olmadı

No ULINK Device found
Error:Flash Download failed- Target DLL has been cancelled

hataları alıyorum
mümkünse senin kullandıgın ini dosyasını bana yazarmısın
teşekkürler..
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

z

#280
Sen Debuggerda simulatoru değil ULink i secmissin. Yani Keil kartla calisacagini anlamis fakat ULinki bulamamis.

Kartla calisiyorsan Keil, Ulinki bulamadigina gore T-Link kullaniyor olabilirmisin? Oyle ise Ulink yazan yeri T-Link yapmalisin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

gambit1244

#281
Alıntı yapılan: bunalmis - 25 Ekim 2011, 01:53:08
Sen Debuggerda simulatoru değil U-Link i secmissin. Yani Keil kartla calisacagini anlamis fakat U-Linki bulamamis.

hocam ama bende kit var onun üzerinde denemek istedim
ulink takılı (stlink)swd yi seçtim cortexM3Discovery kitim var   

********************

hocam tamamdır
menüde  projects > options for "Target1" >  Utilities
sekmesinden ST-link i seçtim sorun düzeldi yükledim
:D oleyy
***************
program çalışmadı ama :( (ledler yanıp sonmedi )
yarın debug yapıp adım adım gözden geçirmeye çalışırım
sanırım "stm32f10x.h" yerine "stm32f10x_lib.h" yazdıgımız için bi sorun oldu
@mcan sen karta programı atıp ledlerin yanıp sondugunu gördünmü?
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

mcan

Alıntı yapılan: gambit1244 - 25 Ekim 2011, 01:54:29
hocam ama bende kit var onun üzerinde denemek istedim
ulink takılı (stlink)swd yi seçtim cortexM3Discovery kitim var   

********************

hocam tamamdır
menüde  projects > options for "Target1" >  Utilities
sekmesinden ST-link i seçtim sorun düzeldi yükledim
:D oleyy
***************
program çalışmadı ama :( (ledler yanıp sonmedi )
yarın debug yapıp adım adım gözden geçirmeye çalışırım
sanırım "stm32f10x.h" yerine "stm32f10x_lib.h" yazdıgımız için bi sorun oldu
@mcan sen karta programı atıp ledlerin yanıp sondugunu gördünmü?
evet ledler yanip sonuyor ama , problem su olabilir sen hangi porta ledleri bagladin ve hangi bacaklara? ledleri ben sadece c9 ve c5 e bagladim.

gambit1244

#283
@mcan
kitin üstündeki 2 ledi kullanmıyormusun????  :'( :'(

boşuna ugraşmışım düngece teşekkürler..

bi sorum daha var
ben bu programile debug moduna girebiliyorum fakat debug kütüphande dosyasında bir satırda takılıp kalıyor
ve ordan başka yere hareket ettiremiyorum
acaba ini dosyasından mı kaynaklanıyor
sen kusursuz debug yapabiliyomusun?
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

mcan

#284
@gambit1244 sende hangi kit var ,ben et arm stamp kullaniyorum bu yuzden uzerinde neredeyse hic birsey yok.ledleri kendim bagladim.
Software olarak debug etmiştim ama bende debugger olmadığından ledler ile debug etmeye çalışıyorum.Çipi de seri porttan stm32 nin kendi loader i ile programlıyorum.

Birde benim gözlemlediğim eğer hse ile çalışan pll çakılırsa hsi den devam ediyor,eğer hsi yi kapatırsanız problem anında komple susabilir,ayrıca okurken gözüme çarpmıştı bir yazmaç ile bu otomatik osilatör geçişini kontrol ediyorduk şimdi iş yerinden bakamadım akşam ayrıntılı yazarım.

Aha da buldum
If the HSE oscillator is used directly or indirectly as the system clock (indirectly means: it is 
used as PLL input clock, and the PLL clock is used as system clock), a detected failure 
causes a switch of the system clock to the HSI oscillator and the disabling of the HSE 
oscillator. If the HSE clock (divided or not) is the clock entry of the PLL used as system clock 
when the failure occurs, the PLL is disabled too.

Bu durumda siz pll kullanırken hsi yi de durdurursanız herhangi problemde işlemci durması lazım.Ben denerken kristali söktüm ve 8 mhzde çalışmaya devam etti demekki hsi yi kendi otomatik aktif etti.