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”

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”