32F4 Discovery Bğlantı Hatası Ve Çözümü

Başlatan muhittin_kaplan, 09 Ocak 2012, 15:29:51

muhittin_kaplan

Neden Bilmiyorum. Bunalmış Hocanın Buton Örneğinden Yola Çıkarak
#include "STM32F4xx.h"

void 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 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;        // Flash ROM icin 5 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 
    GPIOA->MODER = 0x00000000;     // GPIOA Giriş
} 

int main()
{
int A;
    while(1)
      {
         if (GPIOA->IDR & 0x000000001) 
           {  
             A++;
             GPIOD->ODR= 0x00000000&(A<<12);     // Ledler yansin
            {
      } 
}
// Programın sonu.


Yazdım Derledim Gönderdim. Sonrasında Kartı Denediğimde Bağlantının Çalışmadığını Gördüm.
Tabi Tutuştum :D
Diğer Kart Normal Çalışıyordu. Bende Ya Allah Diyerek STM32 ST-LINK UTIL ile
Kartın üzerindeki RESET e Basılı Tutarak Connect dedim ce Reset i bıraktım. Bağlandı. Henem  Full Erase Yaptım.
Şu An bir Sıkıntı Yok. Sebebi hakkında Yorumu Olan :)

Elektroemre

Hocam,

main içerisinde;
SystemInit()


fonksiyonunu çağırmamışsın. Doğal olarak oradaki kurtarma için belli bir delay süreside işlememiş. Sebebi bu olabilir.

muhittin_kaplan

SystemInit()
i nereden çağırmam gerekiyor.

Elektroemre

SystemInit() eğer startup dosyası içerisinde çağrılmıyorsa, main de başlar da bir yerlerde çağrılmalı. Bir sürü konfigurasyon yapılmış orada, ki hepsi gerekli .

SERRO EFE

Hocam main içersinde port vs. tanımlamaları yapmadan önce mcuyu biraz bekletirseniz bu tür problemler olmayacaktır.

muhittin_kaplan

GPIOA->MODER = 0x00000000;     // GPIOA Giriş

dan kaynaklanıyor. Neden ?

SERRO EFE

#6
Hocam swd pinleri eğer porta ile ilişkili ise siz swd yi kontrol etmesine fırsat kalmadan giriş olarak yönlendiriyorsunuz. O tanımlamayı yapmadan önce gecikme koyarsanız problem kalmaz. Başıma gelmişti benimde

not;
Porta.13-Porta.14 swd pinlerine bağlı

muhittin_kaplan

Anladım. yanlız PortA yı giriş yada çıkış yapan MODER in Reset value değeri 0. yani resetlediğimde de 00 oluyor yani giriş

ErsinErce

A13 14 15 pinleri alternatif (0b10) modda oluyor, reference manualden reset value değerine bakarsanız 0xA8000000 değerini göreceksiniz

muhittin_kaplan

Evet PortA ve PortB farklıymış. Resetlenince Hepsi Sıfır Olmuyormuş Demekki  :-[