STM32F401 USB Bellek (Mass Storage Host) Kullanımı

👤 Yazar: ozcan 📅 Tarih: 27.06.2026 06:46 👁️ Görüntüleme: 15

STM32F401 USB Bellek (Mass Storage Host) Kullanımı

STM32F401 mikrodenetleyicisini bir USB Host (Ana Bilgisayar) olarak yapılandırıp içerisine bir USB Flash Bellek bağlamak, veri lojistiği ve taşınabilir depolama projeleri için harika bir çözümdür. Bu senaryoda STM32, belleğin içindeki dosya sistemini okumak ve yazmak için FATFS (FatFs File System Module) kütüphanesini kullanır.

USB Bellek (Mass Storage Class) okuma/yazma uygulamasını STM32CubeMX ve HAL kütüphanesi ile adım adım gerçekleştirelim.


1. STM32CubeMX ile Yapılandırma

USB Host yapısı, Device moduna göre biraz daha fazla bellek ve doğru saat frekansı yönetimi gerektirir.

A. Clock (Saat) ve RCC Ayarları

  • RCC menüsünden HSE seçeneğini Crystal/Ceramic Resonator olarak aktif edin.
  • Clock Configuration sekmesinde USB biriminin beslendiği 48 MHz Clock sinyalinin tam olarak 48 MHz olduğundan emin olun.

B. USB Donanımını Host Olarak Aktif Etme

  • Sol menüden Connectivity -> USB_OTG_FS birimine gelin.
  • Mode kısmını Host_Only olarak ayarlayın.
  • Eğer geliştirme kartınızda harici bir USB güç anahtarlama entegresi (VBUS Drive) varsa, alt kısımdan Activate_VBUS seçeneğini seçebilirsiniz. Doğrudan bağlantılarda boş bırakabilirsiniz.

C. Middleware (Yazılım Katmanları) Ayarları

Bu projede hem USB kütüphanesine hem de dosya sistemine ihtiyacımız var:

  • USB_HOST menüsüne girin ve Class For FS IP seçeneğini Mass Storage Class yapın.
  • FATFS menüsüne girin ve USB Disk seçeneğini aktif edin (Check kutusunu işaretleyin).
Önemli Not: Projeyi üretmeden önce Project Manager -> Linker Settings alanına gidin. Host ve FATFS yapıları RAM'de çok yer kapladığı için Minimum Heap Size değerini 0x800, Minimum Stack Size değerini ise en az 0x1000 yapın. Ardından Generate Code diyerek kodu üretin.

2. Kodlama ve Dosya İşlemleri

STM32CubeMX, USB belleğin takılıp çıkarılma durumlarını takip eden bir durum makinesi (State Machine) oluşturur. Biz işlemlerimizi usb_host.c içerisindeki uygulama döngüsünde veya main.c altında bu durumu sorgulayarak yaparız.

main.c İçerisine Gerekli Değişkenlerin Tanımlanması

Dosya işlemleri için FATFS kütüphanesinin nesnelerini global alanda tanımlıyoruz:

/* USER CODE BEGIN PV */
extern ApplicationTypeDef Appli_state; // USB durumunu takip eden harici değişken
FATFS USBDISKFatFs;           // Dosya sistemi nesnesi
FIL MyFile;                   // Dosya nesnesi
char USBDiskPath[4];          // USB sürücü yolu (örn: "0:/")
uint32_t byteswritten;        // Yazılan bayt sayısı
char veri_tamponu[] = "STM32F401 USB Bellek Yazma Testi basarili!\r\n";
/* USER CODE END PV */

while(1) Döngüsü İçinde Bellek Kontrolü ve Yazma

USB bellek takıldığında Appli_state değişkeni APPLICATION_READY konumuna gelir. Bu durumda dosyayı oluşturup yazma işlemini başlatabiliriz:

while (1)
{
    /* USB Host süreçlerini arka planda çalıştırır */
    MX_USB_HOST_Process();

    switch(Appli_state)
    {
        case APPLICATION_READY:
            // 1. USB Sürücüsünü Bağla (Mount Et)
            if(f_mount(&USBDISKFatFs, (TCHAR const*)USBDiskPath, 0) == FR_OK)
            {
                // 2. Dosyayı Yazma Modunda Aç veya Oluştur (log.txt)
                if(f_open(&MyFile, "log.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
                {
                    // 3. Veriyi Dosyaya Yaz
                    f_write(&MyFile, veri_tamponu, strlen(veri_tamponu), (void *)&byteswritten);
                    
                    // 4. Dosyayı Kapat ve Güvenli Kaydet
                    f_close(&MyFile);
                }
                
                // Sürücü bağlantısını kes (İşlem bitti)
                f_mount(NULL, (TCHAR const*)USBDiskPath, 0);
            }
            
            // Sonsuz döngüde sürekli yazmasın diye durumu IDLE'a çekiyoruz
            Appli_state = APPLICATION_IDLE;
            break;

        case APPLICATION_DISCONNECT:
            // USB Bellek çıkartıldığında yapılacak işlemler
            break;
            
        default:
            break;
    }
}

3. Dikkat Edilmesi Gereken Kritik Noktalar

  • FAT32 Biçimlendirmesi: STM32 yerleşik FATFS kütüphanesi standart olarak exFAT veya NTFS dosya sistemlerini doğrudan desteklemez. Kullanacağınız USB belleğin bilgisayarda mutlaka FAT32 veya FAT16 olarak biçimlendirilmiş olması gerekir.
  • Akım/Güç Sorunları: USB bellekler ilk çalışma ve yazma anında anlık yüksek akım (100-200mA arası) çekebilirler. Eğer STM32 kartınızı doğrudan bilgisayarın zayıf bir USB portundan besliyorsanız çökme yaşanabilir. Kartı harici bir kaynakla veya kaliteli bir USB portu ile beslemek sorunu çözecektir.
  • VBUS Donanımı: Bir cihazın Host olabilmesi için karşı tarafa (USB belleğe) 5V enerji sağlaması gerekir. Geliştirme kartınızın USB konnektöründeki VBUS pininde 5V enerji olduğundan emin olun.

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
Sayfa Başı
Yenidir CMS V0.1