STM32F4 Discovery yüklediğim programlar çalışmıyor

Başlatan Seferi, 27 Eylül 2012, 01:30:32

bilal0052

discovery kartına attığım programlar bendede çalışmıyordu. programı derliyor yüklüyor debug ediyor ama program bi türlü çalışmıyordu. stlink firmware güncellemesi yaptıktan sonra böyle oldu çözümü ise Green hocam önceki sayfalarda startup_stm32f4xx.s dosyası paylaşmıştı sürümü V1.0.0RC1 olan o dosyayı indirip C:\Keil\ARM\Startup\ST\STM32F4xx klasörünün içindeki ile değiştirdiğiniz zmn sorun çözülüyo  :)

pcb

arkadaşlar benim discovery yeni flash yükledi ve flash download failed cortex m4 yazıyor , sebebi ise yeni yazılan flash kod korumayı açarmış ve bu hata uyarısını alırmışız , kod korumayı bir şekilde kapatmak gerekiyor , nereden ve nasıl kapatılır acaba ?
"bilal0052" tavsiye ettiği Green hocanın verdiği STM32F4xx dosyasını değiştirdim ama fayda etmedi sonuç aynı

bilal0052

Alıntı yapılan: pcb - 28 Kasım 2012, 23:57:47
arkadaşlar benim discovery yeni flash yükledi ve flash download failed cortex m4 yazıyor , sebebi ise yeni yazılan flash kod korumayı açarmış ve bu hata uyarısını alırmışız , kod korumayı bir şekilde kapatmak gerekiyor , nereden ve nasıl kapatılır acaba ?
"bilal0052" tavsiye ettiği Green hocanın verdiği STM32F4xx dosyasını değiştirdim ama fayda etmedi sonuç aynı

bilgisayarına STM32 ST-LINK Utility programını yükle birde bu programla karta bağlanmayı dene cipin hafızasından program çekmeyi fln dene. aynı problem bendede vardı bu programla bir kere karta bağlandım sorun çözüldü .

kesta

main fonksiyonuna kadar adım adım debug yapabiliyorken, startup dosyasında main fonksiyonuna dallanma kısmına gelince "run" modunda debug yapmaya başlıyor. main fonksiyonu içindeki komutları adım adım debug yapmıyor. böyle bir sorunla karşılaşan var mı?
ZO

muhittin_kaplan

F11 ile her fonksiyonun içerisine girer
F10 ile her fonksiyonu -içeriğine girmeden- yapar
CTRL+F11 ile içerisinde debug yaptığınız fonksiyonu bitirir ve çıkar.

pcb

arkadaşlar "startup_stm32f4xx.s" dosyasını paylaşırmısınız benim kodlarda çalışmıyor

z

Alıntı yapılan: muhittin_kaplan - 17 Aralık 2012, 17:24:57
F11 ile her fonksiyonun içerisine girer
F10 ile her fonksiyonu -içeriğine girmeden- yapar
CTRL+F11 ile içerisinde debug yaptığınız fonksiyonu bitirir ve çıkar.

F10 bahsettiğin gibi olursa programın akışı bozulur.

Emin değilim, akşam deneyebilirim ancak. F10 a basınca içinde bulunulan fonksiyonun tüm komutları işlenir ve fonksiyondan çıkılır.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

AYnı Şeyden Bahsediyoruz. İçeriğini Görmeden Fonksiyonu Yap Ve Gel.

iruraz

Herkese Merhaba,

Kart üzerinde @z hocamın örnekleri üzerinde çalışıyorum ama debug yaparken kod startup dosyası içinde "reset handler" kısmında takılı kalıyor, programın içine girmiyor. "Options For Target" ayarlarını anlatıldığı gibi yapıyorum. Hatta "Floating Point Hardware" tarafını her iki seçenekle de denedim (used ve not used olarak). Keil 'in kendi örneğinde çalıştırdığımda sorun çıkmıyor ve buradaki startup dosyasını kendi projemde kullandığımda sorun yine çözülmedi.

@GreeN  V1.0.0RC1 sürümlü startup dosyası ile çalıştığını söylemiş. Elinde bu dosya bulunan var mı acaba? Kullanıdım sürüm 4.7 ve 32k sınırlı.

Örnek Kod :
#include "STM32F4xx.h"
 
void SystemInit()
{
    RCC->AHB1ENR|=0x00000008;    // GPIOD donaniminin clock sinyalini uygulayalim
    GPIOD->MODER=0x55000000;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (Ledler bu pinlerde)
    GPIOD->OSPEEDR= 0xFFFFFFFF; // GPIOD nin tum cikislari en yuksek hizda kullanacagiz 
} 

void Delay()
{
unsigned int i;
 
     for(i=0;i<0x800000;i++); 
}

int main()
{
    while(1)
   {
     GPIOD->ODR= 0x0000F000;     // Ledler yansin
		 Delay();
     GPIOD->ODR= 0x00000000;     // Ledler sonsun
		 Delay();
   } 
}


Debug startup dosyasında BX 'in olduğu satırda takılı kalıyor.
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

iruraz

Reset_Handler kısmını değiştirdiğimde sorun çözüldü şu an normal bir şekilde debug yapabiliyorum.

Eski Reset_Handler :
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP


Yeni Reset_Handler :
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main
 
                 ;FPU settings
                 LDR     R0, =0xE000ED88           ; Enable CP10,CP11
                 LDR     R1,[R0]
                 ORR     R1,R1,#(0xF << 20)
                 STR     R1,[R0]
 
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP


Sorunun nasıl çözüldüğünü yeterince teknik bilgim olmadığı için açıklayamıyorum; ancak isteyen arkadaşlar aşağıdaki bağlantıdan da çözümü inceleyebilirler.

https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2FSTM32Discovery%2Fstm32f4%20random%20hard%20faults%20(solved)&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F&currentviews=1320