STM32F407 Cortex M4 şamataları

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

ErsinErce

Alıntı yapılan: taneryilmaz - 23 Ekim 2011, 02:16:55
@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
Çok faydalı olmuş @taneryilmaz çok uğraşmışsın anlaşılan, çok sağol...

mozkan87

Hocam ben gece while koşulu sağlanıyor dedim ama şimdi ayrıntılı olarak incelediğimde sağlanmadığını gördüm "HSERDY" ve "PLLRDY" bitleri set edilmiyor. Yani o nedenle sürekli burada takılı kalıyor. Dün gece while(1)'in başına break point koyunca sorunsuz çalıştı ama nedenini anlamaya çalışıyorum. Şu an tekrar takılmaya başladı.

stlg

Bunalmıs hocam

Bizde dersleri ilgiyle izliyor, anlamaya gayret ediyoruz ,ben daha once keil kullanmadım ,keil ile ilgili anlatımınızda , Debug.ini dosyasının olusturulmasından bahsetmissiniz, bunu beceremedim ,mumkunse yeniden anlatabilirmisiniz, tesekurler
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

yamak

@NaMcHo
Alıntı Yapbu satırı neden eklediğinizi kavrayamadım,
Bu satırın amacı pll kitlendiğinde bir sorun oluşup işlemeciye program yüklenemezse reset atılıp bu döngü esnasında program yüklenebilmesi için.Benim başıma geldiği için biliyorum. Ben de genelde kullanırım.Yani koruma amaçlı bi satır. İşlemci kodları çalıştırmaya başlar başlamaz her ihtimale karşı pll ayarlarının yapılmaması lazım.

stlg

Birde pll ayarlamalarımızı yaparken su sekilde hesaplamıssınız

//  8 Mhz Xtal OSC calisti ama biz hala 16Mhz RC Osc ile calisiyoruz.
//  Simdi de PLL katsayilarini ayarlayalim. M=8, N=336, P=2 ve Q=7 degerlerini ders notlarinda hesaplamistik.
//  Rehber Sayfa 95 de PLLCFGR register aciklamalarina gore yerlestirirsek

RCC->PLLCFGR = 0x07405408;
//  PLL calismaya baslasin  (Rehber Sayfa 95)

ben hesaplayınca  = 0x07425408 cıkıyor acaba yanlısmı hesaplıyorum 
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

mozkan87

Evet sizin hesaplamanızda hata var sizin hesaba göre baktığımız zaman 17. bitin 1 olması gerkiyor ama o zaman P=6 oluyor.

stlg

0000   0111  0100  0010  0101  0100  0000 1000

   0         7        4        2        5        4        0        8


burada p degeri 16. ve 17. bitler degilmi 
p=2 icin 17. bitin 2 olması gerkmezmi
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

z

Alıntı yapılan: stlg - 23 Ekim 2011, 12:38:33
....Debug.ini dosyasının olusturulmasından bahsetmissiniz, bunu beceremedim ,mumkunse yeniden anlatabilirmisiniz

Notepadde asagidaki satirlari yazip Debug.ini adiyla saklayin. (Yalniz Debug.ini.txt olmasin)

FUNC void Setup (void) {
SP = _RDWORD(0x08000000); // Setup Stack Pointer
PC = _RDWORD(0x08000004); // Setup Program Counter
xPSR = 0x01000000; // Set flag "T"
}
load %L incremental
MAP 0x00000000, 0x000000FF READ WRITE;
MAP 0x40000000, 0x400FFFFF READ WRITE;
_WDWORD(0x00000000,_RDWORD(0x08000000));
_WDWORD(0x00000004,_RDWORD(0x08000004));
Setup();
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mozkan87

Alıntı yapılan: stlg - 23 Ekim 2011, 14:01:39
0000   0111  0100  0010  0101  0100  0000 1000

   0         7        4        2        5        4        0        8


burada p degeri 16. ve 17. bitler değilmi 
p=2 icin 17. bitin 2 olması gerkmezmi

P'nin 2 olması için 00 olması gerektiği yazılmış rehberin 96. sayfasında.

stlg

ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

z

#205
for (i=0;i<0x00100000;i++);         // (Internal RC osc oturma ve kurtarma)

Alıntı Yapbu satırı neden eklediğinizi kavrayamadım,

while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin

Alıntı YapBurada stabil olana kadar zaten bekletiyoruz ekstradan başlangıçta bir beklemeye neden ihtiyaç duydunuz? 

while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin

Yukarıdaki yada benzeri bir şartı bekleyen rutinlerde, yazım yada mantık hatası yaptığımızı varsay. (Pekala çok basit, bir satırlık kod yazarken bile hata yapabiliriz.)

Karta voltaj verdiğinizde CPU hurra kosmaya baslar ve mikrosaniyeler içinde son derece hayati önemi olan SystemInit kodlarınızın içine dalar.
Eğer program geliştirme aşamasında çok tehlikeli hatalı kodlar yazdıysanız bunun sonucunda, Jtag portu gibi kritik portları yasaklamış olabilir, CPU'yu içinden çıkamayacağı sonsuz döngülere sokabilirsiniz.

Böyle durumlarda CPUnun elinden tutup düştüğü bataklıktan çıkartmak gerekir. Eğer JTAG portu devre dışı kaldıysa (Bu iki üç satırlık koda bakar) çip çöpe gidecek demektir.
(Yada özel yazılımları işletmek gerekir)

Yukarıdaki senaryo STM çipimiz için ne kadar geçerlidir bilemiyorum. Fakat TI çiplerde bu senaryo tamı tamına aynen yaşanabiliyor.

Bu nedenle en başa bir geçikme programı ekliyorum (Benim tercihim). Bu geçikme sayesinde CPU JTAG'ı iptal edecek yanlıs kodları işletemeden JTAG'dan müdahale edebiliyoruz.

En başa konan gecikme rutinini, tüm kodlarım mükemmel hale geldiğinde kaldırıp atıyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Ders notlarını sürekli olarak editleyeceğimi söylemiştim. Nitekim tek bir virgül için bile editliyorum.

Ancak ders notlarından alıntı yapıp şu an okuduğunuz başlık altına kopyalanan kodlar, editlenmiş son ders notunun daha önceki hali olabiliyor.

Örneğin ders notlarında daha önceleri hatalı olup daha sonra

  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


olarak düzelttiğim satırlar, buradaki tartışmalarda  hatalı haliyle alıntılanmış olabiliyor. (mozkan87 nin mesajı)

  RCC->PLLCFGR = 0x07405408;      // PLL katsayilarini M=8, N=336, P=4 ve Q=14 yapalim

Bu nedenle kafanız karışırsa ders notlarının güncel haline göz atmalısınız.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Saruman

Hocam notları PDF haline getirip yayınlasak?Ne düşünürsünüz bu konuda ?

z

İsteyen pdf hazırlasın fakat pdf, kurs bittiğinde hazırlanırsa daha az hatalı olacaktır.
Rehber ve Hard yetiyor zira pdflerden artık gına geldi.  :)




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

MC_Skywalker

ben hazırlıyorudum değişmeler olması nedeniyle ara verdim