STM32F407 Cortex M4 şamataları

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

EMP_Otto

#1170
Merhaba arkadaslar.Stm32 ile program yazmaya başlayalı cok oldu.Yavas yavas ilerlerken sıra geldi LIS302DL çipine.Bülent hocanın kodlarına baktım.Ref manuelden spi donanımına baktım.Anlamadığın nokta SPI1->DR=((Adr&0x3F)<<8 )|Data; ve  SPI1->DR=((Adr&0x3F)|0x80)<<8; . Neden her seferinde adresi 0x3F ile and işlemine sokuyor.0x3F nerden geldi.Bu satırları acıklayabilirseniz cok sevinirim.
Kolay gelsin...
Bu işler zordur,özveri ister...

z

#1171
SPI1->DR=((Adr&0x3F)<<8 )|Data; ve  SPI1->DR=((Adr&0x3F)|0x80)<<8;

değil de

SPI1->DR=(Adr<<8 )|Data; ve  SPI1->DR=(Adr|0x80)<<8;

yazmış olsaydık bu kodları barındıran fonksiyona 3F den daha büyük değer yollamayın diye uyarı yapmamız gerekirdi.

3F ile andleyince kardeşim ne gönderirsen gönder eğer verin 3F den büyükse verini kırparım ayağını denk al diyerek fonksiyona parametre yollayacak şahısa inisiyatif vermemişiz.

Nedeni için SPI çipin DR registerine bakman gerekir. Bakarsan adres alanının 6 bit olacağını görürsün. (Dokümana bakmadım ama 3F ile andlemekdeki amaç bu)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

EMP_Otto

Çok sağolun hocam.Çok teşekkür ettim.
Bu işler zordur,özveri ister...

StDarg

#1173
merhaba arkadaşlar stm32f4 de kesme kullanırken aynı donanım biriminin kesmelerinde sadece bir tanesini mi aktif edebiliyoruz yoksa istediğimizi aktif edebiliyormuyuz.
örnekğin
USART_ITConfig(USART3,USART_IT_TXE,ENABLE);
USART_ITConfig(USART3,USART_IT_TC,ENABLE);

USART_ITConfig(USART3,USART_FLAG_RXNE,ENABLE);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);

bunları u şekilde aktif etmemde sorun varmı

X-Fi

Problem yok dogru yapıyorsun kesme içerisinde hangisinden gelmiş kontrol etmek kalıyor sadece.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

sfiber

merhaba arkadaşlar.size bir sorum olucak konu dışıysa kusuruma bakmayın lütfen.ben uzun süre ccs c ile programladım ama arma geçtikten sonra z hocamın örneklerindeki register kullanımı çok hşuma gitti ve register okumanın mantığını çok daha iyi anladım.ama internetde gezerken kullanıcıları çoğunun paylaştığı kodlarda gpıo kütüphanesi gibi kütüphaneler çağırılmış ve register kullanımı yerine standart c kodlarına dönüş olmuş.benim size sormak istediğim şey şu arm programlamanın iki farklı yüzümü var.
teşekkürler arkadaşlar.

kimlenbu

#1176
keil ve daha bir çok derleyicinin kütüphaneleri yakın zamanda gelişti ve insanı oldukça zorlayan registerlara boğulma ve okunması zor olan kodlardan kurtardı.

Çevre birimlerini çalışır hale getirmek için "init" fonksiyonları hazır. Hamallık yapmak yerine esas işimizle daha fazla ilgilenebiliyoruz.

Nette gezen kodların eski olanlarını okumak oldukça zordur, hele bir de register işlemlerine açıklama koymadıysa vay haline, düzenleme yapmak istediğinde açarsın datasheeti gözlerin kör olur kodu anlayana kadar.

evet 2 farklı yüzü var, hazır kütüphaneleri kullanabilirsin, ya da her bir ayarı registerlara müdahale ederek tek tek kendin yaparsın.

mho

merhaba arkadaşlar.Z hocanın anlattıkları konularla arm a başladım.Anlayamadığm kaç nokta var 

Discovery kitindeki işlemcimiz resetlendiğinde, Boot0 ve Boot1 pinlerinin konumu gereği Flash rom 0x0800.0000 adresinden 0x800.0??? (Daha sonra kesinleştireceğim) a kadar adreslerdeki veriler aynen 0x0000.0000 adresine yansır. Yani bu adres aralığındaki veriler birbirinin aynı olur. Bu olaya mirror yada ReMap işlemi denir.

1-Boot0 ve boot1 farklı bir kombinasyonda olsaydı flash rom 0x0800.0000 adresinden değilde başka adrestenn mi başlayacaktı

2-bu flash rom yazdığımız kodun çalıştığı yer mi oluyor.

3-Arm mimarisinde Boot işlemi 0x0000.0000 da olur da ondan . Boot işlemi sistemin çalışması için gerekli kodların okunduğu böllge mi oluyor?






yamak

1- Hayır.Flash rom'un adresi değişmez.Boot0 ve Boot1 e göre nerden boot edileceği seçiliyo.Örneğin USB,Uart,I2C vs..
2-Evet bizim yazdığımız kod flash rom'da tutulur.
3-Boot işlemi sonucunda Program Counter kodların bulunduğu bölgeye sıçrar ve yazdığımız program çalışmaya başlar.Eğer Kodlar dışarıdan okunuyosa USB,UART vs.İlk olarak okunur rom a yazılır ve rom'un ilk adresine gidilir.Eğer zaten flash'tan boot ediyosan bunlara gerek kalmaz direk flash'a sıçranır.

NOT:"Flash rom 0x0800.0000 adresinden 0x800.0??? (Daha sonra kesinleştireceğim) a kadar adreslerdeki veriler aynen 0x0000.0000 adresine yansır. Yani bu adres aralığındaki veriler birbirinin aynı olur" En başta böyle bir olay oluyo mu ondan pek emin değilim geçenlerde konusu tekrar geçmişti ama tam olarak netleştiremedik.Bana göre böyle bir olaya gerek yok ama yanılıyo da olabilirim.Bilen biri cevaplayabilirse güzel olur.

mho

#1179
Anladım teşekkürler açıklamalar için

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

Bu ifade de  ben kendim clock ayarlarını yaparken hiç aklıma gelmedi .

-6 Wait state olmasının anlamı nedir (yada başka seçenek)
- Bu tür  ayarlamaları nerden bileceğiz ? Diğer işlemcilerde de böyle birşey var mı

muhittin_kaplan

ARM larda var. İşlemcinin Hızıyla Alakalı, Hızlandıkca Bu değeri Yükseltmen gerekir.

mho

anladım teşekkürler hocam.
Datasheeten anladığım kadarıyla bu register yazdığımız kodu flash memory den çekip işleme mi sokuyor? doğru anlamışmıyım

yldzelektronik

Meraba,

Stm32f4 disco ile bir türlü yıldızımı tam barışmıyor.Bir dargın bir barışık durumdayız.

Ben kodumu yazıyorum, yüklüyorum (Ide yüzünden sadece debug ile yükleyebiliyorum) ama programım çalışmıyor.Halbu ki aynı programı daha önce çalıştırdım.

Bazen kit üzerindeki debuggera da erişim olmuyor.Ben de stlink utulity ile çipi komple sildim.Sonra ide ile debug yapabilmeye başladım.Ama programım yine çalışmıyor.Başka basit blinky projesini yüklüyorum çalışıyor.Benim yüklediğim çalışmıyor.

Acaba çipi silmekle hata mı yaptım?Çip üzerinde bootloader falan var mıydı?

Çip fabrika çıkışlı halde kit üzerinde iken bir boot loader vs yüklü mü geliyor?

Not: Kullandığım ide EmBlocks.

Bu arada Coide ile ne program yükleyebildim ne de debug yapabildim.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

sseedat

bootloader silinmiş olsaydı blinky programını nasıl yüklüyor ki?
Görünmez bir mezarlıktır Zaman...

yamak

Alıntı yapılan: yldzelektronik - 27 Haziran 2014, 08:37:07
Meraba,

Stm32f4 disco ile bir türlü yıldızımı tam barışmıyor.Bir dargın bir barışık durumdayız.

Ben kodumu yazıyorum, yüklüyorum (Ide yüzünden sadece debug ile yükleyebiliyorum) ama programım çalışmıyor.Halbu ki aynı programı daha önce çalıştırdım.

Bazen kit üzerindeki debuggera da erişim olmuyor.Ben de stlink utulity ile çipi komple sildim.Sonra ide ile debug yapabilmeye başladım.Ama programım yine çalışmıyor.Başka basit blinky projesini yüklüyorum çalışıyor.Benim yüklediğim çalışmıyor.

Acaba çipi silmekle hata mı yaptım?Çip üzerinde bootloader falan var mıydı?

Çip fabrika çıkışlı halde kit üzerinde iken bir boot loader vs yüklü mü geliyor?

Not: Kullandığım ide EmBlocks.

Bu arada Coide ile ne program yükleyebildim ne de debug yapabildim.
Bootloader bulundğu bölge ile flash memory ayrı yerler.Yani chip'i sildiğinde sadece flash memory'i silmiş oluyorsun.Bootloader'a hiçbişey olmuyo.