StdPeriph Kütüphanesi sorunu

Başlatan brlesc, 06 Ağustos 2012, 11:26:49

brlesc

Kolay gelsin arkadaşlar
ARM öğrenmeye yeni başladım. Forumdaki örnekler den yaralanarak bi kaç bişey yaptım fakat bunlar registerlara erişerek di.
st nin StdPeriph kütüphanelerini kullanmak istiyorum fakat ne yaptı isem  keil ile bu dosyaları kullanamadım forumdaki küçük bir led uygulamasını derleyemedim.. Kaç gündür uğraşıyorum bi türlü yapamadım.Bu konu da yardımcı olabilirmisiniz..
keil 4.54  ve  STM32F4 DISCOVERY kullanıyorum
edeb ya hu...

JKramer

Bu bölümde muuzoo'nun açtığı "STM32F4 Discovery Maceraları" isimli başlıkları incelediniz mi?

brlesc

evet inceledim yazılanları uyguladım ama hala hatalar veriyor derleyici. dosyaları kopyalamadığım yer kalmadı derleyiciden de dosyarın yerlerini gösteriyorum ama nerde hata yapıyorum bulamadım
edeb ya hu...

memo333

ne hataları veriyor? bir scrennshot alırsanız bakalım
Gömülü Linux Notları --> http://linuxedu.xyz/

brlesc

tüm .h dosyalarını proje dosyalarının yanına kopyaladım ve derleyicidende h dosyasını yerini gösterdim. en son şu hatayı aldım yani linking yaparken oluyor:

Build target 'Target 1'
linking...
led.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f4xx.o).
Target not created
edeb ya hu...

memo333

.c dosyalarını göstermemişsiniz...
Gömülü Linux Notları --> http://linuxedu.xyz/

brlesc

Ben size yaptıkarımı söyle sıralayayım:
1)stm32f4_dsp_stdperiph_lib  dosyasını indirdim
2)indirdiğimi rar dosyasından cıkarıp tamamen C:\ dizinine kopyaladım
3)indirdiğim dosyanın içinde  yani  "C:\stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.0.1\Libraries\STM32F4xx_StdPeriph_Driver\" icinde inc ve src klasörleri var bunları da keil de :
Flash -> Configure Flash Tools...-> C/C++ sekmesinde "include paths" bölümünden ayrı ayrı inc ve src klasörlerinin yerlerini gösterdim
bu sekilde denedim olmadı... src ve inc klasörünün içindekilerinin tümünü proje dosyalarının yanına kopyaldım keilden dosyaların yerini proje dosyaları klasörünü gösterdim yine olmadı..
yine forum da araştırırken "Flash -> Configure Flash Tools...-> C/C++" sekmesinde
Preprocessor Symbols bölümünde "Define" alanına 'STM32F4XX, USE_STDPERIPH_DRIVER'  yazıldığını gördüm bunları da denedim ama pek bi sey değişmedi..
sorun nedir anlamış değilim hala..
edeb ya hu...

Klein

Alıntı yapılan: brlesc - 06 Ağustos 2012, 14:32:32
tüm .h dosyalarını proje dosyalarının yanına kopyaladım ve derleyicidende h dosyasını yerini gösterdim. en son şu hatayı aldım yani linking yaparken oluyor:

Build target 'Target 1'
linking...
led.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f4xx.o).
Target not created

Diğer sorunlara gelmeden önce bu hatayı çözmelisin. Bu hatanın sebebi  programında "SystemInit()" rutininin olmaması.
Startup başlık dosyasında aşağıdaki gibi bir düzenleme var.  Denetleyici resetlendiğinde  birkaç register ayarı yapıyor. Sınra  SystmInit rutinini çağırıyor. Bu rutin sistemde ilk yapılacak ayarları içerir. Eğer ayarları bu rutin içerisinde yapmayacaksanız

main.c dosyanıza 

void SystemInit(){}; 
{

bu şekilde bir ekleme ayaparsanız bu hatayı almazsınız.

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

memo333

#8
adım 2.5) ...\Libraries\CMSIS\ST\STM32F4xx\Source\Templates\arm içindeki startup_stm32f4xx.s dosyasını keil çalışma ortamınıza ekleyin. (include değil)

adım 2.6) ...\Libraries\CMSIS\ST\STM32F4xx\Source\Templates içindeki system_stm32f4xx.c dosyasını keil çalışma ortamınıza ekleyin (include değil)

adım 2.7) ...\Libraries\CMSIS\ST\STM32F4xx\Include Keil'e include olarak gösterin.
Gömülü Linux Notları --> http://linuxedu.xyz/

brlesc

#9
Yardımlarınız için çok teşekkür ederim.. kaç gündür uğraşıyordum... Söylediğiniz gibi  SystemInit() rutinini main.c ye eklediğimde sorunsuz bi şekilde derlendi progam..
Bu hazır kütüphaner içinde SystemInit() rutini cekirdek hizlarını falan kendi ayarlıyordur diye tekrar yazmayı hiç düsünmemistim..
çok uğraştırdım sizi ama peki bu rutinin içini bos bırakarak derledim bu hali ile daha önce registerlerda kayıtlı olan sistem ayarları ile mi calışıyor işlemci.. main.c icinde  sadece GPIOD için ayarlamalar yapılmış.
edeb ya hu...

memo333

rica etsem proje ağacının resmini çekip yükleyebilir misiniz? hangi dosyaları yüklediniz merak ettim?
Gömülü Linux Notları --> http://linuxedu.xyz/

fatih6761

Burada \Libraries\CMSIS\ST\STM32F4xx\Source\Templates\arm içindeki startup_stm32f4xx.s dosyasını değil
\Keil\ARM\Startup\ST\STM32F4xx\startup_stm32f4xx.s dosyasını kullanın...

brlesc

#12
söylediğiniz halde derledim şu hali ile tüm h dosyalarını kendisi projeye dahil etti..

daha uygun yapılacak yöntemler varsa uygularım yardımlarınız için çok teşekkür ederim.

C/C++ bölümünde define alanından "STM32F4XX, USE_STDPERIPH_DRIVER" ifadesini sildiğimde kullanılmayan coğu h dosyasını derleyici otomatik cıkardı. fakat bu sekilde derlenmiyor.. bu ifadeyi yazdığımda resimde görüldüğü gibi ne var ne yok hepsini kendisi ekliyor...
startup dosyası ise daha önce forumdaki örneklerin birinden bulduğum startup  dosyasını kullanmıştım  orijinal olanla derleyememiştim.. söyldeğiniz startu dosyasını kullanarak bu hali ile derlendi..

cok karıştırdı bu iş kafamı benim resmen  rasgele yapıyorum bu dosyalarım yerlerini değiştirmeyi falan. hangisinde hata vermezse öyle bırakıyorum :)
edeb ya hu...

memo333

soru 1) *.s dosyasını kendiniz mi eklediniz?

soru 2) Benim yazdığım gibi ST'den indirdiğiniz *.h ve *.s dosyalarını kullandınız? yoksa Keil'in Bulmasına mı izin verdiniz?

ayrıca stm32f4xx_conf.h dosyasından istediğiniz kütüphanenin *.h dosyasını çıkarabilirsiniz(sonra da *.c dosyasını tabii).

 
Gömülü Linux Notları --> http://linuxedu.xyz/

brlesc

siz cevaplamadan önce forumda bulduğum örneklerin birinden bir .s dosyası bulmuştum  cok az bir değişiklik yapılmıştı... register düzeyinde örnekler yaparken bu .s dosyasını kendim ekleyerek derleyip çalıştırıyordum keilin kendisinin eklediği  .s dosyası ile derlediğimde hata veriyordu.. stdperiph kütüphanesini kullanmaya çalışırkende bu  startup dosyasını kullanmıştım sizin söylediğiniz üzere indirdiğim dosyalar içinde ki startup dosyalarını kullandım.. bu dosyalar ile de düzgünce sorunsuz derlendi... peki hocam bu kullanılmayan h dosyalarını neden projeye dahil ediyor keil bilginiz varmı 
edeb ya hu...