STM32F401'i USB Bellek Gibi Kullanma (Mass Storage Device)

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

STM32F401'i USB Bellek Gibi Kullanma (Mass Storage Device)

STM32F401 mikrodenetleyicisini bir bilgisayara bağlandığında tıpkı bir USB Flash Bellek gibi görünecek şekilde yapılandırabilirsiniz. Bu moda USB Mass Storage Class (MSC) denir. Bu senaryoda STM32, bilgisayar için bir kart okuyucu veya depolama aygıtı rolünü üstlenir. Depolama alanı olarak mikrodenetleyicinin kendi dahili Flash belleğinin bir kısmı, karta bağlı bir SD Kart veya harici bir SPI Flash entegresi (örn: W25Q64) kullanılabilir.

En yaygın ve performanslı yöntem olan Harici SPI Flash / SD Kart altyapısını kullanarak STM32F401'i bilgisayara USB Bellek olarak tanıtma adımlarını inceleyelim.


1. STM32CubeMX ile Yapılandırma

Bu projede STM32 hem bilgisayarla USB üzerinden konuşacak hem de arkadaki depolama birimini (SD Kart veya SPI Flash) yönetecektir.

A. Donanım ve Saat Ayarları

  • RCC: Harici kristali (HSE) aktif edin. Clock Configuration sekmesinden USB saatini (48 MHz Clock) tam olarak 48 MHz değerine sabitleyin.
  • Depolama Birimi: Eğer SD kart kullanıyorsanız SDIO birimini, harici Flash entegresi kullanıyorsanız SPI birimini aktif hale getirin ve ilgili pin ayarlarını yapın.

B. USB ve Middleware Ayarları

  • Sol menüden Connectivity -> USB_OTG_FS birimine gelin ve modu Device_Only olarak seçin.
  • Middleware -> USB_DEVICE menüsüne geçin. Class For FS IP seçeneğini Mass Storage Class olarak ayarlayın.
Tavsiye: Büyük veri blokları transfer edileceği için yığın bellek miktarını artırın. Project Manager -> Linker Settings kısmından Minimum Heap Size değerini 0x1000 yapın ve kodu üretin.

2. Sürücü (Driver) Katmanını Bağlama

Kod üretildikten sonra bilgisayar STM32'yi bir USB bellek olarak tanır ancak içine girdiğinizde "Disk Yok" uyarısı verir. Bilgisayardan gelen Okuma/Yazma isteklerini gerçek depolama biriminize yönlendirmek için usbd_storage_if.c dosyasını düzenlemeniz gerekir.

A. Disk Kapasitesi ve Sektör Ayarları

Bilgisayarın diskin boyutunu doğru görebilmesi için sektör sayısı ve sektör boyutunu tanımlamalıyız. usbd_storage_if.c dosyasındaki STORAGE_BLK_NBR (Toplam Sektör Sayısı) ve STORAGE_BLK_SIZ (Sektör Boyutu: Standart 512 Bayttır) alanlarını harici belleğinize göre güncelleyin:

/* usbd_storage_if.c içi - Örnek: 8 Megabaytlık bir SPI Flash için */
#define STORAGE_BLK_SIZ                  512  // Standart sektör boyutu (Byte)
#define STORAGE_BLK_NBR                  16384 // Toplam Sektör Sayısı (16384 * 512 = 8MB)

B. Okuma (Read) Fonksiyonunun Bağlanması

Bilgisayar diskten veri okumak istediğinde alt seviyedeki STORAGE_Read_FS fonksiyonunu tetikler. Buraya kendi bellek okuma kodunuzu eklemelisiniz:

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 6 */
  
  // Örnek SPI Flash okuma fonksiyonu (Kendi kütüphanenize göre uyarlayın):
  // W25Qxx_Read_Sectors(buf, blk_addr, blk_len);
  
  // Örnek SD Kart (SDIO) okuma fonksiyonu:
  // BSP_SD_ReadBlocks((uint32_t*)buf, blk_addr, blk_len, HAL_MAX_DELAY);

  return (USBD_OK);
  /* USER CODE END 6 */
}

C. Yazma (Write) Fonksiyonunun Bağlanması

Bilgisayardan STM32'ye bir dosya sürüklendiğinde veya disk biçimlendirildiğinde STORAGE_Write_FS fonksiyonu çalışır:

int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 7 */
  
  // Örnek SPI Flash yazma fonksiyonu:
  // W25Qxx_Write_Sectors(buf, blk_addr, blk_len);
  
  // Örnek SD Kart (SDIO) yazma fonksiyonu:
  // BSP_SD_WriteBlocks((uint32_t*)buf, blk_addr, blk_len, HAL_MAX_DELAY);

  return (USBD_OK);
  /* USER CODE END 7 */
}

3. İlk Çalıştırma ve Diski Biçimlendirme

  • Kodu derleyip STM32F401 kartınıza yükleyin.
  • Kartı USB kablosu ile bilgisayara bağladığınızda sağ altta yeni bir sürücü bağlandı uyarısı belirecektir.
  • Önemli Adım: Belleğin içi ham (boş) olduğu için bilgisayar ilk bağlandığında diski tanıyamaz ve "Sürücüyü kullanabilmek için önce biçimlendirmeniz gerekli" uyarısı verir.
  • Açılan pencereden diski FAT32 veya FAT dosya sisteminde biçimlendirin. İşlem bittikten sonra STM32 kartınız tamamen çalışan, içine dosya atıp alabileceğiniz bir USB belleğe dönüşecektir.

💬 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