STM32 HAL (donanım soyutlama katmanı) Kütüphaneleri

Geçmişte sadece donanım işinde olan yarı-iletken firmaları bugün aynı zamanda yazılım firmaları haline gelmiş durumda. Sattıkları elektronik komponentleri piyasada tutundurmak ve kullanımını yaygınlaştırmak için tasarımcıların işlerini kolaylaştıracak yazılım ve yazılım bileşenleri de sunuyorlar.

ST firmasının STM32 serisi için yayınladığı HAL kütüphaneleri STM32 serisinin üyeleri ile çalışmamazı kolaylaştırmaya yarıyor (bazen zorlaştırabiliyor da). Bir önceki yazımda donanım soyutlama kavramından bahsetmiştim. Donanım soyutlama katmanları, adı üzerinde, bizi donanımın ayrıntılarından soyutlayarak arayüz fonksiyonlarıyla donanımı kullanabilmemizi sağlıyor. Bunun dışında farklı ürün serileri arasında ortak bir fonksiyon kütüphanesi sağlayarak ürün geçişlerinde yazılımın mümkün olduğunca sabit kalarak , taşıma işleminin sorunsuzca halledilmesine yardımcı olur.

ST firması da kendi STM32 serisi altındaki değişik mikrodenetleyiciler için ortak donanım fonksiyonları içeren STM32 HAL’sini de bu nedenle yayınlıyor. Kütüphane kullanıp kullanmamak tamamen bir tercih. Bu tercihlerde aslında rol oynayabilecek birçok faktör bulunuyor.

Biliyoruz ki işlemcilerde en yüksek performans için kendi assembly dillerini kullanmamız gerekiyor. Aslında artık gelişmiş derleyiciler sayesinde C dilinde de assembly ile elde yazılmış kodlara yakın performansta kodlar üretilebiliyor. Geçmişteki Assembly – C dili tartışmalarına benzer şekilde şimdi de kütüphane kullanma veya kullanmama arasındaki seçim tartışma konusu haline geliyor. Eğer performans konusunda çok hassasiyet gerektiren bir proje ile uğraşıyorsanız her ayrıntıya hakim olarak adım atmak istiyorsanız hiçbir kütüphane veya hazır fonksiyon kullanmadan da işinizi halledebilirsiniz. Ancak sonuçta anlaşılması zor ve bakımını yapacakların arkanızdan pek da hayır duası etmeyeceği bir yazılım elde etmeniz de olası. Tek tabanca çalışanlar için pek sorun değil belki ama profesyonel geliştirilen birçok projenin ekiplerce  ve belki de yıllar boyu bakımının yapılacağı düşünüldüğünde ibrenin diğer yöne kayması olası. “Herşeyi kendimiz yapacağız (Burada icat edilmedi )/ Not invented here” sendromuna da dikkat!

Kütüphaneleri kullanırken de birazcık kütüphanelerin yazılış mantığını ve amaçları da göz önünde bulundurmak gerekiyor. Ve tabi kütüphaneler içerisinde de hatalar olabileceğini de her zaman göz önünde bulundurmalıyız. Burada da bir diğer önemli uyarı geliyor. Bu işlerde “ezber” maalesef felaket demek!

Kütüphane kullansak da kullandığımız mikrodenetleyicinin özelliklerine hakim olmak gerekliliği ortadan kalkmıyor. Çünkü kütüphane de doğrudan bu özelliklere göre yazıldığından fonksiyonları doğru olarak kullanmak için bu şart.

STM32 kütüphanelerinin geçmişi Standard Peripheral Library‘lere dayanıyor. Sonrasında bu kütüphaneler STM32 HAL Library’e dönüştü. Son olarak da Cube MX yazılımı ile entegre hale getirildi.

ST firması STM32 Serisi için sağladığı bütün yazılım ve araçları “Cube” olarak adlandırıyor. Bunların hepsine şu linkten ulaşabilirsiniz. Bu sayfadan STM32 CUBE MX yazılımını ve kütüphaneleri ayrı ayrı indirebilirsiniz.

Örnek olarak STM32F10x serisi için olan Cube HAL kütüphanesini indirdirip zip dosyasını açtığınızda aşağıdaki gibi bir klasör yapısı ile karşılaşacaksınız:

hal

Drivers klasörü HAL kütüphanesi ile birlikte 2 klasör daha içeriyor: CMSIS ve BSP. CMSIS, ARM firmasının sağladığı Cortex – M serisi için ortak sürücü dosyalarını, BSP ise ST firmasının çeşitli geliştirme kartları için “board support package” adı verilen destek fonksiyonlarını içeriyor.

HAL Kütüphaneleri içerisinden örnek olarak  Drivers\STM32F1xx_HAL_Driver\Inc klasörü altındaki GPIO kütüphanesi ile ilgili olan stm32f1xx_hal_gpio.h dosyasına bir bakalım:

Daha önce STM32F100 Discovery Kartı ile ilk adımlar adlı yazımda STM32F100 modelindeki GPIO işlemleriyle ilgili register’ları anlatmıştım. Dosya içerisinde GPIO işlemleri ile ilgili tanımlamalar ve fonksiyonlar yer alıyor.

Fonksiyonları, GPIO’larla ilgili ilklendirme  işlemlerinin (initialization) yapıldığı fonksiyonlar ve kontrol fonksiyonları olarak ili gruba ayırabiliriz. Başlangıç ayarlarının yapılması için de GPIO_InitTypeDef yapısı kullanılıyor.

typedef struct
{
 uint32_t Pin; /* Specifies the GPIO pins to be configured.
 This parameter can be any value of @ref GPIO_pins_define */
 uint32_t Mode; /*Specifies the operating mode for the selected pins.
 This parameter can be a value of @ref GPIO_mode_define */
 uint32_t Pull; /*Specifies the Pull-up or Pull-Down activation for the selected pins.
 This parameter can be a value of @ref GPIO_pull_define */
 uint32_t Speed; /*Specifies the speed for the selected pins.
 This parameter can be a value of @ref GPIO_speed_define */
}GPIO_InitTypeDef;
 
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
 
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

Fonksiyonların dönüş değerlerinde de GPIO_PinState gibi bir yapı döndürüldüğüne dikkat edin. Programlarımızda “sihirli” rakamlar yerine bu tür tanımlamalar kullanmak hem okunurluğu artırıyor hem de olası hataların önüne geçiyor. Burada GPIO_PinState değişkeni GPIO_PIN_SET ve GPIO_PIN_RESET değerlerinden birisini alabilir.

Örneğin GPIOA portundaki 12 nolu pini SET (1) yapmak istersek

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_12 );

HAL kütüphanelerindeki maceralarımız devam edecek! Lütfen beğendiğiniz yazılarımı daha çok kişiye ulaşması için sosyal medya platformlarında paylaşın!

7 thoughts on “STM32 HAL (donanım soyutlama katmanı) Kütüphaneleri

  1. Coşkun hocam bu yaştan sonra beni stm’e başlattınız bari hal kütüphanelerinden devamını getirseniz ya da bir eğitim ( cd ve ya online ) bu kışı öğrenerek geçiririz.
    not: değerli paylaşımlarınız için teşekkürler..

    • Yoğunluktan teknik içerikli yazılara çok ağırlık veremedim son dönemde. Ancak bu konuda yazan arkadaşlar da çoğaldı, onlardan faydalanabilirsiniz. Yakın zamanda da eğitimlere başlıyoruz, duyurularını yapacağız, takip edebilirsiniz: http://www.argeturkakademi.com/

  2. Stm’im gpıo ve diğer kütüphaneleri kullanılarak , tiva c gibi arm tabanlı kartlarda programlanabilirmi ?

    • Hayır. Bu kütüphaneler o mikrodenetleyiciye özgü olarak yazıldığından başka aileler için kullanılamazlar. Tiva serisi kullanmadım ama o seri için TI firmasının geliştirdiği kütüphaneler olabilir, onlara bakabilirsiniz.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak.