STM32 USB HID Uygulaması

STM32 USB HID Uygulaması

1506893_10152743165473030_724586435ww858661488_nDaha önceki yazımızda ST’nin uygun fiyatlı performans ürünü olan STM32F072 ailesinin üzerinde kullanabileceğimiz, USB sanal seri port uygulamasından bahsetmiştik. Geçmiş yazımızda da bahsettiğimiz üzere, ST’nin yayınlamış olduğu kullanıcı dostu kütüphaneler sayesinde USB üzerinden bir çok cihaz özelliğini (bellek, ses, mause vb.) kullanmamız mümkün hale gelebilmektedir.

Günümüzde herhangi bir cihazı elimize aldığımızda ilk baktığımız haberleşme yöntemi USB olmaktadır; bunun yanında kullanıcılar minimum kurulum ile (hatta bazen kurulum olmaksızın) cihazını bilgisayara tanıtmak ve işlemlerini yürütme isteği içerisindedirler. Bu konuda USB bize “Human Interface Device” (HID) yani “İnsan Arabirim Aygıtı” işlevini sunmaktadır. Bu bölüme girmeden önce HID’in ne olduğu ve asıl ortaya çıktığını anlamak gerekir.

HID Nedir?
HID yani insan arabirim aygıtı işlevi hemen hemen her bilgisayarda kullanılan aygıtlar için tasarlanmış USB standardına verilen isimdir. Günümüzde hemen hemen her bilgisayarda fare/klavye/depolama gibi bir çok cihaz, bu veri yolu standardını kullanarak bilgisayara ile iletişim halinde olurlar. HID’in en büyük avantajı ise diğer USB yazılımları gibi ek bir driver ihtiyacı olmamasıdır.

STM32F072 ve USB HID Uygulaması

USB’yi HID olarak programlamak için ST’nin paylaşmış olduğu kütüphaneyi kullanmak en iyi yol olacaktır. Daha önceki yazımızda bahsettiğim bu kütüphaneyi indirdikten sonra yapılması gereken ilk işlem VID ve PID numaralarının belirlenmesidir. Bunun için “usbd_desc.c” adlı sayfa açıldığında, aşağıda görebileceğiniz bölümü, istediğiniz kod numarası ve tanımına göre değiştirmeniz mümkündür.

#define USBD_VID                      0x0483
#define USBD_PID                      0x5750

#define USBD_LANGID_STRING            0x409
#define USBD_MANUFACTURER_STRING      "www.FiratDeveci.com"

#define USBD_PRODUCT_FS_STRING        "FxDev"

#define USBD_CONFIGURATION_FS_STRING  "HID Config"
#define USBD_INTERFACE_FS_STRING      "HID Interface"

Burada bahsetmem gereken en önemli husus, PID ve VID numaralarının, başka firmalar adına kayıtlı olanlarını kullanmanız özellikle ticari projelerde lisans sorunları yaratabilir. Ben burada deneme amaçlı VID ve PID numarası kullanmayı tercih ettim, eğer firmanızın kayıtlı numaraları var ise bu kısımda değişiklik yaparak kullanabilirsiniz. Bilgisayarınıza USB analiz programları indirerek ilgili tanımlamanın aşağıdaki şekilde olduğunu görebilirsiniz.
VID-PIDYaptığım uygulamada, DHT11 sensöründen aldığım verileri USB üzerinden göndererek sıcaklık ve nem bilgileri alınarak; bilgisayar tarafından da STM32F072 Discovery kitinin üzerinde bulunan ledleri kontrol edilmesi sağladım. İlgili uygulamaya ait ekran görüntüsünü aşağıda görebilirsiniz.
STM32F072 HID C# ProgramAyrıca işlemcide bir sayıcı değeri de yine aynı veri ekranına taşındı. İlgili uygulamaya dair videoyu aşağıda seyredebilirsiniz.

Yukarıdaki videoya ait uygulamayı buradan (indirdikten sonra uzantıyı .rar yapınız) indirebilirsiniz. Ayrıca uygulamanın STM32F072 ailesinin özelliklerinden biri olan kristalsiz USB kullanımı içerdiğini de belirtmek isterim.

Sonuç Olarak
ST, sağlamış olduğu USB kütüphanesiyle gerek driver desteği gerek ise HID kullanımındaki kolaylık ile kullanıcılara büyük avantajlar sağlamaktadır. Kütüphanenin sağladığı ek özellikler için kullanım kılavuzunu ayrıntılı şekilde okumanızı öneririm.

Herkese çalışmalarında başarılar dilerim.

17 Yorum — "STM32 USB HID Uygulaması"

  1. Ahmet 22 Aralık 2015

    Merhaba
    Paylaşmış olduğunuz kodu derleyip kartıma yükledim ancak driver problemi var gibi görünüyor. Sizin kullandığınız bir driver dosyası var mı?

    Windows 8 kullanıyorum.

    Teşekkürler.

    1. Fırat DEVECİ 22 Aralık 2015

      Merhabalar Ahmet Bey,

      Herhangi bir driver olmasına gerek yok, HID’in özelliği tak çalıştır olmasıdır. Win7-8-8.1 ve 10’da denendi kodlar.

      İyi günler dilerim.

      1. Ahmet 23 Aralık 2015

        Tekrar merhaba. Device Manager penceresinde sarı ünlemli bir şekilde “Unknown USB Device (Device Descriptor Request Failed)” Diye bir uyarı veriyor.

        Device Status
        “Windows has stopped this device because it has reported problems. (Code 43)

        A request for the USB device descriptor failed.”

        Bilginiz varsa paylaşabilirseniz sevinirim. Yoksa araştırmaya devam 🙂

        Teşekkürler.

        1. Fırat DEVECİ 23 Aralık 2015

          Tanımlama hatası vermiş, Windows’un kronik hatalarından biri. İnternette çözümleri mevcut. İsterseniz ST’nin USB HID Demonstration aracını da indirip deneyebilirsiniz.

  2. talha türk 21 Ocak 2016

    Merhabalar Fırat bey
    C# arayüzlü bir PIC18fF4550 ile USB haberleşme yapıyorum. Yazdığım C# uygulaması USB portta bir cihaz bağlandığını algılıyor ancak benim işlemcim olduğunu algılayamıyor. Nedeni konusunda bilgi verebilirseniz minnettar olurum.

    İyi çalışmalar

    1. Fırat DEVECİ 22 Ocak 2016

      Merhaba Talha Bey,

      PID/VID ayarlarınızın doğru olup olmadığını kontrol etmeniz gerekiyor. Benim programımı deneyerek USB’nizin çalışıp çalışmadığını kontrol edebilirsiniz.

  3. Abdullah 27 Ocak 2016

    Hocam merhabalar,

    Paylaşım için teşekkürler. Bende ST’nin STM32F103 adlı denetleyicisi var. HID uygulaması yapmak istiyorum ancak takıldığım noktalar var. C# tarafı nasıl olacak acaba biraz ayrıntı verebilir yada örnek kodları paylaşabilir misiniz? ST tarafında da indirdiğim dosyadaki klasörler ile sizin projenizdekiler farklı. İletişim için hangi dosyalar yeterli acaba? Saygılarımla.

    1. Fırat DEVECİ 27 Ocak 2016

      Merhabalar Abdullah,

      F103 çok klasik hale gelmiş bir entegre. ST’nin sitesinde USB Demo adında bir blgisayar programı var, bu program ile birlikte HID uygulamanı ilerletebilirsin. F103’ün çok detaylı örnekleri mevcut. App. notları okumanı mutlaka tavsiye ederim, orada hangi dosyaların gerekli olduğu yazıyor. F103 için dosyalar birbirine benzer olsa da özellikle USB Core kısımları Cortex M0’dan farklı yazılmış. Buna dikkat etmeni öneririm. Ayrıa verilen örnekler üzerinden gidersen uygulamaya daha hızlı hakim olabilirsin.

  4. Selman Ergunşah 30 Ocak 2016

    Hocam elinize sağlık güzel bir uygulama olmuş. Eğer mümkünse arayüzün açık kaynak kodunu paylaşır mısınız? C# da mı yazıldı acaba?

    1. Fırat DEVECİ 30 Ocak 2016

      Merhaba,

      Maalesef kaynak kodları vermem mümkün değildir.

  5. Erkin 27 Nisan 2016

    Merhaba

    Arayüz programını yazarken kullandığınız usb kütüphanesini paylaşabilir misiniz?

    1. Fırat DEVECİ 27 Nisan 2016

      İlgili kütüphane ticari bir proje içerisinde olduğundan maalesef bunu paylaşamıyorum.

  6. Yılmaz 08 Aralık 2016

    Hocam bu arayüzün oluşturulması hakkında da basit bir video çeker misiniz?

    1. Fırat DEVECİ 09 Aralık 2016

      İlgim şu an başka konularda ama tekrar bu konuya dönecek olursam elbette açıklamada bulunurum.

  7. Furkan 12 Temmuz 2017

    İyi günler Fırat bey şirketimiz için usb butona ihtiyacımız var. Yazınızı okudum elinize sağlık.Burada kodumuzu hangi programla yazacağımız fark eder mi?Cevabınız için şimdiden teşekkürler

    1. Fırat DEVECİ 13 Temmuz 2017

      Herhangi bir fark olmaz.

  8. gilamada 03 Ekim 2017

    Merhabalar uygulamayı indiremiyorum. Sayfa bulunamadı sorunu var. Teşekkürler.

Yorum Yaz