Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Mikrodenetleyici Projeleri/

STM32F429I-Discovery’ye Keil ile Sıfırdan Proje Oluşturma

Sponsorlu Bağlantılar

Merhaba Arkadaşlar,

Bu yazımda STM32F429I-Discovery’ye sıfırdan proje oluşturma konusuna değineceğim. Adım adım resimlerle anlatacağım. Bu kart ile ilk kez uğraşacaklar için yön verici nitelikte olur diye düşünüyorum.

STM32F429I Discovery ST’nin F4 serisi için STM32F4-Discovery kartından sonra çıkarttığı en son kartı. Bir önceki F4-Discovery’ye göre daha iyi bir işlemciye ve en iyisi harici 8Mbyte SDram ve 2.8″ 320×240 çözünürlüğe sahip bir dokunmatik lcd barındırmakta. Ayrıca kart üzerinde yine ST’nin L3GD20 3 eksen Gyro var. İleriki zamanlarda bu çipin kullanımına da değineceğim.

STM32F4’de STM32F407VGT6 mikroişlemcisi bulunmaktayken STM32F429’da ise STM32F429ZIT6 mikroişlemci var. 144 Pinli olan bu mcu 180Mhz gibi hatrı sayılır bir hızda çalışmakta.

Kartı Türkiyede Çizgi Tagem vasıtasıyla temin edebilirsiniz. Fiyatı 35$ civarı. Açıkçası fiyat performans açısından gerçekten mükemmel bir kit.

Kartımız işte budur :)

STM32F429I Discovery Kit

stm32f4de-stm32f407vgt6-mikroislemcisi

Kartın özellikleri aşağıdaki gibi.

STM32F429ZIT6 microcontroller featuring 2 MB of Flash memory, 256 KB of RAM in an LQFP144 package
On-board ST-LINK/V2 with selection mode switch to use the kit as a standalone
ST-LINK/V2 (with SWD connector for programming and debugging)
Board power supply: through the USB bus or from an external 3 V or 5 V supply voltage
2.4″ QVGA TFT LCD
SDRAM 64 Mbits
L3GD20, ST MEMS motion sensor, 3-axis digital output gyroscope
Six LEDs:
LD1 (red/green) for USB communication
LD2 (red) for 3.3 V power-on
Two user LEDs:LD3 (green), LD4 (red)
Two USB OTG LEDs:LD5 (green) VBUS and LD6 (red) OC (over-current)
Two pushbuttons (user and reset)
USB OTG with micro-AB connector
Extension header for LQFP144 I/Os for a quick connection to the prototyping board and an easy probing

Kaynak : http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1848/PF259090

Şimdi Proje oluşturmaya başlamadan önce bazı dosyaları kütüphaneleri indirmemiz gerekiyor.

Eğer hala bilgisayarınızda keil kurulu değil ise aşağıdaki linkten en son sürümünü indirip bilgisayarınıza kurun. En son 5.13 sürümü çıkmıştı. Şuanda bende onu kullanıyorum.

http://www.keil.com/arm/mdk.asp

Aşağıdaki linkte Download butonuna basınca bir sayfa açılacak ve bir form doldurmanız istenecek. Formu düzgünce doldurup gönderdikten sonra indirme linki gelmesi gerekiyor. Keil Trial modunda 32K ya kadar ücretsiz derleme yapıyor.

Keili indirip kurduğunuzu varsayarsak şimdi diğer işlemlere geçelim. Keil 5 serisinden sonra Software Pack Sistemine geçti. Peki bu ne anlama geliyor? Şöyle. Keil 4 serisinde(en son 4.72 vardı) keili indirip kurduğunuzda desteklediği bütün mcu’lar için kütüphanelerini ve Examples’lerini yanında taşımaktaydı. Şimdi ise keili indirdikten sonra kullanıcı hangi mcu’yu kullanacaksa o mcu’ya ait paketi indirip projesinde kullanabilmekte.

ST için F0, F1, F2, F3 ve F4 olmak üzere paketler yapılmış. Bir F4 serisi ile oynayacağımız için bu paketi bilgisayarımıza indiriyoruz.

cmsis-library-stm32f4xx_stdperiph_driver-stm32f429i-discovery

Bu işlemi yaptıktan sonra kullanacağımız işlemciye ait paket bilgisayarımıza inmiş oluyor. Ben yüklediğim için Up to Date yazıyor. Normalde kurulu değilse Instal Yazar.

Şimdi proje oluşturmaya başlamadan önce olmazsa olmaz bazı dosyalarımız kütüphanelerimiz var.

Sıralarsak Eğer

1 CMSIS library
2 STM32F4xx_StdPeriph_Driver
3 STM32F429I-Discovery

CMSIS Library ARM firmasının Cortex-M çekirdekleri için hazırlamış olduğu bir kütüphanedir.

Ayrıntılı bilgi : http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php
STM32F4xx_StdPeriph_Driver klasörü ise ST firmasının kendi mikrodenetleyicileri için hazırlamış olduğu standart donanım kütüphanesi.

STM32F429I-Discovery klasöründe ise elimizdeki kart için ST nin hazırlamış olduğu donanım sürücüleri bulunmakta. Bunlar ToucController kütüphanesi, LCD kütüphanesi, sdram kütüphanesi, Gyro kütüphanesi şeklinde sıralanabilir.

Bu dosyaları Yandex Hesabıma yükledim. Buradan indirebilirsiniz.

Ayrıca aşağıdaki linktende indirebilirsiniz

STM32F429 discovery firmware package: http://www.st.com/web/en/catalog/tools/PF259429

Şimdi sırayla işlemlere başlayalım.

1. İlk önce Boş bir klasör oluşturalım kendimize. Bu klasör bizim proje klasörümüz olsun.
2. Keilde Project>New uVision Project Sekmesine tıklıyoruz. Açılan pencerede projenize bir isim verip proje klasörüne kaydedin. Ardından aşağıdaki gibi bir sayfa açılacak.< keilde-projectnew-uvision-project

Buradan STM32F429ZIT6’yı seçiyoruz. Dikkat edin eğer Software Pack’ler içerisinden STM32F4 serisini yüklemeseydik kullanacağımız işlemciyi bu listede bulamazdık.

Ok dedikten sonra Manage Run-Time Environment adında başka bir sayfa açılacaktır. Bu sayfada eğer kullanacaksanız çeşitli kütüphaneleri (CMSIS, Rtos vs) doğrudan projenize ekleyebiliyorsunuz. Biz kendimiz bu klasörleri ekleyeceğimiz için kullanmıyoruz. Dolayısıyla Ok butonuna basıp geçin.

3. Şimdi Proje klasörümüze indirdiğimiz library dosyasını kopyalayın. Ayrıca proje klasörünün içine User diye yeni klasör açın. Bu klasöre kendi source dosyalarımızı ekleyeceğiz. Sonuç olarak proje klasörünün içinde aşağıdaki gibi dosyalar olmalı

keil-manage-run-time-environment-stm32f429zit6

4. Devam edelim. Proje klasöründe işimiz bitti. Sıra geldi proje ağacını oluşturmaya. 2. işlemin sonunda Ok dedikten sonra boş bir sayfa açılacaktır. Sol tarafta proje ağacında Target 1 Altında Source Group 1 şeklinde alt bir dal bulunmaktadır. İsterseniz eğer Target 1 üzerine çift tıklayarak adını değiştirebilirsiniz.

Ben New_Proje dedim. Şimdi Bu New_Proje altında 4 adet alt source group’a ihtiyacımız var. Ben bunlara sırasıyla Startup, STM32F429I-Discovery, STM32F4xx_StdPeriph_Driver ve User isimlerini verdim. Bu alt dalları veya Source Group’ları oluşturmak için Target 1 veya benim gibi Target 1’in ismini New_Proje yaptıysanız eğer buraya sağ tıklayıp Add_Group… Seçeneği ile dediğim isimlerde alt gruplar oluşturun. İşlem sonunda proje ağacınız aşağıdaki gibi olmalı.

keil-startup-stm32f429i-discovery-stm32f4xx_stdperiph_driver

5. Sıra geldi bu oluşturduğumuz bu Source Grupları doldurmaya. Startup ile başlayalım. Startup içerisine startup_stm32f429_439xx.s dosyasını eklememiz gerekmektedir. Bu dosya proje klasörümüzün içinde Library / CMSIS / Device / ST / STM32F4xx / Source / Templates / arm /

klasörünün içinde bulunmakta. Oluşturduğunuz Startup Source Gurubu üzerine çift tıklayarak belirttiğim adresteki startup_stm32f429_439xx.s dosyasını seçin.

6. STM32F429I-Discovery içerisine Yine Library/STM32F429I Discovery klasörü içerisindeki fonts.c hariç bütün .c uzantılı dosyaları eklememiz gerekiyor. Bu dosya içerisinde kart üzerindeki donanımın sürücüleri bulunmakta.

7. Aynı işlemi oluşturduğumuz STM32F4xx_StdPeriph_Driver source group içerisinede yapacağız. Library / STM32F4xx_StdPeriph_Driver / src klasörü içerisinde stm32f4xx_fsmc.c hariç diğer bütün .c dosyalarını ekliyoruz.

Bu işlem sonunda proje ağacımız resimdeki gibi olmalı.

keil-library-stm32f4xx_stdperiph_driver-src-stm32f4xx_stdperiph_driver

8. Şimdi User içeriğini dolduralım. İlk önce File>>New ile boş bir sayfa açıp bu sayfayı main.c adında oluşturduğumuz user klasörü içerisine kaydediyoruz. Ardından proje ağacında User üzerine çift tıklayarak oluşturduğumuz bu main.c dosyasını User Soruce group’u içerisine ekliyoruz.

9. User Source Group içerisne eklememiz gereken üç dosya daha vardır. Birincisi stm32f4xx_it.c ve stm32f4xx_it.h dosyalarıdır. Bu dosyalar içerisinde interrupt alt fonksiyonları bulunmaktadır. İkinci dosya ise system_stm32f4xx.c dosyasıdır. Bu dosyadada işlemcinin OSC ayarları, Peripheral Bus frekansları gibi ayarlar yapılır. Sonuncu ise stm32f4xx_conf.h dosyasıdır. Bu dosyadada yine configürasyon ayarları yapılır. Bu dosyaları da Buradan indirelim. İndirdikten sonra çıkan dosyaları User klasörü içerisine kopyalayın. Aynı şekilde proje ağacında da User Source Group altındada stm32f4xx_it.c ve system_stm32f4xx.c dosyalarını tanıtın. Proje ağacında işimiz bu kadar.

10. Şimdi Options for Target Butonuna basıyoruz. Target ayarlarını yapacağız. Açılan sayfada C++ sekmesine geliyoruz. Burada Preprocessor Symbol altında Define kutucuğuna aşağıdaki tanımlamaları yazın.

USE_STDPERIPH_DRIVER,STM32F429_439xx,USE_DEFAULT_TIMEOUT_CALLBACK

11. Yine C++ Sekmesi altında Include Paths bölümüne keile projeyi derlerken hangi klasörler içerisine bakacağını göstereceğiz. Eklenmesi gereken klasörler resimdeki gibidir.

use_stdperiph_driverstm32f429_439xxuse_default_timeout_callback

Yapılacak işlemler bu kadar. Main programımızı yazıp Build Tuşuna basıyoruz. İlk derleme biraz uzun sürecektir.

keil-stm32f429-discovery-firmware

Eğer işlemleri eksiksiz yaptıysanız programınız resimdeki gibi hatasız derlenecektir. :) Şimdi ufak bir program yazalım ve hemen kitte deneyelim. Program basit olsun LCD de birşeyler yazıp kit üzerindeki ledleri yakıp söndürelim. Bu arada LCD init işleminin nasıl yapıldığını görmüş oluruz. Bununla ilgili örnekler STM32F429 discovery firmware paketini indirdiyseniz eğer içerisinde mevcut.

Test programımız aşağıdaki gibi

#include "stm32f4xx.h"
#include "stm32f429i_discovery.h"
#include "stm32f429i_discovery_lcd.h"
 
int main()
{
     
    int i;
     
  /* LCD initialization */
  LCD_Init();
   
  /* LCD Layer initialization */
  LCD_LayerInit();
     
  /* Enable the LTDC */
  LTDC_Cmd(ENABLE);
   
  /* Set LCD foreground layer */
  LCD_SetLayer(LCD_FOREGROUND_LAYER);
     
    LCD_SetColors(LCD_COLOR_RED, LCD_COLOR_WHITE);
     
    LCD_Clear(LCD_COLOR_WHITE);
     
     STM_EVAL_LEDInit(LED4);
     
         LCD_SetTextColor(LCD_COLOR_RED);
         LCD_DisplayStringLine(0,"  STM32F429I");
         LCD_SetTextColor(LCD_COLOR_GREEN);
         LCD_DisplayStringLine(24,"   Discovery");
         LCD_SetTextColor(LCD_COLOR_BLUE);
         LCD_DisplayStringLine(48," 1. Uygulama ");
         LCD_SetTextColor(LCD_COLOR_BLACK);
         LCD_DisplayStringLine(72,"   Arectron");  
 
  while(1)
    {
           STM_EVAL_LEDToggle(LED4);
         for(i=0;i<50000000;i++);
    }
}

Kısa bir program. Bu programı derliyoruz. Problemsiz bir şekilde derlenebilmesi gerekir. Sıra geldi programı kite yüklemeye. Son olarak bu kısma değineyim. Kit üzerinde STlink Mevcut. Programı ST link üzerinden yükleyeceğiz. Eğer kartı ilk kez bilgisayara takıyorsanız STlink Driverini yüklemeniz gerekli. Aşağıdaki linkten STlink yazılımını indirip bilgisayarınıza kurun.

http://www.st.com/web/catalog/tools/FM146/CL1984/SC724/SS1677/PF251168?sc=internet/evalboard/product/251168.jsp

Aygıt Yöneticisinden STlink driverini tanıttıktan sonra keilde birkaç ayar yapmamız gerekiyor. Tekrardan Options for Target menüsüden Debug bölümüne gelip ayarları aşağıdaki gibi yapın.

keil-stm32f429-discovery-stlink-driver

Son olarak yine yukarıdaki resimde 4. adım olan Settings butonuna basın. Tekrardan açılan pencerede Flash Download sekmesine gelip ayarları aşağıdaki gibi yapın.

keil-flash-download-stlink-driver

STlink Ayarları bukadar Bundan sonra Doğrudan Load Tuşuna basıp programınızı yükleyebilirsiniz.
Ve sonuç :)

keil-flash-stlink-load

Evet İşlemleri adım adım takip ettiyseniz sizinde bu şekilde bir sonuca varmanız gerekir. :)

İyi çalışmalar

http://arectron.com/arm/stm32f429i-discovery-keilde-proje-olusturma.html

  • ismail güler

    ancak bu kadar güzel anlatılabilirdi.
    Teşekkürler.

  • mehmet

    9. adımdaki dosyaların indirme linkini yenilermisiniz ???

  • onur

    Merhaba stm32f429 kiti yeni aldım.Söylediklerinizlerini tam yapıyorum ancak #include “stm32f4xx.h” komutunda hata veriyor.

    hata aşağıdaki gibidir
    fatal error in include chain (stm32f4xx_conf.h): ‘stm32f4xx_adc.h’ file not found