STM32F4 Discovery - Vizeler

Başlatan bunalmis, 24 Aralık 2011, 15:13:13

M_B

Bunalmıs Hocam;
Keilin Toolbarinda Derleme sırasında  Load ikonu var onu tıkladıgımda
Load "C:\\Documents and Settings\\TI\\Desktop\\Deneme\\Deneme.AXF"

gibi mesaj cıkıyor. Kit uzerindeki Resete bastıgımda veya USB baglantısını cıkarıp taktıgımda kite yuklenen program calısmıyor.

Yalnız Derlemeden sonra
CTRL + F5 yaparsam debug moduna giriyoriyor. Adım adım calıstırdıgımda calısıyor veya Debug moddan cıkınca program atılmıs oluyor.
Debug moduna girmeden program atamıyormuyuz.

Teşekkürler

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

ErsinErce

7. soru ile ilgilenen pek yok galiba =)
yarın kartımı bitirir bitirmez kolları sıvıyorum hocam merak etmeyin  :)

muhittin_kaplan


fryrmnd

keil de debug etmeden program atılmıyor. st nin sitesinde stlink utility var onu kullanabilirsiniz.

ersin hocam daha 6 yı yapamadım  ;D. nerden çıktı 7.

muhittin_kaplan

Timer1 Zamanlaması Nasıl Yapılıyor ?

fryrmnd

zamanlaması derken hocam. belli sürese sonunda kesme almak için gibi mi sordunuz.

muhittin_kaplan

Bunalmı Hoca Timer7 ile yaıp Bunu Timer 1 ile sormuştu. yaptım ama bir türlü zamanlamayı tutturamadım.

fryrmnd

hocam hızlı mı yanıyor ledler.

muhittin_kaplan


fryrmnd

hocam prescaler ve auto reload register yüklemesinde sıkıntı olabilir. yazarsanız kodları bakabilirim belki bulurum sıkıntıyı.

muhittin_kaplan

Kodları vereyim yanlız Amacım Bir Standart Oluşturmak. Yani Timer lar nasıl ayarlanır.
#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 
} 

int main()
{
    RCC->APB2ENR|=0x00000001; // Timer1 CLK'u aktif edelim (84 Mhz)
    TIM1->CR1=0x0080;              // Otomatik Reload
    TIM1->PSC =42000-1;           // Prescaler değerimiz 42000, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 42E6 / (42000) = 1000 Hz
    TIM1->ARR =2000;                // Counter, Decimal 2000 olunca basa donsun 1 sn demek
    TIM1->CR1|=0x0001;            // Counter Enable
 
    while(1)
      {
         if (TIM1->CNT > 1000) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                            // Ledler sonsun
      } 
}
// Programin sonu

fryrmnd

#161
#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 
} 

int main()
{
    RCC->APB2ENR|=0x00000001; // Timer1 CLK'u aktif edelim (84 Mhz)
    TIM1->CR1=0x0080;              // Otomatik Reload
    TIM1->PSC =42000-1;           // Prescaler değerimiz 42000, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 84E6 / (42000) = 4000 Hz
    TIM1->ARR =4000;                // Counter, Decimal 2000 olunca basa donsun 1 sn demek
    TIM1->CR1|=0x0001;            // Counter Enable
 
    while(1)
      {
         if (TIM1->CNT > 2000) GPIOD->ODR= 0x0000F000;     // Ledler yansin
         else GPIOD->ODR= 0x00000000;                            // Ledler sonsun
      } 
}
// Programin sonu


hocam birde böyle deneyin. prescaler ve arr hesaplamalarınızda yanlışık var.

şöyle ek yapayım. hocam sanırım timerların hepsinde clock aktif etme, otomatik reload,counter enable vs sabit var. sadece timer clock frekansı ne. timer 1 apb2(84) den aldığı için  84x2Mhz oluyor. 42000 prescaler verirsek. 4000 hz ediyor.bu yüzden otomatik reload 4000 verirsek 1sn debir yanıp söner. tabii if bloğunun içinde 2000 değeriverice ki saniyenin yarısı sönsün yarısında yansın

fryrmnd


muhittin_kaplan

Tamam 48Mhz olan hat (timer7 nin) 84 de bu ise 168 de çalışıyor.
bu arada Herşyin bir zamanı var yavaş yavaş gidelim.
Yanlız Şu "Camış" işine girmek gerek.

muhittin_kaplan