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 :)
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.
SystemInit()
i nereden çağırmam gerekiyor.
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 .
Hocam main içersinde port vs. tanımlamaları yapmadan önce mcuyu biraz bekletirseniz bu tür problemler olmayacaktır.
GPIOA->MODER = 0x00000000; // GPIOA Giriş
dan kaynaklanıyor. Neden ?
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ı
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ş
A13 14 15 pinleri alternatif (0b10) modda oluyor, reference manualden reset value değerine bakarsanız 0xA8000000 değerini göreceksiniz
Evet PortA ve PortB farklıymış. Resetlenince Hepsi Sıfır Olmuyormuş Demekki :-[