STM32F10x standard peripheral library

Başlatan Müh. müh., 19 Haziran 2014, 00:49:19

Müh. müh.

Yoğun istek üzerine yeni konu açıp, milleti bilgilendirme talebi doğdu. Bazı konular baltalandı diye sıkıntı oluştu. Neyse, st librarylerini burada nasıl kullancağımızı anlatmaya başlıyoruz. Haydi bakalım.

LET'S BEGIN..!

Bildiğiniz üzere st mcu lar günümüzde çok revaçta. Bazı modelleri gerçekten çok ucuza bulunabiliniyor vede içersinde herşey var. Durum böyle olunca, üstlerimiz bizlere, stm32 kullacaksın dediklerinde, hay hay efendim, diyebilmemiz için bu yazıyı okumamız gerekli! :D


Öncelikle ben register seviyesinde kod yazıyorum. XXX->YYY şeklinde.. St nin bu librarysini hiç kullanmadım ama kullanırken sorun yaşamak yada becerememek için bir neden yok. Benim gibi register seviyesinde yazılım yazanlar, zaten hemen bu library e adapte olacaktır. Arm ile hiç haşır neşir olmamış olanlar içinse, adeta basic kıvamında çalışıyor diyebilirim. Bu libraryler hakkında soru sorduğum başlıkta, keşke mikroc nin help dosyası kıvamında bir döküman olsa demiştim. (Elimde şuan pdf halinde döküman var ama daha inceleyemedim) St library, şuan için mcu ya azacık hakimiyet gerektiriyor. Neden böyle dedim? Çünkü, arm mcular için peripheral modüllerin clocklarını aktif etmek, onların bazı bitlerini set etmek vs gerekir. Daha önce pic gibi mcular ile haşır neşir olmuş kardeşlerimiz, dolayısı ile,

TrisX = 0;
PortX = 0x01;


gibi birşey yazmak ister. Halbuki stm mcularda öncelikle porta hangi modda çalışacağını, çalışma hızını, portun clockunu vermemiz gerekir.(İsteğe göre pull up vs de yapabiliriz)

Bu yüzden, arm mcu hakkında birşey bilmeyen kardeşlerimiz, aşağıdaki kodlardan pekte birşey anlamayabilir.

GPIO_InitTypeDef GPIO_InitStructure;  

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);


speed 50mhz ne? o ne? bu ne? nerede bu devlet? nerede bu millet?


Şimdi öncelikle, şu fonksiyon şu işe yarıyor diye açıklama yapmayacağım. Çünkü yukarıda bahsettiğim üzere, daha önce hiçbir projede st librarylerini kullanmadığımdan, ne kadar yukarıdaki kod satırlarının ne işe yaradığını bilesemde, yanılgı oluşmaması açısından, bunu yapmayacağım. Fakat, bu yazıda, STM32 standard peripheral library yi nasıl edineceğimizi, anlatacağım.


Efendim, öncelikle her zaman ki gibi çalışacağımız mcu ların kendi sayfasında design support sekmelerinde, kullanıcı için yazılmış destek dökümanları bulunur. Bizde yanen böyle yapıp, stm mcunun kendi sayfasından STM32 standard peripheral library ile ilgili dökümanları indireceğiz. Ben örnek olması açısından STM32F103 ü seçtim ve onun için STM32F10x standard peripheral library i indirdim. Diğer mcu serileri için farklı peripheral kütüphaneleri indirmeliyiz. Sonrai F10x kütüphanesini indirdim, F4xx serisini programlayacağım gibi yanılgılara düşmeyelim. Library linkini "google" dan direk buldum. Mcu nun kendi sayfasında da olması gerekir. Linki aşağıdadır.

http://www.st.com/web/en/catalog/tools/PF257890#

Librarymizi indirdikten sonra, bilmemiz gerekenler şunlar. Keil ın v5 ver üzerinde, bu libraryler, proje oluşturduğumuzda otomatik olarak include edilmiş halde geliyormuş. Emblocks tada böyle olması gerekli. X, Y, Z compiler larda durum nasıl bilmiyorum. Tavsiyem şudur ki, keil kullanıcısı iseniz, internetten v5 veya üzerini indirin gitsin. Çünkü libraryleri include etmekte biraz problemli.

Neyse,

İndirdiğimiz library klasörü içersinde, \stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples şu veri yolu kapsamında examplelara ulaşacaksınız. İçeriğinin print screen edilmiş halini aşağıya ekliyorum.



Klasörler içersinde dallara ayrılmış farklı farklı example lar göreceksiniz. (Mesela dma için 5 farklı örnek mevcut) Bu örnekler .c ve .h dosyaları halindedir. Yani project değildirler. Bu yüzden onları açıp, direk compile edemeyiz ama içersindeki bilgilerden faydalanabiliriz ki, zaten bu amaçla yazılmışlardır.

Şimdi hiç arm bilmeyen ve reference manual ini okuyup, birşey anlamayan kardeşlerimiz,

-Öncelikle kullandığınız yazılımın, proje dosyası oluşturulurken otomatik olarak bu libraryleri import eden versiyonuna geçin,

-Örnekler klasöründeki, gerekli donanım örneklerini açın, direk içersindeki kodları kopyalarak, kendi projenize yapıştırın.

-Projenizi tamamladıktan sonra, arda kalan vakitte ingilizcenizi geliştirmek için aktiviteler yapın.



Bu konu için yazacaklarım şimdilik bu kadar. St lib. ler ile daha önceden deneyim yaşan arkadaşlarımız, devamını getirirse, çok sevinirim.



Sevgilerle,

Müh Müh
Destiny of white is dirtied. Destiny of black is found guilty...

muhittin_kaplan

Hocam Benimde Katkım Olsun..GPIO ile devam ediyoruz. STM ile çalışırken bilmemiz gereken bazı şeyler var. Bunlar GPIO ile çalışmaya başlamadan Onun enerjisini (aslında Clock Uyguluyoruz) vermektir.

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);


yukardaki kod GPIOA ya clock uygular.
Sizin Yukarda verdiğiniz Kodları teker teker açıklayacak olursak


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; //PIN 0 ile PIN 2 ye ayar yapacağımdan dolayı seçim  yeptım
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;// Yukardaki pinlerin MAXIMUM çalışma hızları 50Mhz olsun burası 100,50 ve 2 olabilir. (tamamiyle Güç Harcamasıyla alakalı)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//Bu Pinler PushPull

GPIO_Init(GPIOD, &GPIO_InitStructure);//Bu ayarları GPIOD nin Yukardaki pinlerine Uygula.


tabi bu işlemlerden önce işlemciyi INIT etmek gerekir (SystemInit)


kadirstn.25

merhaba. kilitli header dosyasını nasıl açabilirim ? ben de stm32f10x.h header i kilitli içeriğini değiştirmem gerekiyor ama değiştiremiyorum. yardımcı olur musunuz ?

MrDarK

Dosyaya sağ tıkla salt okunur özelliğini kaldır.
Picproje Eğitim Gönüllüleri ~ MrDarK