ST firması ürettiği mikroişlemciler ile kullanılmak üzere neredeyse sayısız örnek uygulama hazırlayıp yayınlıyor. Bunlar belirttikleri lisans kurallarına uyulması şartı ile ücretsiz, firmanın WEB sitelerinden kolaylıkla indirilebiliyor. st.com sitesinden bunlara erişilebiliyor.
Akla gelebilecek her konuda uygulama örnekleri var. Ancak bu örneklerin çoğunluğu STM32 CubeIDE değil, başka platformlar için hazırlanmış durumda.
Bunlardan AC6 System Workbench For STM32, kısaltılmış haliyle SW4STM32 platformundan STM32 CubeIDE ye aktarılmasını adım adım anlatmaya karar verdim.
STM32 CubeIDE ÖNCESİ KULLANDIĞIM GELİŞTİRME PLATFORMLARI
Benim STM32 ile çalışmaya başladığım yıllarda bu kütüphaneler bu kadar zengin değildi. Dolayısıyla kodlarımı sıfırdan kendim yazarak “standard peripheral library” adını verdikleri alt seviye kütüphanelerden (donanım seviyesine en yakın düzey) yararlanarak geliştiriyordum. Böylece yıllar içinde kendi kütüphanelerim ortaya çıktı.
Bu STM32 ye başlangıç yıllarımda KEIL MDK4 ve MDK5 platformlarının ücretsiz sürümlerini kullanıyordum. 2000 lerin ilk yıllarından söz ediyorum.
Öte yandan ST de zamanla uygulama kütüphanelerini zenginleştirdi. HAL kütüphanelerini ve CubeMX’i kullanıma sunarak, STM32 kodlamayı daha kolay ve hızlı hale getirdi.
Bu uygulama kütüphanelerini ST ürünlerini destekleyen popüler geliştirme platformlarına uygun olarak hazırlıyordu. Bunlar
- IAR Embeded Workbench for ARM – EWARM
- Real View Microcontroller Development Kit – MDK ARM ve
- AC6 System Workbench for STM32 – SW4STM32 platformları.
ST bir yandan yukarıda sıralanan platformlara uygun kütüphaneler yaratırken, evvelki yıl Atollic firmasını bünyesine katarak onların True Studio platformunu müşterilerine sunmuştu. Bunun duyurusunu alır almaz o günlere kadar kullanmakta olduğum KEIL MDK5 terkederek yeni sisteme geçtim.
Zira KEIL in ücretsiz kullanıcılar için başta kod boyutu olmak üzere kısıtlamaları vardı, teknik destek de alamıyordum. Atollic True Studio ise hem ücretsizdi, hem herhangi bir boyut sınırlaması yoktu. Ayrıca artık ST den ve ve ST Web sitelerindeki kullanıcı forumlarından destek bulabiliyorum.
Yalnız hala bir sıkıntı vardı ; Atollic True Studio sadece Windows üzerinde çalışıyordu, ben ise artık işlerimi Mac OS ye aktarmaya başlamıştım. Sadece Atollic True Studio yüzünden bir Windows PC masamda yer işgal ediyordu. Gerçi çoğu zaman aynı anda iki PC ye ihtiyaç duyuyorum ya, neyse. Kod geliştirme işlerini kucağımda taşıdığım tek makinada yürütmek istiyordum – mobil hayat işte.
Sonunda geçen yıl ST yeni bir duyuru yaptı. Atollic True Studio ya CubeMX uygulamasını da entegre ederek STM32 mikroişlemcilere yönelik “STM32 CubeIDE” platformunu hizmete sunduklarını haber verdi.
Bu yeni entegre geliştirme platformu da herhangi bir boyut sınırlaması olmaksızın ücretsiz.
Bu güzel, ancak eski programlarımızın CubeIDE ye aktarılması gerekiyor. ST nin neredeyse tüm örnek uygulamaları ve şablonları da EWARM, MDKARM ve SW4STM32 platformlarına uygun durumda. Bunlardan yararlanmak istediğinizde sözünü ettiğim aktarma işlemini yapmanız gerekiyor. Hatta bunun bir öncesindeki Atollic True Studio ortamında hazırladığım programların dahi bir aktarma operasyonuna ihtiyacı oluyor.
ST, bu aktarım/ithal işlemlerinin nasıl yapılacağını (import) muhtelif doküman ve video sunumlar ile anlatıyor. Yine de ben, bugüne kadar çok basit örnekler dışında, manuel ayarlama ve düzeltmeler yapmadan yapamadım bu işleri.
Sonunda SPN7 Motor Kontrol paketini kullanmaya kalkışınca, artık yaptıklarımı adım adım yazayım dedim. Buraya yazdıklarım kafamı epeyi bir yerlere tosladıktan sonra ulaştığım sonuçtur. Çözüme ulaştıktan sonra insanın “bu da ne ki?” diyesi geliyor ama ben çok uğraştım açıkçası.
ST SPN7 BLDC MOTOR KONTROL YAZILIM PAKETİ
ST nin mikroişlemcilerinin motor kontrol uygulamalaarında kullanımına yönelik olarak müşterilerine sunduğu bir paket bu. Farklı mikroişlemcilere sahip Nucleo geliştirme kitleri ve bunların üzerine takılabilen motor sürücü modülü (X-NUCLEO-IHM07M1) için geliştirilmiş. Bu paketi yukarıda sözünü ettiğim gibi EWARM, KEIL MDK ve SW4STM32 platformları için alternatif paketciklerle donatmış. İstediğinizi seçip CubeIDE ye aktarıyorsunuz.
Önce ST WEB Sitesinden SPN7 paketini indirerek işe başlıyoruz.
ST SPN7 PAKETİ DOSYA YAPISI
STM32CubeExpansion_SPN7_V1.1.0
_htmresc
Documentation
Drivers
BSP
CMSIS
STM32F0xx_HAL_Driver
STM32F1xx_HAL_Driver
STM32F3xx_HAL_Driver
STM32F4xx_HAL_Driver
Middlewares
ST
MC_6Step_Lib
UART_serial_com
Projects
Multi
Examples
MotorControl
Binary
CubeMX
EWARM
Inc (header files)
MDK-ARM
Src (c source files)
SW4STM32
STM32F030R8-Nucleo
STM32F103RB_Nucleo
STM32F302R8-Nucleo
COMM
Drivers
BSP
Components (boş folder)
STM32F3xx-Nucleo (boş folder)
X-NUCLEO-IHM07M1 (boş folder)
CMSIS (boş folder)
STM32F3xx_HAL_Driver (boş folder)
Example
SW4STM32 (boş folder)
User (boş folder)
Middlewares
MC_6Step_Lib (boş folder)
UART_serial_com (boş folder)
NUCLEO-F302R8.xml
STM32F302R8-Nucleo Debug.cfg
STM32F302R8-Nucleo Run.cfg
STM32F302R8Tx_FLASH.ld
STM32F401RE-Nucleo
startup_stm32f030x8.s
startup_stm32f103xb.s
startup_stm32f302x8.s
startup_stm32f401xE.s
Release_Notes.htm
Sadeleştirmiş olmama rağmen, yukarıdaki folder yapısının ne kadar kalabalık olduğu görülüyor. Klasörlerin (folder) çoğunun alt klasörlerini göstermedim. Sadece benim ilgilendiğim STM32F302R8 ile ilişkili olanları göstermeye çalıştım.
Benim Nucleo modülüm STM32F302R8 li olduğu için beni ilgilendiren klasör ve dosyaları yeşil fon üzerinde dolgun italik harflerle belirginleştirdim. Diğer klasör ve dosyalar bana lazım değil. Bununla birlikte bu projede gereksiz olan dosyaları silmeden devam edeceğiz. Önce bütünlüğü bozmadan sonuç alalım.
ST SPN7 PAKETİNİ NEREYE KOYALIM
Bu paketi CubeIDE ye aktaracağız, ama şöyle bir durum var. Cube IDE “import” ettiğiniz dosyaları kendi çalışma alanına (Work space) kopyalamıyor, olduğu yerde bırakıp yarattığı linkler ile orijinal dosyaları kullanıyor. Yani yapılan değişiklikler, bizim yaptıklarımız olsun, Cube IDE nin import esnasında yaptıkları olsun hep orijinal dosyaları değiştiriyor.
Bu nedenle, paketin orijinalini bozmamak için bir kopyasını çalışma alanımıza koyup çalışmakta yarar var.
Şimdi bu paketin bir kopyasını olduğu gibi çalışma alanımıza (workspace) koyarak işe başlayalım.
Benim durumumda bu klasörün yeri: Users/Selcuk/STM32CubeIDE/workspace_1.0.0
CUBE IDE’YE AKTARMA İŞLEMİNİN BAŞLATILMASI
Cube IDE yi başlatarak File menüsünden ya da navigator panelinde sağ tıklayarak açılan pencerede import seçeceğini tıklatalım.
Açılan pencerede import AC6 System Workbench for STM32 project seçeneği ile Next> butonuna basalım.
Bu seçim, kısaltılmış haliyle SW4STM32 platformuna işaret ediyor. En az sorunu bu tip paketlerde yaşadım, yani ilave manuel işlem yapılmasına gerek kalmadan aktarımlar yapabildim.
Açılan pencere ithal (Import) edeceğimiz projeyi seçeceğimiz ekran açıldı.
İTHAL (IMPORT) EDİLECEK PROJENİN SEÇİMİ
ST firmasının uygulama paketlerini çalışma platformuma aktarırken en çok sorun yaşadığım noktalardan birisi proje dosyasının seçimi oldu.
Zira görüldüğü gibi bu paket, 3 farklı platform ve -saymadım- 20-30 farklı mikro işlemciye yönelik kodları içeren 168 MB lık devasa bir paket. Bizim sadece STM32F302R8 e ait kodlara ihtiyacımız var, bunun boyutu da sadece bir kaç megabyte.
Boş yere 100 MB dan fazla disk alanı işgal ediyoruz.
Önceleri gereksiz dosyaları sildim. Bana gereken dosyaları da boş bırakılmış olan klasörlere taşıdım. Yani yukarılardaki klasör ağacı tablosunda yeşil fon üzerinde kalan (boş folder) notu ile işaretli klasörlere.
Ama bu şekilde yapmaya kalkıştığım aktarma işlemleri başıma büyük işler açtı. Tonlarca path parametresini yeniden ayarlamak gerekti, sonunda oldu ama zahmete değmedi.
Sonralarda bu dosya taşıma işinden vazgeçtim. Paketteki dosyaların yerlerini değiştirmeden import etmek en iyisi. Sadece gereksiz olan dosyaları sileceğim ama o işi de en sona bırakıyorum.
Bu yaklaşımın tek sakıncası gereksiz bir klasör zinciri içeriyor olması, o sorunu da kendi paketimizi oluşturduğumuzda aşabiliyoruz.
Directory butonuna basarak dosya sistemi içinde workspace klasörüne kopyalamış olduğumuz SPN7 proje dosyasını seçelim.
Open butonuna tıklayınca karşımıza bu paket içinde yer alan alt projelerin listesi geliyor. Bunların önündeki kutucukları kullanarak sadece STM32F302R8-nucleo olan projeyi seçiyoruz.
Diğer kutucuklar yukarıdaki gibi default konumlarında bırakılarak Finish butonuna basılır. Aşağıda ard arda gelen iki uyarı mesajını OK diyerek geçelim.
AKTARIM TAMAMLANDI – Projemiz CUBE IDE platformunda
Build butonuna basılarak (önce istediğimiz konfigürasyonu aktiflememiz gerekir, default olarak debug konfigürasyonunu kullanır.) program derlenir.
Her şey yolunda gitti ise derleme işi yukarıdaki gibi hatasız, sorunsuz sonuçlanır.
DERLEME SONRASI DURUM – OBJECT Dosyalar nerede?
Şimdi explorer ile workspace klasörünün son durumuna bakalım. Daha önce de görmüştük, çok derin bir klasör yapısı var, tek satıra sığmayacak. Dosya görüntüleyici ile aşağıdaki sıra ile ilerleyelim :
workspace_1.0.0/STM32CubeExpansion_SPN7_V1.1.0/Projects/
Multi/Examples/MotorControl/SW4STM32/STM32F302R8-Nucleo/COMM
bu şekilde ulaştığımız “COMM” konfigürasyonu içeriği için aşağıdaki ekran görüntüsüne bakalım:
Görüldüğü gibi, derlemeyi (build) yaptığımız COMM konfigürasyonu klasörü içinde mikroişlemciye yüklenmeye hazır .elf dosyası oluşturulmuş durumda.
Bunun yanında bir de Intel .hex dosyası oluşturmak için gereken konfigürasyon ayarını bir başka yayında vereceğim. Hex dosyası bazan mikroişlemci huysuzluk edip IDE üzerinden flash yükleme yapılamadığında lazım olabiliyor. O zaman IDE üzerinden değil ST Link V2 uygulaması ile doğrudan yükleme yapmak gerekebiliyor.
Sonuçta bizim ilgilenmediklerimiz de dahil olmak üzere bir sürü klasörden oluşan bir yapı elde ettik. Bunlardan başka mikroişlemciler ve platformlara ait olanlarını dikkatlice silerek bir temizlik yapılabilir. Şimdilik böyle bırakıyorum.