STM32F407 Cortex M4 şamataları

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

taneryilmaz

Alıntı yapılan: bunalmis - 22 Ekim 2011, 22:54:59

İki kez GPIOE yazdığım kısmı düzelteyim.

Rehber dokumanı çipin bacak sayısından bağımsız bir dokuman. STM32F40x serisine ait. O yüzden o dokumanda F,G,H,I gibi ilave GPIO lar görebilirsiniz.

Fakat bizim STM32F-Discovery kitimizdeki çip 100 bacaklı. Hard Sayfa 39 ve 40 a bakarsanız neden F,G,H,I olmadığını anlayacaksınız.

Alıntı yapılan: sayment - 22 Ekim 2011, 22:46:26
Derslerde böyle yazmışsınız ancak işlemcinin şemasında 9 tane GPIO gözüküyor. Kafam karıştı ?(Ayrıca iki kez GPIOE yazılmış.)

[IMG]http://img580.imageshack.us/img580/4867/gpio.jpg[/img]

Uploaded with ImageShack.us

hocam hard dosyamızın ilk sayfasında da yazdığı gibi hard dosyası
STM32F405xx ve
STM32F407xx çipleri için hazırlnamıştır

[IMG]http://img194.imageshack.us/img194/3711/adszzbr.png[/img]

Uploaded with ImageShack.us

bu resimde bizim kullandığımız çipin koç adet çıkış portu olduğu yazıyor

z

#181
Eline sağlık,

Acaba en başta GPIOE yada GPIOA olacak şekilde alt alta

Örneğin GPIOD için

PD15  Led6 Blue
PD14  Led5 Red
PD13  Led3 Orange
PD12  Led4 Green
PD5   STMP2141STR Out pin
PD4   CS43L32 Reset

Şeklinde text bir tablo da yapabilirmiyiz.

Port bazında olursa bakınca hemen hangi portun hangi pinleri boşta anlarız.

Burada dursun.

Not: Bu arada bizim çipte GPIOH a ait 2 pin varmış.

taneryilmaz  ın verdiği tabloda 82 tane I/O var görünüyor.

82/16 dan 5 tane 16 bitlik  GPIO var. Geriye 2 tane kalıyor onlar da GPIOH ın 0 ve1 nolu I/O ları.

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

muhittin_kaplan

Alıntı yapılan: mcan - 22 Ekim 2011, 23:02:10
Selamlar bu istediğimiz biti set edip bize 32 bitlik sayıyı veren ,bitleri tersine çevirebilen vbg basit işler için bir program varmı bildiğiniz?
https://www.picproje.org/index.php/topic,35721.0.html son iletisinde

MC_Skywalker

STM32F407 nin kit üzerindeki diğer donanımlar ile paylaşılan portların listesi

[IMG]http://img263.imageshack.us/img263/4633/pinlistesi.jpg[/img]

gambit1244

harikasın bu ileride çok işimize yarıycak gerçek proje yaparken
hangisi kullanılıyo hangisi boş burdan goruruz
ellerine sağlık
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

ErsinErce

#185
Benim mesaj arada kaldığından pek gören olmadı galiba
MC_Skywalker hocam kendini yorma pinlerin listesini akşam üstü hazırlamıştım
buradan çekebilirsiniz
http://www.4shared.com/file/8MeEKyr8/STM32F4Discovery_Pinouts.html


Edit:hatalı dosya

gambit1244

emeginize sağlık
bişey sormak istiyorum

Ledleri flash eden program ı debug ediyordum
system init içine yazılanları yazıp derleyince debug yapmıyor
system init içini boşaltıp derleyince düzgün çalışıyor neden boyle yapıyor sizde durum ne arkadaşlar??
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

mozkan87

Aslında debug yapıyor ama while satırlarına takılıyor. Aynı sorunla bende karşılaştım aşağıdaki o satırları yorum satırı yapınca düzeldi. Registerların içeriği değişmesine rağmen o satırları debug modunda atlatamadım. Ama tahminim canlı canlı debug yaparken böyle bir sorun olmaz.

// Programın başı
 
#include "STM32F4xx.h"
void SystemInit()
{
volatile int i, DBG;
    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=4 ve Q=14 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 6 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;         // Flash ROM icin 6 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()
{
    while(1)
   {
     if (GPIOA->IDR & 0x000000001) GPIOD->ODR= 0x0000F000;     // Ledler yansin
     else GPIOD->ODR= 0x00000000;     // Ledler sonsun
   }
   
 
}
// Programın sonu.

yamak

main fonksiyonunun içindeki while(1) yazan satıra breakpoint koyun sonra debug yaparken reset butonuna basıp f5 e basın sonra f11 ile ilerleyin bahsettiğiniz sorun ortadan kalkacaktır. yani o satırları yorum haline getirmenize gerek yok.

mozkan87

Peki hocam while'ın koşulunun sağlanmasına rağmen neden bu şekilde bir takılma söz konusu oluyor, yada sadece bizde mi oldu?

taneryilmaz

#190
Alıntı yapılan: bunalmis - 22 Ekim 2011, 23:13:55

Acaba en başta GPIOE yada GPIOA olacak şekilde alt alta

Örneğin GPIOD için

PD15  Led6 Blue
PD14  Led5 Red
PD13  Led3 Orange
PD12  Led4 Green
PD5   STMP2141STR Out pin
PD4   CS43L32 Reset

Şeklinde text bir tablo da yapabilirmiyiz.

Port bazında olursa bakınca hemen hangi portun hangi pinleri boşta anlarız.

Burada dursun.




@bunalmış hocam umarım istediğiniz gibi faydalı bir liste olmuştur.

Cortex M4 discovery KİT giriş çıkış pinleri http://www.4shared.com/file/Kc-kRolE/STM32F4DISCOVERY_PinoutsV2.html

gambit1244

usta inş. devreler gelince boyle sorun olmaz :D
gayet iyi gidiyoruz bir aksilik çıkmasın :D
[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

@mozkan87

Programı aynen derledim ve kartsız debug ettim. Ne while satırında ne de while icinde herhangi bir takılma yok. F11 ile adım adım gidiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

NaMcHo

#193
@bunalmiş
Alıntı Yapvoid 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 6 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;        // Flash ROM icin 6 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
}

for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
bu satırı neden eklediğinizi kavrayamadım,
while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
, burada stabil olana kadar zaten bekletiyoruz ekstradan başlangıçta bir beklemeye neden ihtiyaç duydunuz?


Tamamdır yamak hocam

mcan

#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.