Yazılım dünyasına girdiğimizde "Hello World" ne ise, elektronik ile yazılım birleştiği dünyada yapacağınız ilk iş led yakmak olur. Gerek lisede gerek üniversitede laboratuvara ilk girdiğinizde *** ya da başka bir entegre üzerinden led yakarsınız. Bu konumuzda STM32F4 ile üzerindeki ledleri C dili ile yakacağız.
Önceki videoda ben Keil version5 kullanacağımı söylemiştim. Linux'a geçme durumunda kaldığım için Atollic'den devam ediyorum, çünkü Keil, Linux destekli değil.
Atollic kurulumu için ST'nin sitesine gidip indirebiliriz, ben Debian komutlarını vereceğim;
Kod:
Arşivi Ayıklamak;
$ tar -xvf ~/Downloads/Atollic_TrueSTUDIO_for_STM32_linux_x86_64_v9.1.0_20181011-1241.tar.gz
Konum Belirleyip Yükle
$ cd Atollic_TrueSTUDIO_for_STM32_9.1.0_installer && sudo ./install.sh
Terminalden Başlat
$ cd /opt/Atollic_TrueSTUDIO_for_STM32_9.1.0/ide && ./TrueSTUDIO
Bizim bir de STM32CubeMX programına ihtiyacımız olacak. Bunu da ST'nin sitesinden indirebiliriz.
STM32CubeMX bir yazılım yapılandırma aracıdır.
[+]CubeMXin aşamalarına değinecek olursak[+]
-Önce development kitimizi belirliyoruz.
-Gerekli olan Input-Outputları enable ediyoruz.
-Clock Signal Configuration yapıyoruz.
-Gerekli olan farklı amaçlı configi de ypıyoruz.
-Son olarak derleyicimizi belirleyip kodumuzu generate ediyoruz.
Atollic'de yeni bir proje oluşturacağız.
1.New Project diyerek yeni bir C formatlı dosya oluşturuyoruz.
2.Gömülü sistem programlayacağımız için Embeded'i seçiyoruz.
3.Boardımızın ailesini belirliyoruz.
Öncelikle kütüphanemizin içine gidiyoruz (stm32f4xx.h)
HSE_VALUE olacak burada. Bu bizim external osilatörümüzün frekans değeridir.Yani harici osilatörümüzdür. Biz bunu 8 MHz olarak belirliyoruz.
HSI_VALUE ise 16 MHz olacak şekilde konfigüre ediyoruz.
Bizim bilmemiz gereken şey PLL ve FLL'dir. PLL; Faz kitlemedir, FLL; Frekans kitlemedir.
Buradaki formülleri mutlaka bilmelisiniz. İşin mühendisliği buradadır. Bu işleri STM32CubeMX'den de yaptırabilirsiniz fakat dediğim gibi, işin formülünü bilmelisiniz, hesabınızı yapabilmelisiniz.
Genel olarak bir kapalı çevrim kontrol blog diyagramını düşünün, burada referans giriş var, referans giriş ile üretilen sinyal karşılaştırılarak hata sinyali elde ediliyor. Bu hata sinyali controllerdan geçirilerek referans(set) değerindeki sinyal üretilmeye çalışılıyor amaç budur.
External ya da Internal Değerini / M'e bölüyorsunuz bu sonucu N ile çarpıyorsunuz ve size VCO'yu veriliyor.
(E ya da I / M) * N = VCO (Voltage Controlled Oscilator
Buradan çıkaracağımız değerler;
PLL_M 8
PLL_N 336
PLL_P 2
PLL_Q 7
SystemCoreClock 168 MHz olmalı (168000000)
Ve Structure nedir bilmeliyiz.
Structure'ın Türkçe karşılığı yapı demektir. Daha önce tanımlanmış olan veri tiplerinin bir araya gelmiş halidir.-ki bu veri tiplerine daha önce tanımladığımız structurelar da dahildir. Bunu daha iyi anlamak için şöyle açıklayalım; Bir yolu, structureın, veriyi kullanıcıya ya da o programı kullanacak olan kişiye daha rahat bir şekilde gruplamak için kullandığımızı söyleyebiliriz.
Şimdi kodumuzu yazalım;
Yararlanacağımız structure GPIO_InitTypeDef
Daha önceki konuda Bus Matrix'in ne olduğundan bahsetmiştik. Biz yapacağımız işleri A portuna yükleyeceğimizden dolayı GPIOA'ya giden yolu ENABLE etmeliyiz bu işlem için AHB1 busını kullanacağız.
Şimdi structuredan alacağımız argümanlara değinelim;
GPIO_Pin //Burada pinlerimizi belirtiyoruz.
GPIO_Mode //Burada pinlerimizin out olduğunu belirtiyoruz.
GPIO_OType // Push Pull - Open Drain olduğunu belirtiyoruz.
Bu işlemleri gerçekleştirdikten sonra A portuna kaydedip X'e atayacağız. Bu da şu şekilde gerçekleşecek;
GPIO_Init(GPIOA, &X)
Biz buraya kadar konfigürasyon ayarlarımızı yapmış olduk. Şimdi programın kendisine gelelim;
GPIO_SetBits( GPIOA, Buraya Pinleri gireceğiz)
Bu kod girilen pinleri Logic1 yapar aktif hale getirir.
Kod:
#[COLOR="Blue"]include[/COLOR] "[COLOR="Orange"]stm32f4xx[/COLOR].h"
#[COLOR="Blue"]include[/COLOR] "[COLOR="orange"]stm32f4_discovery[/COLOR].h"
[COLOR="DarkOrchid"]GPIO_InitTypeDef[/COLOR] [COLOR="Red"]X[/COLOR];
voıd settings(voıd)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA ,[COLOR="Cyan"]ENABLE[/COLOR]);
[COLOR="Lime"]X.GPIO_Pin[/COLOR] = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
[COLOR="lime"]X.GPIO_Mode [/COLOR] = GPIO_Mode_Out;
[COLOR="lime"] X.GPIO_OType[/COLOR] = GPIO_OType_PP;
GPIO_Init(GPIOA, &[COLOR="Red"]X[/COLOR]);
}
int main(voıd)
{
[COLOR="MediumTurquoise"]config[/COLOR]();
[COLOR="Yellow"]while[/COLOR](1)
{
GPIO_SetBits(GPIOA, GPIO_Pin12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin 15);
}
}
https://paste.ubuntu.com/p/xgyT7MntBk/
[ame="https://www.youtube.com/watch?v=19B9QSsBCoU&t=431s"]https://www.youtube.com/watch?v=19B9QSsBCoU&t=431s[/ame]





