Keil programının kurulumu ve kullanılması

Başlatan bunalmis, 12 Ekim 2011, 02:44:03

z

12 Ekim 2011, 02:44:03 Son düzenlenme: 23 Ekim 2011, 17:43:18 bunalmis
Bu başlık altındaki konular, soru cevap şeklinde https://www.picproje.org/index.php/topic,35780.0.html başlığında ele alınmaktadır.

ARM işlemcilere program yazmak, derlemek, derlenmiş kodları çipe aktarmak, çipteki yazılımı koşturmak ve yazdığımız kodlardaki hataları ayıklamak için Keil programı kullanacağız.

Keil profesyonel ve pahalı bir yazılımdır. Ancak 32 KByte uzunluğa kadar deneme amaçlı program yazımına imkan tanıyan ücretsiz sürümü http://www.keil.com/ sitesinden indirip kurabilir ve güncellemeleri takip ederek deneme sürümünüzü güncel tutabilirsiniz.

https://www.keil.com/arm/demo/eval/arm.htm adresini tıklayarak karşınıza gelen tabloyu doldurup yollayın. Bu  işlem ardından kurulum dosyasını bilgisayarınıza indirin ve kurulumu başlatın.



Kurulum biraz zaman alıyor. Kurulum bittikten sonra;

Bu linki   tıklayarak ST-Link Windows Xp driveri yükleyin.

Zıpı açın ve içinden çıkan ST-Link_USBdriver.exe yi çalıştırın.

Kartınızı debug tarafındaki usb konnektörden (CN1) PCye bağladığınızda PC yeni cihaz buldum diyecek ve surucuyu yükleyecektir. Tüm bu işlemlerin bitiminde Device Maneger'de  STMicroelektronics STLink Dongle'ı görmeniz gerekiyor.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

15 Ekim 2011, 17:00:18 #1 Son düzenlenme: 15 Ekim 2011, 17:36:26 bunalmis
Keil'i kurcalamak

Öncelikli önerim, C:\Keil\ARM\Boards\ST  klasörü altındaki STM32F4-Discovery klasörünün copy paste ile bir örneğini Desktopda oluşturun ve
Desktoptaki bu klasöre 1-MyBoard ismini verin.

Denemelerimizi 1-MyBoard klasöründe yapalım. Böylece elimizde STM32F4-Discovery klasörünün orjinal hali kalsın.

Keil'i kurduğunuzda masaüstünde Keil iconu oluşacaktır.



Yukarıdaki iconu tıkladığınızda keil çalışacak ve ekrana, keilde en son çalışılan proje gelecektir. (Yeni kurulumdan hemen sonra bile ekrana bir proje gelebilir)

Bu projeyi kapatın. (Proje-> Close Project)

Hazırda oluşturulmuş projelerden birisini açmak (Örnek olarak, orjinal adı STM32F4-Discovery olan ancak desktopa 1-MyBoard olarak kopyasını aldığımız klasördeki Blinky projesini açalım)

Proje-> Open Project..

Dosya olarakDesktoptaki 1-MyBoard ı tıklayın. Karşınıza gelen klasör seçeneklerinden Blinky klasörünü tıklayıp ardından da bunun içindeki Blinky.uvproj dosyasını tıklayın.

Yeni bir proje oluşturmak

Ekranda varsa açık görülen projeyi kapatın. (Proje-> Close Project)

Amacımız, Desktopda Deneme adında bir proje oluşturmak olsun.

Bunun için öncelikle Desktopta Deneme adında boş bir klasör oluşturun.

Proje-> New uVision Project...

Ekrana gelen menuden hedefimizi Desktopta açtığımız Deneme klasörü olarak seçin.
File name olarak Deneme yazıp Save tuşuna basın.

Select Device For Target 'Target 1...' menüsünde Keil, bize hangi işlemci ile çalışacağımızı soruyor.

Düşey kaydırma çubuğundan STMicroelektronics i bulup bunun içinden STM32F407VG çipini seçin.

Karşımıza gelen Yes No cevabı bekleyen kutucuk bize, seçtiğiniz bu çiple ilgili olarak Startup kodunu proje klasörünüze ekleyeyimmi diye soruyor.

Yes cevabını verin.

Bu cevap ardından Keil artık bize boş bir proje oluşturacaktır.

Şu anda Keil bizim STM32F407VG çipiyle çalıcağımızı biliyor.

Sol üst köşedeki Target1 in solundaki + kutucuğunu tıklayın. Bunun altındaki Source Group 1 i de tıklayın.

File->New den boş bir dosya oluşturup bunun içine


void SystemInit()
{
}

int main()
{
     return(0);
}


En son satıra gelip fazladan bir iki kere enterle boş satır oluşturun. Ardından File->Save den
karsınıza gelen Save kutusunda her ihtimale karşı hedef klasörün Deneme olduğunu kontrol edin.

Ardından da File Name kısmına main.c yazıp entere basın.

Böylece örnek C kodlarımızı yazacağımız C çalışma dosyamızı oluşturmuş olduk.
Şimdi bu dosyayı projeye dahil edelim.

Bunun için Sol üst köşedeki (Project çerçevesinin içindeki)  Target1 altındaki Source Group 1 i çift tıklayın ve karşınıza gelen dosya seçim menüsünden main.c yi çift tıklayın. Bu işlem, Source Group altında startup_stm32f4xx.s in hemen altına main.c nin de katılmasını sağlayacaktır.

(startup_stm32f4xx.s dosyası, ilk başlarda Keil, startup kodunu ekleyeyimmi demişti ve bizde evet ekle demiştik ya, işte bu nedenle bu dosya buraya kendiliğinden geldi)

Artık karşımızdaki menüyü close ile kapatabiliriz.

Şu anda içi doldurulmaya hazır boş bir projemiz oluştu.

F7 tuşuna bastığınızda derleme işlemi başlayacak ve

Ekranın en altındaki Build Output çerçevesinde aşağıdaki mesajı görmelisiniz.

Build target 'Target 1'
assembling startup_stm32f4xx.s...
compiling main.c...
linking...
Program Size: Code=344 RO-data=408 RW-data=0 ZI-data=1632 
"Deneme.axf" - 0 Error(s), 0 Warning(s).
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

15 Ekim 2011, 18:35:36 #2 Son düzenlenme: 21 Aralık 2011, 20:45:09 bunalmis
Öncelikle;

Aşağıdaki kodları Notepadde yazıp Debug.ini adıyla Deneme klasörünüzün içine yazın. (Dosya adının, Debug.ini.txt değil Debug.ini olduğundan emin olun)

Debug.ini dosyası, kartlarımız gelene kadar, kartsız çalışabilmek adına gerekiyor.

FUNC void Setup (void) {
SP = _RDWORD(0x08000000); // Setup Stack Pointer
PC = _RDWORD(0x08000004); // Setup Program Counter
xPSR = 0x01000000; // Set flag "T"
}
load %L incremental
MAP 0x00000000, 0x000000FF READ WRITE;
MAP 0x40000000, 0x400FFFFF READ WRITE;
_WDWORD(0x00000000,_RDWORD(0x08000000));
_WDWORD(0x00000004,_RDWORD(0x08000004));
Setup();


Derlenen programın debug edilmesi

Programınızı derledikten sonra kodları kartımıza yükleyebilir yada PC'de sanal olarak işlettirebiliriz.

Programın karta yüklenerekmi çalıştırılacağını yoksa PC de simülasyon yapılarakmı çalıştırılacağını şu şekilde belirliyoruz.

Soldaki Project çerçevesinde Target1 i tıklayıp boyalı kalmasını sağlayın.

Project-> Option for Target 'Target1'

Karşınıza gelen menüde üstteki butonlardan Debug tuşuna basın.

Sol üstteki Use Simulator ü seçerseniz kartsız çalışırsınız.

Sağ hizasında ise Use göreceksiniz. Burada Use secer ve hemen sağındaki kutuda ST-Link Debugger seçerseniz STM32F kartını kullanacağız ve kodlar gerçek donanımda denenecek demektir.




Option for target da hem debug hem de utilities menülerinde ST-Link Debugger seçmeniz gerekiyor.

İlk aşamada kodlarımızı Simulatörde koşturalım. O zaman ayarlarınız aynen yukarıdaki gibi olacak.

Yukarıdaki resimlerde Initialization File kısmında görülen Debug.ini için ... butonuna basın. (Edit butonunun hemen solunda)

Debug.ini yi seçin Open butonuna basın ve OK ile çıkın.

Kart ile (Donanım üzerinde) çalışmak

Eğer kodlarımızı simulatör yerine kart üzerinde koşturacaksak, kodları karta aktarabilmek için debuggerın aşağıdaki resimde olduğu gibi ST-Link ve settingsde SWD seçili olması gerekmektedir.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

15 Ekim 2011, 22:24:25 #3 Son düzenlenme: 16 Ekim 2011, 06:23:29 bunalmis
Öğrendiklerizle bir örnek yapalım.

Desktop altında içi boş Deneme klasörü oluşturun.

Bu klasör içine ST32F407VG çipi kullanılmak üzere, Deneme adında Keil projesi oluşturun.

main.c adında boş dosya oluşturun ve bu C dosyasını projeye dahil edin.

Aşağıdaki resimde görülen C kodlarını main.c içine yazın.



Kırmızı okla gösterilen 1 nolu butona yada F7 tuşuna basın.  (Bu, yazılan C kodlarını ve projeye dahil olan startup ve benzeri kodları derler)

Derleme sonunda Build Output penceresinde Kırmızı okla gösterilmiş 2 yazan satırda

"Deneme.axf" - 0 Error (s), 0 Warning (s). olduğunu görün.

Ara çalışma olarak

void SystemInit() yerine void systemInit() yada void SYstemInit() init yazın ardından F7 tuşuna basın.
Build Output penceresinde oluşan hata mesajına dikkat edin.

Ardından hatayı yokedin ve

int SystemInit()
{
}

olarak değiştirin ve tekrar F7 ile programınızı derlemeye çalışın.

3 ve 4 nolu kırmızı oklarla gösterilen bölgeleri tıklayarak startup ve C kodları arasında geçiş yapın.

Son olarak  F7 ye bastığınızda

"Deneme.axf" - 0 Error (s), 0 Warning (s). olduğunu gördükten sonra resimde 5 numaralı kırmızı okla gösterilen Debug butonuna basın.

Bu işlem ardından derlenmiş kodlarınız DEBUG edilmeye hazır demektir ve ekranda debug penceresi açılacaktır.

Debug butonuna bastiginizda hata mesaji aldiysaniz Debug opsiyonu için Debug penceresinde Simülatörü değil ST-Link'i seçmiş olabilirsiniz. Bu konu, üstteki mesajlarda
Derlenen programın debug edilmesi başlığında anlatılmıştı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

15 Ekim 2011, 23:30:15 #4 Son düzenlenme: 16 Ekim 2011, 21:36:32 bunalmis
Debug penceresinde işlemler

Bir önceki konumuzun en son satırında Debug işlemini başlatmıştık. Bu işlemle birlikte ekrana aşağıdaki debug ekran görüntüsü gelecektir.



Üstteki, Disassembly ve soldaki Registers pencereleri ile işimiz olmayacağı için kapatarak ekranda yer açabilirsiniz.

Değişken değerlerini gözetleme - Watch windows

Yukarıdaki programımızda mouse ile b değişkeninin üstüne gelip sağ click yapın.

add "b" to seçeneğine gelip Watch 1 tıklayın.

Watch 1 windowa bakın ve b nin bu gruba dahil olduğunu görün. Watch 1 penceresinde b değişkeninin üstüne gelip sağ click yapın ve gelen menüde Hexadecimal segmesini kaldırın (b değişkenini decimal izleyin) yeniden segmeyi koyup değişkeni hex olarak görün yada b değişkenini Remove watch "b" ile izlemekten vazgeçin.

Watch Penceresini yada bir başka pencereyi yanlışlıkla kaldırırsanız geri getirmek

En tepedeki View menüden istediğiniz pencereyi tekrardan görünür yapabilirsiniz.

Örneğin Watch 1 penceresini, pencerenin hemen üstündeki X ile kapatın.

View-> Watch vindows -> Watch1 ile tekrardan ekrana getirin.

Breakpoint koymak

Bir programın istenen bir yerde durması için Breakpointlerden yararlanırız. Program, Run edilirse kod işletimi breakpoint koyduğumuz satıra kadar son hızla devam eder ve breakpoint satırında durur.

Bunun için, Breakpoint koymak istediğiniz satırının solundaki satır numarasını çift tıklayarak burada kırmızı bir kutu oluşmasını sağlayın. Bu, bu satıra breakpoint kondu anlamına gelir. Aynı yeri bir kez daha çift tıklarsak breakpoint kalkar.

Artık Debug modunda çalışabiliriz.

Debug penceresinde;

Watch 1 penceresi yoksa ekranda görünmesini sağlayın.

a ve b değişkenlerini Watch 1 penceresine atın ve Decimal görünecek şekilde ayarlayın.

Reset butonuna basın.

C programın main fonksiyonunun ilk komut satırının üstüne (b=20; satırına) breakpoint koyun.

Run butonuna ya da F5 tuşuna basın. Programınızın stratup kodları işlenecek ve Debugger, C de breakpoint koyduğumuz satırda bizi bekleyecektir.

Şimdi F11 tuşu ile kodları adım adım yürütün. Bu esnada Watch 1 penceresindeki a ve b değişkenlerinin almış oldukları değerleri gözleyin.

Programı Stop butonu ile durdurun. Debug dan çıkış butonuna basın ve editör moduna geri gelin.

Önemli Not: Debug penceresinde kodlarınız koşarken, Stop yada Reset butonuna basmadan debug modundan çıkmaya kalkarsanız, bazen Keil donabilmektedir. Eğer  kodlarda yaptığınız her değişikliği save etmediyseniz, değişiklikleri yeniden yazma durumunda kalırsınız.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Gerçek donanım üzerinde Debug işlemleri

Kartlarımız geldikten sonra USB baglantısını yapıp demoyu izledikten sonra artık deneme kodlarını yazmaya başlayabiliriz.
Kitimizde çalıştırılabilecek en basit deneme programının kodları aşagıdadır.

Öncelikle önceki konularda anlatıldığı gibi, simülatör yerine ST-Link ile çalışacak çekilde Debug ayarlarını yapın.
ST-Link sürücüsünü yüklemediyseniz yükleyin. (Önceki konularda anlatılmıştı)

Aşağıda verilen kodları yazıp F7 ile derleyin. (0 hata ve 0 uyarı ile derleme gerçekleşmelidir.)
Debug  tuşuna basın.
Reset tuşuna basın.
main programımızda while(1) satırına breakpoint  koyun.
F5 ile kodları koşturun ve while satırında programın durduğunu görün.

F11 e tek tek basın ve ledleri gözleyin.

// ----------------------------------

#include "STM32F4xx.h"

void SystemInit()
{
    (*((int*)0xE000ED88))|=0x0F00000;  // Floating Point donanımını aktifleştir. !!! Başımızın derdi !!!
    RCC->AHB1ENR |= 0x00000008;        // GPIOD donanımının clock sinyalini uygulayalım
    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
}

int main()
{
    while(1)
   {
     GPIOD->ODR= 0x0000F000;     // Ledler yansin
     GPIOD->ODR= 0x00000000;     // Ledler sonsun
   }
}
//-----------------------------------------------------
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.