STM32F4 Discovery ve Ubuntu (1. ve 2. Bölüm Eklendi)

Başlatan muuzoo, 25 Mayıs 2012, 23:52:03

muuzoo

Bu yazıyı kendi blog adresimde (http://gunluk.muuzoo.gen.tr) yayınladım ve ordan kopyaladım. Bu yüzden gözden kaçırdığım hatalar olabilir bildirirseniz sevinirim. Yazı biraz uzun olduğu için iki parça haline getirdim. Diğer bölümü de düzenler düzenlemez ekleyeceğim.
------------------------------------------------------
OYUN BAŞLASIN!

Evet bayadır elimde bulunan STM32F4 Discovery kartı ile nihayet uğraşmaya başlayabildim. Piyasada bulabileceğiniz çoğu deney kartı gibi Win sistemlerde pek bir sorun yok. Kolayca kurulum yapıp çalışmaya başlayabiliyorsunuz. Gelgelelim söz konusu linux olunca çoğu firma görmedik duymadık bilmiyoruz havasında olduğu için mecburen kendi göbeğimizi kendimiz kesiyoruz. Linux camiasının güzelliği işte pek çok seçeneğe sahip olmak:)

Sizleri baştan uyarıyorum uzun bir yazı olacak. O yüzden yeteri miktarda çay kahve su tedarik ediyoruz, güzel bir müzik albümünü de çalma listemize ekleyip kuruluma başlıyoruz. Kurulum yaptığım işletim sistemi Ubuntu 12.04 x64.

NOT: Bu yazı hazırlanırken yararlanılan kaynaklar şunlardır:
1-Ön Hazırlık

Kuruluma başlamadan önce ilk olarak bilgisayarımıza gerekli dosyaları indiriyoruz. Bize ilk lazım olan şey arm ortamı için gerekli olan kütüphaneleri ve derleyicileri içeren çalışma ortamı. Yabancılar genelde bu ortamı "arm-tool-chain" olarak isimlendiriyor. Bu dosyaları kendiniz oluşturabileceğiniz gibi internet üzerinden hazır oluşturulmuş olan sürümleri de indirebilirsiniz. Bu çalışmada ilk önce kolaylık olması açısından hazır bir çalışma ortamı kullanılacaktır. Kullandığımız çalışma ortamı Mentor tarafından sağlanan Sourcery Codebench. Bu dosyaların ücretsiz sürümünü BURADAN indirebilirsiniz.Tek sıkıntı üyelik gerektirmesi. Üye olduktan sonra indirme isteğinde bulunduğunuzda dosya bağlantısı e-posta adresinize gönderiliyor bu sayede gerekli indirme bağlantısına ulaşabiliyorsunuz. Bu yazı yayınlandığı sırada en güncel sürüm Sourcery Codebench Lite 2011.09-69 idi. Ya da ben uğraşamam üyelikle falan diyorsanız belirtilen sürümü BURADAN indirebilirsiniz.

Dosyayı indirdikten sonra sıra geldi kurulum yapmaya. Kurulum yaptığımız dizin /opt dizini. Bu tarz dosyalarımı bir alışkanlık olarak buraya kuruyorum. Ama siz istediğiniz başka bir dizin için de uygulayabilirsiniz. Kuruluma başlamadan önce root kullanıcısına geçiş yapmanız gerekiyor.
sudo su 
mkdir /opt/CodeSourcery 
cd /opt/CodeSourcery 
tar xvf /dosya_dizini/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 
ls


2-Eclipse Kurulumu ve Gerekli Eklentilerin Yüklenmesi

Dosyaları indirdikten sonra sıra geldi yazılım geliştirme ortamımızı Eclipse ile birlikte kullanabileceğimiz hale getirmeye. Bu kurulumda Eclipse yazılımının temel sürümü kullanılmış ve tüm anlatım onun üzerinden yapılmıştır. Eğer eclipse kurulu değilse basitçe :"sudo apt-get install eclipse" diyerek ubuntu altında Eclipse paketlerinin yüklenmesini sağlayabilirsiniz. Bu komuttan sonra Eclipse yazılımının temel sürümü kurulmuş olacaktır. Fakat bize gereken Eclipse CDT (C/C++ Development) sürümüdür. İlk önce bu eklentiyi kurmakla işe başlıyoruz.

       
  • Help > Install New Sowtware
  • Work with satırına: http://download.eclipse.org/tools/cdt/releases/indigo yazıyoruz.
  • CDT Main Features başlığından "C/C++ Development Tools" seçeneğini ve CDT Optional Features başlığından C/C++ GDB Hardware Debugging başlığını seçiyoruz.
  • İşlemleri sırasıyla takip edip kurulumu bitiriyoruz.


Bağlantı hızınıza göre kurulum süresi değişken olacaktır. Ortalama 10 dk civarlarında tamamlanır diye tahmin ediyorum. Kurulum bittikten sonra bir uyarı ekranı çıkacak ve güncellemenin tamamlanması için yazılımı yeniden başlatmanız gerektiğini söyleyecektir. "Restart Now" diyerek kurulum işleminin tamamlanması için gerekli son adımı da atıyoruz. Sıra geldi Eclipse için arm eklentimizi kurmaya. Bu eklenti sayesinde bir önceki adımda indirdiğimiz Sourcery Codebench Lite dosyalarını Eclipse altından kullanabileceğiz. Kurulum adımlarına geçelim:

       
  • Help > Install New Software
  • Work with satırına: http://gnuarmeclipse.sourceforge.net/updates adresini ekliyoruz.
  • CDT GNU Cross Development Tools başlığını seçiyoruz ve Next tuşuna basıyoruz.
  • Birkaç Next tuundan sonra Finish diyerek kurulumu bitiri
Burda da bağlantı hızınıza göre kurulum bir kaç dakika sürecektir. Kurulum sırasında Bir "Securtiy Warning" penceresi açılacaktır. Buraya "OK" diyerek devam ediyoruz. Kurulum tamamlandıktan sonra programı tekrar başlatmanızı isteyecek bir ekran çıkacak. Buraya da "Restart Now" diyerek devam ediyoruz.

3-ST-Link ve Diğer Gerekli Yazılımların Yüklenmesi

Sıra geldi kurulumuzun 3. adımına. Bu adımda kartımıza program atmak için gerekli ara program olan St-Link programının kurulumunu yapacağız. Bu program sayesinde kartımıza program atabilir , kartımızda bulunan hafıza içeriğini tekrar bilgisayarımıza kopyalayabiliriz. İlk olarak kendimize bir çalışma klasörü oluşturuyoruz. Ve derleme öncesi gerekli ek dosyaları yüklüyoruz. Bu yükleme için sisteminizde git istemcisinin kurulu olması gerekiyor.

sudo apt-get install libsgutils2-dev libusb-1.0-0-dev autoconf
mkdir src
cd src
git clone git://github.com/texane/stlink.git
cd stlink
./autogen.sh
./configure
make


02.07.2012- Güncelleme : @Tagli uyardı ST-Link kurulumunda değişiklik gerçekleşmiş. O yüzden önce bir "README" dosyasına göz atmakta fayda var. Eski kodları iptal edip yenilerini ekledim.

Derleme işlemi bittikten sonra dosyaları kopyalayıp düzenliyoruz. Tüm bu işlemler için root olmanız gerektiğini unutmayın.

mkdir /opt/stlink 
cd /opt/stlink 
cp /home/user/src/stlink/flash/st-flash ./st-flash 
cp /home/user/src/stlink/gdbserver/st-util 
echo PATH=\"$PATH:/opt/stlink\" >> /etc/environment 
source /etc/environment


Şimdi de USB erişim ayarlarımızı düzenleyelim. Bu sayede kartımızı bilgisayarımıza bağladığımızda /dev/ dizini altında bir aygıtımız olacak.
cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d 
udevadm control --reload-rules


Evet stlink araçlarının kurulum işlemi tamamladı. İsterseniz bir kontrol edelim. Kurulum işlemi bittikten sonra root kullanıcısından çıkabiliriz. Kart içinde yüklü bulunan içeriği olduğu gibi bilgisayarımıza kopyalayalım.
st-flash read ~/STM32F4-Discovery.bin 0x8000000 0x100000


Bu komutu verdiğimizde kartın içeriğinde bulunan yazılım kullanıcı dizinimize kopyalanıyor. Eğer st-flash komutu bulunamazsa ya bilgisayarınız yeniden başlatın ya da bu seferlik "source /etc/environment" komutunu verin ve tekrar deneyin. Şimdi de kopyaladığımız içeriği tekrar karta yazalım. Fakat başta uyarayım bu işlem bir kaç dakika sürebilir. Bu işlem de tamamlandığında ST-Link programının sorunsuzca çalıştığına emin olabiliriz.
st-flash write ~/STM32F4-Discovery.bin 0x8000000


Evet buraya kadar neler yaptığımızı özetleyelim. Arm derlemesi için gerekli dosyaları indirdik. Eclipse programımızı ve CDT eklentisini kurduk. İndirdiğimiz arm dosyalarını Eclipse altında kullanmak için gerekli eklentiyi kurduk. Kartımıza program atmak için gerekli olan St-Link programının kurulumunu yapıp çalıp çalışmadığını sınadık.
Yazı uzun olduğu için iki parçaya böldüm. Diğer işlemler için ikinci bölüme geçelim.(EKLENECEKTİR)
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

muuzoo

#1
Yazı dizimizin ilk kısmında gerekli programlardan ve kurulumlarından bahsetmiştik. Bu kısımda ise kurduğumuz programları nasıl bir araya getireceğimizi ve gerekli ayarların nasıl yapılacağını göstereceğiz. Dilerseniz sırasıyla gerekli işlemlere başlayalım.

ST-Link ve Eclipse İlişkilendirmesi

Eclipse programımızı açıyoruz ve sırasi ile bu adımları takip ediyoruz.
Run > External Tools >External Tools Configurations.



Program yazan yere sağ tuş ile tıklayıp New seçeneğini seçiyoruz.



Name kısmına "ST-Link", Location kısmına da "/opt/stlink/st-util yazıyoruz. Working Directory kısmına ${workspace_loc}${project_path yazıyoruz.



Build sekmesine geliyoruz. Burdaki "Build Before Launch" seçeneğindeki işareti kaldırıyoruz. Common sekmesine geçip "Display in Favorites menu" başlığı altındaki "External tools" seçeneğini işaretliyoruz. Değişiklikleri Apply diyerek kaydediyoruz ve Close tuşu ile çıkıyoruz. Buraya kadar ayarlarımızı yaptık. Eclipse programımızı kapatıp çıkabiliriz. Yeni safhaya geçmeden önce kendinize bir bardak kahve ya da çay hazırlamanızı tavsiye ederim. Sıra geldi proje hazırlıklarına. Öncelikle path ayarlarımızdan emin olarak eclipse programımızı başlatıyoruz. İlk bölümdeki kurulumu yaptıktan sonra bilgisayarınızı yeniden başlattıysanız "path" ayarlarınız halihazırda yapılmış olmalıdır ama emin değilseniz "source /etc/environment" komutunu verdikten heen sonra eclipse komutunu vererek programı başlatın.

Örnek Proje Ayarları Eclipse programımızı açtık. Tertemiz bir sayfa bizi karşıladı. Sıra proje ayarlarımızı yapmakta. Sırasıyla bu adımları takip ediyoruz.

       
  • File > New > Project
  • C/C++ > C Project > Next
  • Arm Cross Target Application > Empty Project
  • Yandaki pencereden Arm Linux GCC (Sourcery G++ Lite) seçiliyor
  • Project kısmına bir proje adı verip devam ediyoruz.
Eğer her şey doğru yapıldıysa sol taraftaki "Project Explorer" penceresinde oluşturduğumuz projeye eklenmiş 3 dizin göreceğiz:

/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include
/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include
/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed





Şimdi diğer ayarları yapmaya geçelim. Bu aşamaya geçmeden önce indirmemiz gereken bir dosya daha var. STM32 için gerekli olan kütüphaneleri içeren paket. STM32F4 DSP Peripherals and Standart Library adlı yaklaşık 30 MB büyüklüünde bir dosya. İçinde elimizdeki donanım için gerekli tüm kütüphaneler mevcut. Biz de bu kütüphaneleri projemize ekleyeceğiz. Bunun için sırası ile

       
  • Project > Properties
  • C/C++ Generals > Paths and Symbols
  • Configuration Ayarlarını "All configurations" olarak değiştiriyoruz.
  • Include sekmesindeki Languages ayarını GNU C olarak seçiyoruz.
Bu ekranda iken Add tuşuna basarak indirdiğimiz STM32F4 kütüphanelerini ekliyoruz. Eklememiz gereken dizinler şunlar:
Alıntı Yap
/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/CMSIS/Include
/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/CMSIS/Device/ST/STM32F4xx/Include
/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/STM32F4xx_StdPeriph_Driver/inc
/${ProjDirPath}


Bu dizinleri ekledikten sonra "Source Location" sekmesine geçiyoruz ve Link Folder seçeneğine tıklıyoruz:

       
  • Folder Name kısmına StdPeriph yazıyoruz.
  • Link to folder in the file system seçeneğini seçiyoruz.
  • Browse tuşuna basıp /STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/STM32F4xx_StdPeriph_Driver/src dizinini gösteriyoruz. Onaylayıp işemi bitiriyoruz.
Daha sonra Symbol sekmesine geçiyoruz. Buraya bir kaç değer eklememiz gerekiyor. Sol taraftan GNU C seçili iken Add tuşuna basarak şu 3 değeri ekliyoruz.

       
  • Name kısmına USE_STDPERIPH_DRIVER deyip OK diyoruz. Value değeri boş kalacak.
  • Name kısmına USE_STM32_DISCOVERY deyip OK diyoruz. Value değeri boş kalacak.
  • Name Kısmına HSE_VALUE diyoruz. Value kısmına 8000000 değerini giriyoruz. OK diyoruz.
Apply diyerek değişikliklerimizi kaydediyoruz. Aynı pencerede iken sol taraftaki C/C++ General başlığı altındaki Indexer ayarlarına giriyoruz. Burada resimde görülen ayarları işaretliyoruz ve Apply diyoruz.



Azimle yolumuza devam ediyoruz. Herşey ARM için :) Sol taraftaki seçeneklerden C/C++ Build sekmesine geliyoruz. Environment seçeneğine tıklıyoruz. Sağ taraftaki "Select" tuşuna tıklayıp PATH değişkenini ekliyoruz.





Daha sonra soldan yine Settings seçeneğini seçiyoruz ARM Sourcery Linux GCC Linker başlığı altındaki General seçeneğini seçiyoruz ve Script File kutusuna /${ProjDirPath}/stm32_flash.ld

Aynı yerden ARM Sourcerry Linux GNU Flash Image ayarlarından Output seçeneğine gelip Output File Format seçeneğini "binary" olarak değiştiriyoruz.

Sabırlı okurlarım yüzdük yüzdük kuyruğuna geldik. Az daha sabredin. Projemizin sorunsuz derlenmesi için gereken bir kaç dosyayı proje dizinimize kopyalamamız gerek. İşte o dosyalar
Alıntı Yap
/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324xG_EVAL/stm32_flash.ld
/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f4xx.s 
ÖNEMLİ : Proje dizinimize kopyaladığımız "startup_stm32f4xx.s" dosyasının uzantsını büyük s ile "S" ile değiştiriyoruz. Yani dosya adımız "startup_stm32f4xx.S" olacak. Bir de netleştiremediğim bir durum olmakla birlikte bu dosyanın içinde bulunan bir satırı iptal etmemiz gerekiyor ya da gerekmiyor. Yaralandığım kaynaklardan biri almanca ve google translate ile tercüme ettiğimde ilgili yeri "uncomment" edin demiş fakat bu satır etkinken kod derlenmiyor. Kaldı ki bu satır zaten etkinleştirilmiş. Yani etkinleştirilmiş satırı tekrar nasıl etkinleştirebiliriz ki. Olmak ya da olmamak işte bütün mesele bu. Ya da bir ihtimal daha var ölmek mi dersin... (Yazar burda saçmalamaktadır ciddiye almayınız :)  Olması gereken durum şu:
/* Call static constructors */ 
//    bl __libc_init_array


Biraz mola verebiliriz. Bundan sonra fazla bir işimiz kalmadı. Sırada GDB ile Debug işlemi için gerekli ayarları yapacağımız yere geliyoruz.Şimdi bazı okurlar diyordur ki hep az kaldı diyoruz ama bir olayınızı göremedik. Bizi mi kandırıyon len! Ben de diyorum ki şunu da yaptık mı tamamdır bu iş.Sırasıyla
Run>Debug Configuration seçeneğine tıklıyoruz.



Açılan pencerede solda bulunan "GDB Hardware Debugging" kısmına sağ tuş ile tıklayıp New seçeneğini seçiyoruz. Açılan pencerede NEW kısmına "STM32F4-Discovery ST-Link" ismini veriyoruz. Debugger sekmesine geçip GDB Command kısmına "arm-none-eabi-gdb" yazıyoruz ve port numarasını 4242 olarak belirliyoruz. Aşağıdaki ekran görüntüsünde ayarları görebilirsiniz.

Son olarak Common sekmesine gelip Display in favorites menu başlığı altındaki Debug seçeneğini işaretleyin. Apply ve close diyerek pencereyi kapatıyoruz. Aşağıdaki örnekte deneme projesi için yaptıığım ayarları görebilirsiniz.



Şimdi bir kaç püf noktasına değinelim:

       
  • Debug işleminden önce ST-Link çalışıyor olmalı. (Run > External Tools > ST-Link)
  • Eğer ST-Link açılında "Variable References empty selection" hatası verirse Project Explorer penceresindeki proje klasörünüze bir kere tıklayıp tekrar deneyin.
  • Run > Debug Configuration penceresinden proje ayarlarınızı yapın.
  • Debug işlemini başlatın. Açılan pencere uyarısına yes diyerek debug ekranına ulaşabilirsiniz.
  • F8 ile kodunuzu tekrar baştan başlatabilirsiniz.
GDB henüz %85 oranında faal olan bir uygulama olduğu için hatalarını olgunlukla karşılayacağınızı biliyorum :D . Bir sonraki yazımızda basit bir led yak söndür uygulaması kodu vereceğim.
BÖLÜM 2 SONU
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

muuzoo

Alıntı yapılan: FxDev - 26 Mayıs 2012, 00:08:52
Üstüne mi denk geldi bilmiyorum fakat ne zaman Linux dense aklıma aşağıdaki fotoğraf geliyor. Linux ile uğraşmak gerçekten başka bir uğraş, onun için saygı duyuyorum kullanan arkadaşlara.

  ;D Yazılım dünyasının IKEA'sı gibi aslında linux. Dışarıdan bakınca dağınık gibi görünebilir ama en az çalışma masalarımız kadar düzenli  :P. Dağınık olsa da aradığımızı buluyoruz neticede  ;)
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

memo333

elinize sağlık hocam aklımdaki birşeydi uğraşmaktan kurtardınız
Gömülü Linux Notları --> http://linuxedu.xyz/

Tagli

STM32F0 Discovery'de sikinti var, st-link uygulamasi ile flash'a yazma calismiyor. Adamlar durumun farkinda ama cozum bulamamislar.
https://github.com/texane/stlink/issues/92

Bu arada, st-link derleme proseduru biraz degismis. README dosyasini okumak gerekiyor. Autotools diye birsey kullanmaya baslamislar.
Gökçe Tağlıoğlu

muuzoo

Alıntı yapılan: Tagli - 03 Temmuz 2012, 00:30:51
STM32F0 Discovery'de sikinti var, st-link uygulamasi ile flash'a yazma calismiyor. Adamlar durumun farkinda ama cozum bulamamislar.
https://github.com/texane/stlink/issues/92

Bu arada, st-link derleme proseduru biraz degismis. README dosyasini okumak gerekiyor. Autotools diye birsey kullanmaya baslamislar.

STM32F0 için şöyle bir kaynak var OpenOCD kullanıyor, sanırım yardımcı olabilir. Bu arada bilgilendirme için sağol. Verdiğin kodları deneyip yazıyı güncelledim. Ek paket olarak autoconf paketini yüklemek gerekiyor derlemeden önce.

http://fun-tech.se/stm32/OpenOCD/index.php

Bir de bu var ama denemedim :

http://code.google.com/p/stm32flash/

http://hackaday.com/2012/06/17/template-for-building-stm32f0-discovery-project-in-gcc/
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

tutay

Teşekkürler hocam bende bunu arayıp duruyordum windows dan gene kurtuldum sanırım deneyeceğim Şimdi.