STM32-UART HABERLEŞMEDE RING BUFFER KULLANIMI

STM32 ile UART haberleşmesi için yoklama (polling) ya da kesme (interrupt) tekniklerini kullanabiliyoruz. Gelen ve giden verileri “halka tampon” (ring buffer) adını verdiğimiz, sonuna ulaşılınca başa dönüp oradan kayda devam ettiğimiz türden tampon dizilere yerleştirmek verimli bir yöntem. Burada UART işlemleri için HAL kütüphanesini kullanmıyorum.

Bu yayında sürekli olarak kullanmakta olduğum bu tekniği anlatacağım.

Continue reading “STM32-UART HABERLEŞMEDE RING BUFFER KULLANIMI”

STM32 CUBE IDE – KUSURLAR (BUG)

STM32 çalışmalarımda STM32 Cube IDE platformunu kullanıyorum. ST Microelectronics bunu geçtiğimiz yıllarda bünyesine kattığı Atollic True Studio ile CubeMX yapılandırıcısını birleştirerek oluşturdu. Müşterilerinin kullanımına ücretsiz olarak sunuyor.

Fakat yeni bir ürün, zaman zaman, hatta bazıları ile çok sıklıkla, sorunlarla karşılaşıyorum. Bunların kendimden kaynaklanmadığını anlayana kadar epey ter döküyorum. Zira çoğu ilk defa benim başıma gelmiş oluyor. Forumlarda paylaşıyoruz ve ST den yeni sürümlerde çözüm bekliyoruz.

Bu arada hayat devam ettiğinden kendi çözümlerimizi üretmek zorunda kalıyoruz. Bu yayında karşılaştığım ve henüz çözüm getirilmemiş olan kusurları, bunları aşmak için yaptıklarımı anlatacağım.

Bunları değerlendirirken Mac OS kullandığımı (Ekim 2020 itibariyle Catalina Version 10.15.6) dikkate alınız. Cube IDE sürümü de : 1.4.2 Build: 7643_20200813_1322 (UTC). Windows’ta da durum farklı olabilir.

Continue reading “STM32 CUBE IDE – KUSURLAR (BUG)”

STM32 TABANLI MASAÜSTÜ CNC-2 (Yeni model)

İlk yayında anlattığım (STM32 Tabanlı Masaüstü CNC – 1) masa üstü CNC yi güncelliyorum. Mekanik yapıda bir değişiklik yok. Ana değişiklik elektronik donanımdaki motor sürücüler. Buna ilaveten yazılımda, motor sürüm algoritmasında epeyi değişiklik var. Bunlardan bazılarını daha CNC ye uygulamadan önce aşağıdaki yayınlarda anlatmıştım.

Aslında diğer yayınlarımın neredeyse hepsinde CNC de kullandığım yazılım tekniklerinden bir şeyler var. Daha önce de belirttiğim gibi, bu CNC, öğrendiğim şeyleri hayata geçirdiğim bir test platformu haline geldi.

Continue reading “STM32 TABANLI MASAÜSTÜ CNC-2 (Yeni model)”

UART İLETİŞİMDE VERİ DOĞRULAMA – CHECK SUM

Mikro denetleyiciler ile diğer cihazlar arasında veri alışverişi için sıklıkla asenkron haberleşme protokoluna -UART- başvuruyoruz. Genelde parazitsiz ve kısa mesafelerde sorun yaşanmasa da, yakın çevrede çalışan motorlar gibi parazit kaynakları var ise arada bir hatalı alınan karakterler olabiliyor. Benim CNC uygulamam da bunlardan birisi. Mikro denetleyicinin burnunun dibinde çalışan 500W lık bir fırçalı DC spindle motorundan, 3 tane güçlü adım motorunun kablolarından yayılan parazitler ortamı dolduruyor.

Bu durumlarda fiziksel seviyedeki önlemler, UART haberleşmeyi RS232, ya da daha iyisi RS485 üzerinden yürütmek. Buna ilaveten protokol seviyesinde de veri doğrulama yöntemlerine başvurmak gerekiyor.

Sadece kullanıcı ile text mesaj alışverişi gibi, arada bir gelen hatalı bir karakterin felakete yol açmadığı bir durumda bütün bunlara gerek görülmeyebilir. Ama, CNC ye giden bir hatalı koordinat bilgisi ortalığı bir anda savaş meydanına çevirebilir. Bu benim başıma geldiğinden dersimi aldım ve CNC-PC haberleşmesi sırasında veri doğrulama işlemlerine erken aşamalardan itibaren yer verdim.

CNC için kullandığım iki farklı yöntemi anlatacağım.

Continue reading “UART İLETİŞİMDE VERİ DOĞRULAMA – CHECK SUM”

STM32F103 İLE WEB SUNUCUSU

ESP8266 ile ev otomasyon sistemleri geliştirmek çok kolaylaştı. Ücretsiz olarak sunulan bol miktarda görsel malzeme ile çok alımlı WEB sayfaları hazırlanabiliyor. STM32 serisinin de WiFi yetenekleri olan tipleri, bunlarla kullanılabilecek zengin kütüphaneleri var.

Ben elimdeki basit malzemeleri kullanarak, STM32F103 ile ESP8266-01 i birlikte çalıştırarak ev otomasyonunda kullanılabilecek bir WEB sunucusu yapmaya karar verdim. Öyle olağanüstü bir şey değil, ESP zaten işin büyük kısmını yapıyor. Bana sadece bunu STM32 ile UART üzerinden konuşturmak ve WEB sayfalarını hazırlamak kalıyor.

Continue reading “STM32F103 İLE WEB SUNUCUSU”

STM32 Cube IDE – INTERRUPT IRQ ve CALL BACK FONKSİYONLARI

Herhangi bir kesinti oluştuğunda mikro denetleyicimiz, o kesintiye ilişkin bir IRQ – Interrupt Handler fonksiyonunu çağırır. Oluşan kesinti ile ne yapacak isek bu handler fonksiyonlarını ona göre hazırlayarak main.c dosyası içine koymamız gerekiyor.

Bu durumda bu fonksiyonun adı, tipi ve argümanları, sistem kütüphanelerinde tanımlanmış olanlarla uyumlu olmak zorunda.

Bu yayında, STM32 cube IDE ile çalışırken hazırlayacağımız IRQ intterupt handler fonksiyonunlarına ait bu bilgilere nasıl ulaşılacağını -TIM3 zamanlayıcısı örneği üzerinde- anlatacağım.

Continue reading “STM32 Cube IDE – INTERRUPT IRQ ve CALL BACK FONKSİYONLARI”

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 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”