STM32F407 Cortex M4 şamataları

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

z

Alıntı yapılan: muhittin_kaplan - 22 Ekim 2011, 19:19:39
....Hocam Ayrıca ilk Aşamada "Şunlar Şunlar Yapılmalı" (Kodlar Yazılmaya Başlarket Port Ayarlamaları gibi Osilator vs ) diye bir liste oluşturabilirmiyiz ?

İşlemciyi init etmek için yapılması gerekenler.

1. Clock ayarlamaları (Xtal, PLL, BUS clk ayarlamaları)
2. Kullanılacak portların ayarlamaları (I/O, Alternatif fonksiyon vs vs)
3. Kullanılacaksa Timer, ADC vs vs lerin ayarlamaları

Örneklerde neyi neden yaptığımız anlaşılsın diye örnekleri özel olarak hazırlıyor ve hiç bir fazla kod eklemiyorum.

Okuma yazma bilmeyenlere önce harfler sonra heceler vs öğretiliyordu fakat bu günlerde tersden gidiliyor ya. Buna benzer
bir durum var ve konuların şu anki yöntemde en kolay öğrenileceğini düşünüyorum.

Örnekleri üstün körü değil de bizzat işin içinde olarak incelediğinizde zaten neyin neden yapılması gerektiği kendiliğinden anlaşılacak.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mcan

Benim gibi m3 ile deneme yapan arkadaşlar için @Bunalmis in kodunu kopya çekerek m3 için yapmaya çalıştım ve çalıştırdım led yanip sönüyor :)
denemek isteyenler için buraya koyuyorum kod m3 içindir.
#include "STM32F10x.h"

void delay(void);

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;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (Ledler bu pinlerde)
} 

void delay()
{
unsigned int i;

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


z

#137
Alıntı yapılan: muhittin_kaplan - 22 Ekim 2011, 19:45:18
işlemcinin kapasitesine göre mi bu Tamsayı (int) belirleniyor. Yani işlemci 16bit olsaydı int 16bit mi olurdu
Ozaman 8 bit de bir karşıtlık var.

int minimum 16 bit.

Çünkü byte evrensel bir tanım ve 8 bit anlamına geliyor.

Bizi şu anda ilgilendiren

byte 8
short 16
int 32
long int 64

Bunlara zaten C derslerinde Gerbay değinecek. Gerbay, geçtiğimiz hafta içinde kursa başlayamayacağını söyledi sanırım önümüzdeki hafta dersleri başlatmış olur.

@mcan

Eğer CM3 işlemcilerle hiç çalışmadı ve bu kodu CM4 için verilmiş örneklere bakarak kendin uyarladıysan bravo. (kodlarında eksik yada fazla bir şey varmı bilmiyorum fakat bu aşamada önemli değil)

En başta CM3 işlemci ile çalışalım diyenlere hayır bu CM4 kartını kaçırmayalım kursu izledikten sonra kendiniz CM3ü kullanabilirsiniz derken işte bundan bahsediyordum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

http://www.keil.com/support/man/docs/armccref/armccref_Babfcgfc.htm

adresinde tipler belirtilmiş, bunalmis hocanın dediği gibiymiş, CM4 harici Keil'in manualini de iyi okumak lazım anlaşılan =/

mcan

#139
Alıntı yapılan: bunalmis - 22 Ekim 2011, 19:57:32

int minimum 16 bit.

Çünkü byte evrensel bir tanım ve 8 bit anlamına geliyor.

Bizi şu anda ilgilendiren

byte 8
short 16
int 32
long 64

Bunlara zaten C derslerinde Gerbay değinecek. Gerbay'ın geçtiğimiz hafta içinde kursa başlayamayacağını söyledi sanırım önümüzdeki hafta dersleri başlatmış olur.

@mcan

Eğer CM3 işlemcilerle hiç çalışmadı ve bu kodu CM4 için verilmiş örneklere bakarak kendin uyarladıysan bravo.

En başta CM3 işlemci ile çalışalım diyenlere hayır bu CM4 kartını kaçırmayalım kursu izledikten sonra kendiniz CM3ü kullanabilirsiniz derken işte bundan bahsediyordum.
Sağolun hocam valla neredeyse bütün gün bişeyler okuyor takip etmeye çalışıyorum özellikle .h dosyalarında baya zaman kaybettim  sonunda zorda olsa ledi yaktım ,yoksa kendimi salak hissedecektim, :)
ancak anlamadığım bir nokta soft dökümanı karıştırırken addresleri anlamadım .
Düzeltme ; .h dosyasında arama yaparken gözümden kaçmış şimdi adresler tamam ve anlaşılır biçimdeler,sadece pdf dökümanında biraz karışık biçimde yazıyor bana göre.


Alıntı Yap6.4.1 GPIO port mode register (GPIOx_MODER) (x = A..I
Address offset: 0x00
Reset values:
● 0xA800 0000 for port A
● 0x0000 0280 for port B
● 0x0000 0000 for other ports
gibi şeyler var konu başında ama tam olarak anlamadım GPIOD nin adresi nedir?

z

#140
long 64 yazarken hata yaptım ve editledim.

Alıntı yaptığın kodda da long 64 görünüyor. Doğrusu Long int in 64 bit oduğu.

GPIOD aşağıdaki gibi stm32f4xx.h içinde tanımlı.

#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)

Header dosyada Base adresleri öğrenebilirsin. Buna ilgilendiğin adresin ofsetini eklersen istediğin portun gerçek adresini de bulmuş olursun.

Ofset Adres=Gerçek adres - Base Adres


Bu konuları Gerbay anlatacak.

C de biraz yol katettikten sonra h dosyalarına baksanız daha iyi olur.

Eğer değişkenimiz işaretsiz sayıları yerleştirmek için kullanılacaksa yukarıdaki Delay örneğinde int değişkeni unsigned int yapmamız daha doğru olur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Alıntı yapılan: mcan - 22 Ekim 2011, 19:53:32
Benim gibi m3 ile deneme yapan arkadaşlar için @Bunalmis in kodunu kopya çekerek m3 için yapmaya çalıştım ve çalıştırdım led yanip sönüyor :)
denemek isteyenler için buraya koyuyorum kod m3 içindir.
#include "STM32F10x.h"

void delay(void);

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;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (Ledler bu pinlerde)
} 

void delay()
{
unsigned int i;

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

1. Yeni bir proje oluşturup 32f100RB yi seçtim
2. startup dosyasını eklemesini söyledim
3.bir dosya oluşturup main.c adında kaydedip kodu yapıştırdım.
4.source gurub a ekledim derledim hata verdi. siz nasıl yaptınız ?

mcan

#142
Hangi hatayı verdi?
Bua arada bende stm32f103 re var.
Şimdi baktım senin referencemanual farklı bakalım farklı bişey olarak neler var muhtemelen yazmaçlar farklı olabilir mi bakalım.

Yüzeysel biçimde göz gezdirdim pek bir fark yok ,hata nerde verdi ona göre bakalım.

gambit1244

Alıntı Yap@mcan

Eğer CM3 işlemcilerle hiç çalışmadı ve bu kodu CM4 için verilmiş örneklere bakarak kendin uyarladıysan bravo. (kodlarında eksik yada fazla bir şey varmı bilmiyorum fakat bu aşamada önemli değil)

En başta CM3 işlemci ile çalışalım diyenlere hayır bu CM4 kartını kaçırmayalım kursu izledikten sonra kendiniz CM3ü kullanabilirsiniz derken işte bundan bahsediyordum.

bunu bende şimdi deniyodum arkadaş once yapmış
gerçekten ogrettiginiz temel bilgilerle yapmak zor degil
ama hazır fonksiyonlarla ogretseydiniz asla boyle bişey yapamazdık
@mcan tebrikler
bende şimdi eksigimi buldum sayende
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

muhittin_kaplan

ben iki manuel i de açtım yavaştan gidiyordum :)

muhittin_kaplan

#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"

z

Projeyi oluştururken kullanacağın işlemciyi STM32F10x olarakseçmiş ve startup kodunu ekle demişmiydin?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan


gambit1244

#148
hatam bu sanırım aynı :D

#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"


bende herşeyi olması gerektigi gibi yaptım
kodda belki hata olabilr skywalker senin config nasıl ?
#include "stm32f10x.h"

void SystemInit (void)
{ 

   RCC->APB2ENR |= 1 << 4
      GPIOC->CRH   &= 0xFFFFFF00;   //   (Ledler bu pinlerde)
      GPIOC->CRH   |= 0x00000033;   // (Ledler bu pinlerde)		   11:çıkış modu maksimum  50 mhz
} 

	  int main()
{
    while(1)
   {

[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

M_B

Alıntı yapılan: muhittin_kaplan - 22 Ekim 2011, 20:16:27
1. Yeni bir proje oluşturup 32f100RB yi seçtim
2. startup dosyasını eklemesini söyledim
3.bir dosya oluşturup main.c adında kaydedip kodu yapıştırdım.
4.source gurub a ekledim derledim hata verdi. siz nasıl yaptınız ?

Hocam bende denedim bende de aynı hatayı verdi.

C:\Keil\ARM\INC\ST\STM32F10x\STM32F10x.h(80): error:  #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
Target not created


Hocam Yoksa  32f100RB değilde başka modelimi secmek lazım.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet