bu en temel proje olduğu için her adımı detaylı açıklamakta faydalı olacaktır.
ilk önce projemiz için new project diyoruz.
Arama kısmına
F103C8T6 yazdığımız zaman aradığımız işlemci tipi ekranımıza çıkmaktadır. Kendi
tercihimize yıldız atıp favorilere ekleyerek de daha sonra her seferinde arama
yapma ihtiyacından kurtulmuş olmaktayız. Çıkan ekrana projemizin adını
girdiğimiz takdirde Finish diyerek projemiz için boş şablon oluşmaktadır.
Projemizin SYS
ayarları:
System Core >
SYS > Debug > Serial Wire
Projemizin Clock
ayarları:
GPIO ayarları:
Sol tık ile PC-13
pinin seçiyoruz. Pini nasıl konfigüre etmek istediğimize dair seçenekler
çıkıyor. Burada GPIO Output seçerek PC13 pinini kullanıma hazır hale
getiriyoruz.
Ardından Ctrl + S
bastığımız zaman projemiz STM32CubeIDE programı ile tekrardan güncellenecektir.
Core > src > main.c bizim ana kodumuzu yazacağımız yere geliyoruz.
Biz istiyoruz ki PC13 pinine bağlı bir LED 500 milisaniye aralıklarla yanıp sönsün. Bu işlem için While(1) döngümüzün içine HAL_GPIO_TogglePin fonksiyonu ile ledi yakıp söndürmekteyiz.
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
Kod bloğumuzu
yazdıktan sonra
Debug için ST-Link ve STM bağlantısı
Debug etmek için
Debug butonuna basıyoruz. Karşımıza çıkan ekranda ise Apply ardından da Ok
diyerek Kod atma işlemini gerçekleştirmeye başlıyoruz.
Debug ettikten
sonra sistemin kendi otomatik kesmesi olarak HAL_init(); fonskiyonunda
durmaktadır. F8 Resume ile devam edebilmekte, Ctrl + F2 ile Terminate ederek
durdurabilmekte ve Disconnect butonuyla da arayüzümüzün kodumuzla olan
bağlantıyı kesebilmekteyiz. Step Into F5 ile kesmeye girdiği fonksiyonun da
içine giriyorken, Step Over F6 ile de fonksiyonu adım adım tamamlayarak
çalışmaktadır. Bu hata ayıklamak için oldukça işimize yaramaktadır.
Resume dediğimiz
anda ise fonksiyonumuz kesintisiz olacak bir biçimde çalışacaktır. Fakat
yazdığımız kodda bir eksik vardır. Herhangi bir delay fonksiyonu
eklemediğimizden ötürü kodumuz beklemeye girmeden açma kapama gerçekleştirecek
ve bundan dolayı da açıp kapandığı takip edemeyeceğiz. Bu durumda
HAL_Delay(500); kod satırı ekleyerek Toggle komutundan sonra yarım saniyelik
bir bekleme süresini koda dahil etmekteyiz.
Artık yeni kod
bloğumuz aşağıdaki gibi olmaktadır. Bu sayede ilk başarılı Led uygulamamızı
gerçekleştirmiş olduk.
Burada önemli bir
bilgilendirme yapmakta fayda var; HAL_Delay() fonksiyonu içerisinde yazan
sayının 1 fazlası kadar milisaniye değerinde gecikme yapar yani;
HAL_Delay(0); // 1 milisaniye gecikme
HAL_Delay(1); // 2 milisaniye gecikme yapar.
HAL_Delay(500); // 501 milisaniye gecikme yapar.
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
Bu kod bloğu ile GPIO pin durumu 1 ise 0,
0 ise 1’e dönüştürülür. Fakat alternatif bir yöntem olarak da
Aynı işlem aşağıdaki kod ile de yapılabilir.
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
Kod üzerinde değişiklik yapıldıktan sonra CTRL + B ile Build ederek kodumuzu güncelleyebilmekteyiz. İlk uygulama ile beraberinde değer takibinin nasıl gerçekleştirilebildiğini takip edebilmek için RAM bellekte değer kaydetmemiz gerekmektedir.
/* USER CODE BEGIN 0 */
uint32_t degisken = 0;
uint8_t ledvalue;
/* USER CODE END 0 */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
degisken = degisken + 1;
HAL_Delay(499);
if (degisken > 1000) {degisken = 0; }
ledvalue = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
CTRL + B ile Build
ederek kodumuzu güncelleyebilmekteyiz. Daha sonra Debug işlemini başlattıktan
sonra HAL_Init fonksiyonunda otomatik kesmeye giren hata ayıklama modumuzun
devam etmesi için F8 Resume’ye basıyoruz. Burada hem Led pinimiz olarak
programladığımız C13 pinimizin durumu hem de her yarım saniyede 1 değeri artan
‘degisken’ isimli global değişkenimizin
durumunu takip edebilmek amacıyla Live Expressions sekmesine
ihtiyaç duyulmakta.
Add new expression
ile okumak istediğimiz global değişkenimizi yazmamız gerekmekte.
Resume dediğimiz
takdirde değerler kendi kendine değişecektir.
Burada dikkat
edilmesi gereken esas noktalardan biri gerçek zamanlı olarak takip etmek
istediğimiz değişkenin User Code Begin 0 ve User Code End 0 başlıklar
arasında yazılması gerektiğidir. Void main fonksiyonunun içerisine yazılan
değişkenler Live expression sekmesinden takip edilemez.
Yorumlar
Yorum Gönder