STM32 UART DMA İLE UZUNLUĞU BİLİNMEYEN VERİ PAKETLERİNİ ALMAK

STM32 ile USART üzerinden veri alış verişi yapmanın çeşitli yöntemleri var. En basitinden yoklama (polling) yöntemi, biraz daha geliştirilmiş bir yöntem tercih ediyorsak kesme (interrupt) yöntemi kullanılabiliyor. Daha önce bu yöntemleri ve ring buffer kullanarak veri alış verişini anlattığım yayınlarım olmuştu.


Bu sefer, HAL kütüphanesinden özel bir fonksiyonu kullanarak DMA modunda alış için uyarladığım ring buffer tekniğini anlatacağım. Bu yeni algoritma UART DMA kesmelerinden yararlanarak CPU yu neredeyse hiç meşgul etmeden çalışan basit ve verimli bir çözüm. Bundan sonraki projelerimde bu kütüphaneyi kullanmayı düşünüyorum.

Continue reading “STM32 UART DMA İLE UZUNLUĞU BİLİNMEYEN VERİ PAKETLERİNİ ALMAK”

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.

HAL Kütüphaneleri kullanarak geliştirdiğim daha güncel bir yayınıma burayı tıklayarak ulaşabilirsiniz.

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

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”

STM32 – HAL KÜTÜPHANELERİ İLE UART INTERRUPT

Blog sitesini açtığımdan bu yana STM32 ile USART üzerinden veri alışverişini anlatmaya değer bir konu olarak düşünmemiştim. Ancak, internet üzerinde problemlerini paylaşan kişilerin yazdıklarına bakınca yaygın bir sorun olduğunu gördüm. Buna karşılık oluşturduğum çözümü paylaşmaya karar verdim.

Sorun şu : UART üzerinden ne zaman veri geleceğini bilmiyoruz. Herhangi bir anda gelebilir, ama biz o zamana kadar USART portu gözleyip beklemek istemiyoruz. Gelecek karakter dizisinin uzunluğunu da bilmiyoruz. Yani herhangi bir zamanda bir miktar karakter gelecek, son karakter hangisi onu da bilmiyoruz. Bu koşullar altında HAL kütüphaneleri ile işimizi halledeceğiz.

Bu yayında HAL kütüphaneleri kullanarak ürettiğim çözümü sunacağım. Yeni bir icat değil, HAL öncesinde alt seviye kodlama ile yaptığımız işin adaptasyonundan ibaret.

Güncelleme : Bu konudaki daha güncel ve gelişmiş bir teknik için yeni yayınıma burayı tıklayarak ulaşabilirsiniz.

Continue reading “STM32 – HAL KÜTÜPHANELERİ İLE UART INTERRUPT”