STM32 printf() FONKSİYONUNUN UART’a YÖNLENDİRİLMESİ

Standard C kütüphanelerinin printf() fonksiyonu, yazılım geliştirirken çok kullandığımız bir araç. Bu fonksiyon varsayılan hali ile çıktılarını sistem konsoluna gönderiyor. Ansak mikro denetleyicilerle çalışırken bu çıktıyı seçtiğimiz herhangi bir USART porta yönlendirmek isteriz. Bunun için yazılımımıza 8-10 satırlık bir kod eklememiz gerekiyor.

Bu yayında bu işin nasıl yapılacağını anlatıyorum.

Continue reading “STM32 printf() FONKSİYONUNUN UART’a YÖNLENDİRİLMESİ”

STM32 – LCD ÜZERİNDE printf() TARZINDA FORMATLANMIŞ TEXT GÖRÜNTÜLEMEK

Gerek TFT gerekse popüler 4×20 benzeri ekranlara text ve sayısal değerleri, pritf() kullanır gibi tek bir komutla yazmayı hep istemişimdir.

Geçenlerde you cube üzerinde Eddie Amaya’nın buna bir çözüm önerdiğini görünce çok sevindim. Bu güne kadar haberdar olmadığım bazı standard C fonksiyonlarını kullanarak bunu yapmak mümkünmüş. Ondan aldığım ilham ile kendi LCD ve TFT kütüphanelerime böyle bir fonksiyon ekledim.

I2C arayüzlü 20×4 LCD örneği üzerinden bunu nasıl yaptığımı anlatacağım.

Continue reading “STM32 – LCD ÜZERİNDE printf() TARZINDA FORMATLANMIŞ TEXT GÖRÜNTÜLEMEK”

STM32 İLE PID KONTROL ALTINDA DC MOTOR SÜRMEK

Bu yayın ile oldukça kapsamlı bir konuya el atıyoruz. Küçük bir DC motoru, sabit bir hızda çalıştırmak için bir kapalı çevrim süreç kontrol sistemi oluşturacağız.

Bunu yapabilmek için, mikro denetleyici sistemleri geliştirirken edindiğimiz neredeyse tüm birikimimize ihtiyacımız olacak. Öyle ki :

  • Motoru istediğimiz hızda sürebilmek için bir TIMER ile PWM kontrol sinyali üreteceğiz
  • Motoru sürmek için bir L298 Motor sürücüyü kontrol edeceğiz.
  • Motorun devir hızını bir Hall Effect sensör ile algılayıp bir TIMER’in “Input Capture” fonksiyonundan yararlanarak ölçeceğiz.
  • İstediğimiz çalışma hızını bir potansiyometre ile ayarlamak üzere bir ADC kullanacağız.
  • Geliştirdiğimiz kodun kontrolu ve hata ayıklaması için ARM Cortex M çekirdeğinin SWV/ITM araçlarını kullanacağız.

Bu tekniğin bir çubuğu dengede tutmak için geliştirilmiş başka bir uygulamasını görmek için daha yeni bir yayınım var. Ona ulaşmak için burayı tıklayabilirsiniz.

Bu yayındaki projede motora akım sınırlaması uygulamıyoruz. Akım sınırlaması ile daha gelişmiş bir motor sürücü için “Akım sınırlaması altında DC motor sürmek” yayınıma başvurabilirsiniz.

İşimiz çok yani, hadi başlayalım.

Continue reading “STM32 İLE PID KONTROL ALTINDA DC MOTOR SÜRMEK”

STM32-A4988 İLE STEP MOTOR SÜRÜLMESİ

Adım motoru sürmek için ST nin L298N tümleşik devresini kullanıyordum. Ancak, bipolar teknoloji kullanan bu tüm devre, daha modern MOSFET yapıdaki rakiplerine göre verimsiz kalıyor.

Ayrıca, kullanmakta olduğum yarım adım (half-step) sürüm yöntemini de L298 ile hakkını vererek uygulayamıyordum. Bu, başlangıçta işin kodlama tarafına ağırlık verdiğimden öncelik vermediğim bir konuydu.

Bir süre sonra, malzeme kutularımda beklemekte olan A4988 sürücü kitini cepheye sürerek daha gelişmiş motor sürüm tekniklerini kullanmaya karar verdim.

Bu yayının konusu bu; A4988 ile adım motoru sürülmesi – L298 ile karşılaştırmalı olarak.

Continue reading “STM32-A4988 İLE STEP MOTOR SÜRÜLMESİ”

STM32 cubeIDE-SWV İLE HATA AYIKLAMA-3

STM32 SWV – printf() KULLANARAK KONSOLA MESAJ GÖNDERMEK

Gömülü uygulama geliştiricileri yazılımlarında hata ayıklamak için, UART üzerinden PC ye mesaj gönderme yöntemini daha ilk “Hello world !” mesajını gönderdikleri gün kullanmaya başlarlar. Genelde, sonrasında da bu böyle devam eder. Bunu C dilinin standard kütüphane fonksiyonu olan printf() i kullanarak yaparız.

Şimdi, SWV araçlarını kullanarak UART bağlantısını devre dışı bıraktığımıza göre, artık printf() mesajlarını da SWV konsollarından birine göndersek iyi olmaz mı?

Bu bölümde printf() çıktılarının SWV ITM Data konsoluna yönlendirilmesini göreceğiz.

Continue reading “STM32 cubeIDE-SWV İLE HATA AYIKLAMA-3”

STM32 cubeIDE- SWV İLE HATA AYIKLAMA-2

STM32 SWV – DEĞİŞKEN DEĞERLERİNİN İZLENMESİ

SWV serimizin birinci bölümünde bir kod parçacığının çalışma süresini ölçmeyi anlatmıştım. Bunun için süresini ölçeceğimiz sürecin başında ve sonunda ST Link’e birer karakterlik işaret gönderip SWV trace log konsolu üzerinde bunların zamanları arasındaki farkı hesaplıyorduk. Zaman ölçümü böyle.

Bu bölümde yine SWV araçlarını kullanarak program değişkenlerinin değerlerindeki değişiklikleri izlemeye çalışacağız. Bunların değerlerinin zaman eksenindeki değişimini osiloskop benzeri bir grafik pencere üzerinde görüntüleyeceğiz.

Continue reading “STM32 cubeIDE- SWV İLE HATA AYIKLAMA-2”

STM32 cubeIDE-SWV İLE HATA AYIKLAMA-1

STM32 cube IDE platformu üzerinde proje oluşturarak gömülü uygulama geliştirme konularında epeyi yol aldık. Artık sıra biraz daha ileri konulara geldi.

Bu başlangıç, bundan böyle hayatımızı daha zorlaştıracak işlere el atacakmışız izlenimi veriyor ama öyle değil. Tersine, şimdiye kadar kullanmadığımız bazı teknikleri öğrenip, çalışmalarımızı kolaylaştıracak yeni araçlar keşfedeceğiz.

Bu yayında ARM Cortex M çekirdeğinin SWV ve ITM araçlarını kullanmayı öğreniyoruz. Bu serinin ilk bölümünde konuya giriş yapıp, başlangıç ayarlarına ve bir kod blokunun çalışma süresinin SWV ile nasıl ölçülebileceğine bakacağız.

Continue reading “STM32 cubeIDE-SWV İLE HATA AYIKLAMA-1”

STM32 CubeIDE – SWD FLASH PROBLEMİNİ AŞMAK

STM32 Projelerimde ST Link V2 yi SWD (Serial Wire Debug) modunda çalıştırarak kullanıyorum.

ST Link ve STM32 yi elime ilk aldığım dönemlerde, kullandığım geliştirme kitlerinden bir kaçı aniden program yüklenemez hale gelmişti. Yükleme yapmaya kalkıştığımda “No device found on target” şeklinde bir mesaj almaya başlamıştım. Ben de “bunlar bozuldu” diyerek bu kitleri bir kenara koymuştum.

Sonradan öğrendim ki, bozulmamışlar. Hatalı bir kod yükleyerek ben kilitlemişim. Bunları tekrar hayata döndürmenin basit bir yöntemi varmış. Aşağıda anlatacağım bu yöntemi önceleri ST Link Utility adlı uygulamayı kullanarak uyguluyordum. Ama artık MacOS ye geçtim, bu uygulama ise sadece Windows için var. O halde aynı işlemi STM32 CubeIDE platformu üzerinden yapmanın bir yolu olmalı. İşte aşağıda o yöntemi anlatıyorum.

Continue reading “STM32 CubeIDE – SWD FLASH PROBLEMİNİ AŞMAK”

STM32 CubeIDE – PROJEYE LINK VEREREK HARİCİ DOSYA EKLEMEK

Oluşturduğumuz yeni projelere daha önceki projelerimizden aldığımız dosyaları kopyala-yapıştır tekniği ile eklemeyi önceki yayınlarımda anlatmıştım. “Programa kaynak kodu eklemek” başlıklı yazım için burayı tıklayabilirsiniz. Aslında burada da, yazının amacı bu olmamakla birlikte, aynı işi kopyala yapıştır yöntemi ile değil de Import fonksiyonu ile yapmayı anlatmış oluyorum.

Bir süre sonra aynı kaynak kodlarını bir çok programımızda kullanır duruma geliyoruz. Ancak bu durumda karşımıza ciddi bir sorun çıkıyor. Türlü çeşitli yerlere kopyaladığımız bu kod bloklarında zaman zaman değişiklikler, iyileştirmeler yapmamız gerekiyor. Bu da aynı adı taşıyan kaynak kodların çeşit çeşit versiyonları ile ortalığa saçılmasına yol açıyor. Hangisi en son sürüm, hangisinde hangi hatalar hala duruyor bilemez hale geliyoruz.

Continue reading “STM32 CubeIDE – PROJEYE LINK VEREREK HARİCİ DOSYA EKLEMEK”