Merhaba arkadaşlar, bu yazımda debug yapılırken kullanılan bir özellikten bahsedeceğim. Denetliyici üzerinde program koşarken anlık olarak değişken değerlerini görmeniz gerekebilir. Bu gözlem debug menüsünden gerçekleştirilebilir. Birde debug ekranına bir yazı göndermek isteyebilirsiniz. Örneğin; denetleyici herhangi bir pinde ki LED’i yaktı ve debug ekranında “Led on” gibi bir mesaj görmek istiyorsunuz. Bu yazımda tam olarak mesajın debug ekranına nasıl gönderileceğini anlatacağım.
İlk olarak CubeMx programını açarak projemizin konfigürasyonunu oluşturalım. Her setup işlemimizde yaptığımız adımlara ek olarak printf fonksiyonunun çalışması için bir değişikliğe ihtiyacımız var. Bildiğiniz gibi System Core -> SYS -> Debug -> Serial Wire seçimini yapıyorduk. Bu sefer;
- System Core -> SYS -> Debug -> Trace Asynchronous Sw
- System Core -> RCC -> High Speed Clock ve Low Speed Clock -> Crystal/Ceramic Resonator
- PD12 pini GPIO_Output olarak ayarlayalım
Gerekli ayarları yaptıktan sonra Generate Code diyerek kodlama tarafına geçelim.
Debug ekranına mesaj yollamak için kullanacağımız komut printf(“”); Bu komutun çalışabilmesi için stdio.h kütüphanesinin projeye dahil edilmesi gerekli. O halde Includes bölümüne #include “stdio.h” komutumuzu yazalım.
1 2 3 |
/* USER CODE BEGIN Includes */ #include "stdio.h" /* USER CODE END Includes */ |
Program, çıkış olarak ayarladığımızı PD12 pinini 500ms aralıklar ile toggle yapsın. Pin lojik-1 olduğunda debug ekranında “Led on”, lojik-0 olduğunda “Led off” mesajını görelim. Bu işlemi yapacak olan yazılımı while bloğu içerisine yazacak olursak;
1 2 3 4 5 6 7 8 9 10 11 12 13 |
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET); printf("Led on\n"); HAL_Delay(500); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET); printf("Led off\n"); HAL_Delay(500); } /* USER CODE END 3 */ |
Yazdırma işlemimiz henüz bitmedi. Derleyicide bazı ayarlar yapmamız gerekiyor. İlk olarak Project -> Manage -> Run-Time Environment… bölümünü açalım. Ve gerekli ayarları aşağıdaki gibi yapalım.
Bu işlemden sonra Flash -> Configure Flash Tools.. bölümünü açalım. Açılan pencerede Debug -> Settings bölümünü açalım.
Açılan pencerede Trace bölümüne gelerek aşağıdaki ayarları yapalım.
Projenizi kurarken denetleyici frekansı değiştirilmediği için 16MHz olarak ayarlanmıştır. Frekansı değiştirdiyseniz Core Clock değerini setup ekranında ki HCLK frekans değeri ile değiştirmeniz gereklidir.
Derleyici ayarları bitti, debug ekranına geçelim. Debug -> Start/Stop Debug Session bölümünü açalım. Debug viewer pencerisinin gözükmesi için aşağıdaki gibi pencereyi açalım.
Son olarak Debug -> Run veya F5 butonu ile yazılımın denetleyici üzerinde çalışmasını sağlayalım. Tüm işlemleri doğru yaptıysanız sağ altta ki debug viewer penceresinde 500ms aralıklar ile “LED on” ve “LED off” mesajını görmelisiniz.
Printf işlemini pekiştirmek için bir önceki buton uygulaması ile bu dersimizde ki uygulamayı birleştirebilirsiniz.
- Butona basılınca debug ekranında “button pressed” yazsın,
- Butona basılınca PD12 pini lojik-1 olsun ve debug ekranında “PD12 Lojik-1” yazsın,
- x değişkeni oluşturup 0 değerini atayın. 250ms aralıklar ile x değişkenini arttırın. x değeri 5 olduğunda PD14 lojik-1 yapılsın, x değeri 10 olduğunda PD14 lojik-0 yapılsın. Yapılan tüm işlemler ve x değeri debug ekranına yazdırılsın.