Küçük Dev: STM8 ve RTOS
Günümüzde mikrodenetleyici dünyası, özellikle Cortex serilerinin ortaya çıkışıyla birlikte baş döndürücü şekilde ilerliyor ve bu, özellikle ARM ve 32 bit işlemci serilerinin fiyatlarını oldukça aşağıya çekiyor. 5 yıl önceye kadar üzerinde CAN+USB barındıran işlemciler 7~8$ mertebelerine alınırken, günümüzde bu denetleyicileri 1.0$ altına bulmak mümkün. Durum böyle olunca bir çok eğitim merkezi, geliştirici, şirket ve üretici, kullanıcıları 32 bit ve ARM dünyasına hızla itmekte ve bu platformu öğrenmek zorunlu hale gelmektedir. Tüm bunların yanında eskinin popüleri, şimdilerin unutulan 8 bit aileleri ise gelinen fiyat seviyeleri ile hâlâ gündemde kalmayı başarmaktadır.
Günümüzde ARM denince ilk akla gelen bir kaç firmadan biri olan ST ise 8 bit tarafında ST7 felaketinden sonra STM8 serileri ile birlikte muhteşem bir başlangıç yaptı. Özellikle ARM serilerindeki fiyat düşüşü, üretim teknolojisindeki yenilikler STM8 ailesini özellikle tüketici ürünleri tasarımında fiyat/performans anlamında bir adım öne çıkarmaktadır. Tam bu noktada ise STM8 ailesinin en küçük ferdi STM8S003F3‘ü göz atmak gerekir.
– 16MHz STM8 Core with Harvards Architecture
– 8k Flash, 1k RAM, 128 byte EEPROM
– 2,95V to 5V
– Internal 16MHz RC Clock Source
– UART/SPI/I2C/IrDA/LIN
– 3 Timers
– 5 channel 10bit ADC
STM8S için de ST’nin klasik hale gelmiş discovery geliştirme kitini edinmek mümkün.
Derleyici ortamı için ise ST maalesef bu konuda yeterli destek sağlayamamakta ve kullanıcılara Cosmic ve STVD ortamlarını kullanmalarını önermektedir. Windows 10’un şu aralar piyasayı sürklase ettiği dönemde, sürekli kitlenen, derleme hatasının bulunamadığı, debug sorunları yaşanan bir derleyicinin kullanıcılara bu şekilde sunulması ST’nin bir türlü çözüm bulamadığı sorunlardan biri. IDE ve derleyici konusunda titiz iseniz ve 8k gibi bir boyut da uygulamanız için yeterliyse bu konuda önerim IAR yönünde olacaktır. Umarım bu konuda ileride ST, Cortex M0 ve M0+ serilerinde Keil ile yaptığı anlaşmayı IAR benzeri bir firma ile de yapar.
STM8S için ST’nin diğer serilerinde olduğu gibi standart kütüphanesi mevcut. Sorunsuz bir şekilde projenize adapte edebileceğiniz kütüphaneyi yer sıkıntısı yaşamanız durumunda deaktif edip, register erişimi ile program yazarak yer kazanımı sağlayabilirsiniz.
STM8 kullanılırken dikkat edilmesi gereken en önemli unsurlardan biri pinlere atanmış olan “Alternate Function” özelliğidir. Örneğin STM8S003F3 ile timer birimi dışarıdan tetiklenmek isterse ve TIMx_CHy gibi girişler kullanılmak istendiğide öncelikle “Option Byte” bölümünden, ilgili bacağın tanımlanması yapılmalıdır. Bunun için ST’nin ST Link ile kullanılan STVP programına ihtiyaç duyulmaktadır. STVP programı içerisinde ilgili pin aşağıdaki gibi “Alternate Funciton” olarak ayarlandıktan sonra, yazma komutu ile entegrenin ayarları tamamlanır.Bu bölümden ayrıca entegrenin koruma ve clock merkezi gibi ayarları da yapılabilmektedir.
STM8 ve RTOS
RTOS ya da Türkçe adıyla “Gerçek Zamanlı İşletim Sistemi”, günümüz mikrodenetleyicileri (özellikle de ARM ve 32bit tarafında) ile birlikte performanslı ve güzel sonuçlar çıkaran, belirli görevleri, öncelik sırasına göre, belirlenen sürece işleyen, aralarında iletişim sağlayan ve yöneten kod öbekleridir. Günümüzde bir çok RTOS sürümü bulunsa da FreeRTOS bir çok kullanıcı ve sponsor firma ile birlikte piyasayı özellikle 16 ve 32bit tarafında domine etmektedir. Yalnız konu düşük kaynak ve hafıza olduğunda FreeRTOS bazı durumlarda çözüm olmaktan çıkabilir.
STM8 ve RTOS ele alındığında bir elin parmaklarını geçmeyecek kadar sonuç bulunur: Atomthreads, OSA ve CocoOS.
RTOS kütüphaneleri bir başka kişinin ya da grubun yazdığı kodlar olduğu için bir çok kişi tarafından kullanılması, hatalar için çözümler ya da iyileştirilmeler yapılması, güncel olması gibi bir çok parametre, hangi RTOS’un güvenilir olduğu ve kullanılabilir olabileceği hakkında ip uçları vermektedir. Bu noktalar göz önüne alındığında;
OSA RTOS: Özellikle Microchip tarafında uzunca zaman kullandığım bu RTOS, XC8 ve XC16 derleyicileri ile uyumsuz ve son güncellemenin 2011 yılında yapılmış olması nedeniyle artık “kullanılmaması gerekir” ibaresini almıştır.
Atomthreads: Kullanıcılar tarafından sık tercih edilen RTOS’lardan bir tanesi. Oldukça güncel ve bir çok işlemciyi de destekliyor. Bazı komutların ASM olması OSA RTOS gibi derleyici değişiminde uyumsuzluk getirebileceğinden, gelecek projeler için dikkat edilmeli.
CocoOS: 2010 yılından beri devam eden ve hâlâ güncel olan RTOS, özellikle ANSI C standartı ile yazılmış olduğundan herhangi bir işlemciye adapte edilebiliyor ve kod taşınabilirliği artıyor.
Yukarıdaki değerlendirmeleri ele aldığımda tercihimi CocoOS’tan yana kullanıyorum.
CocoOS’un projeye dahil edilmesi de diğer RTOS’lara benzemektedir. RTOS’lar için klasik sayılabilecek uygulamada main.c dosyası aşağıdaki görünümdedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#include "stm8s.h" #include "Init.h" #include "cocoos.h" void Task_1(void) { task_open(); for(;;) { task_wait(50); LED_TOGGLE_0; } task_close(); } void Task_2(void) { task_open(); for(;;) { task_wait(100); LED_TOGGLE_1; } task_close(); } void Task_3(void) { task_open(); for(;;) { task_wait(200); LED_TOGGLE_2; } task_close(); } void Task_4(void) { task_open(); for(;;) { task_wait(400); LED_TOGGLE_3; } task_close(); } int main( void ) { CLK_Config(); General_GPIO_Init(); Timer2_Init(); os_init(); task_create(Task_1, 1, 0, 0, 0); task_create(Task_2, 2, 0, 0, 0); task_create(Task_3, 3, 0, 0, 0); task_create(Task_4, 4, 0, 0, 0); os_start(); } |
Uygulama çalıştırıldığında ilgili pinlerden alınan sinyalleri aşağıda görebilirsiniz. İncelemek için resmin üzerine tıklamalısınız.
Proje dosyalarını buradan indirebilirsiniz. Dosyayı indirdikten sonra uzantıyı .rar olarak değiştirmelisiniz.
Sonuç Olarak…
Her ne kadar günümüzde 32 bit işlemcilerin fiyatları düşme eğiliminde de olsa, hala tüketici elektroniği tarafında 8 bit işlemciler fiyat/performans bağlamında beklentileri karşılayıp popülerliğini koruyabiliyor. 32 bit işlemcilerle aynı kulvarda olmamasına karşın 8 bit işlemciler ile birlikte, küçük hafıza boyutlarına rağmen, touch kontrolden, sıvı seviye ve mesafe algılamaya, çeşitli basit kontrollerden, motor sürücü tasarımına kadar bir çok uygulama geliştirilebiliyor.
STM8 ile ilgili bilgilere buradan, CocoOS ile ilgili bilgilere ise bu site üzerinden ulaşabilirsiniz.
Herkese çalışmalarında başarılar dilerim.
Merhaba Fırat Bey,
Proje dosyaları linki açılmıyor? Sorun benden mi kaynaklı acaba?
Merhabalar, ilgili dosyayı güncelledim.
Merhaba , STM8S103F3P6 bu cihazi illa ST-Link ile mi programlayabiliyoruz?
Arduino ve ya USB to TTL ve ya direk pc ye takip programlayamaz mıyız?
Birde STM8S103F3P6 bu cihaz icin en iyi ide hangisi?
Merhabalar Yusuf,
ST-Link ST’nin kendi programlayıcısıdır. Bootloader olmadan böyle bir seçenek benim bildiğim sadece STM32 serilerinde mevcuttur.
Bence STM8’ler için en iyi ide şu an için IAR.
Elimde STM8S003K3T6C bulunan discovery kit var. Hangi program ile programlamak en iyi olur?
IAR for STM8 ile tabi ki.
iyi gunler dilerim. bende bir adet invertor var.bunun islemcisi stm8s 903k3tb .sanirim programinda bir karisiklik oldu yada bir hatasi var.programlayic ile dosyalarina bakip duzeltebilirmiyiz.kartin resmini gonderebilirim
Elbetteki bakamayız. Çünkü cihazdan Hex bile çekseniz ki korumaya alınmıştır buradan bir çıkarım yapılamaz.