# Etkilesimli STM32 USB CDC ve Ring Buffer

<div class="mlv-demo-links">
  <a class="mlv-demo-link" href="index.html">STM32 Rotasi</a>
  <a class="mlv-demo-link" href="interactive_gpio_lab.html">GPIO Laboratuvari</a>
  <a class="mlv-demo-link" href="interactive_clock_timer_lab.html">Clock ve Timer</a>
  <a class="mlv-demo-link" href="interactive_uart_lab.html">UART ve Terminal</a>
  <a class="mlv-demo-link" href="interactive_pwm_lab.html">PWM Laboratuvari</a>
  <a class="mlv-demo-link" href="interactive_adc_lab.html">ADC ve Sensorler</a>
  <a class="mlv-demo-link" href="interactive_i2c_lab.html">I2C ve Sensorler</a>
  <a class="mlv-demo-link" href="interactive_interrupt_dma_lab.html">Interrupt ve DMA</a>
  <a class="mlv-demo-link" href="interactive_spi_lab.html">SPI ve Cevre Birimleri</a>
  <a class="mlv-demo-link" href="interactive_freertos_lab.html">FreeRTOS ve Gorevler</a>
  <a class="mlv-demo-link" href="interactive_low_power_lab.html">Low Power ve Uyku</a>
  <a class="mlv-demo-link" href="interactive_mutex_priority_lab.html">Mutex ve PI</a>
  <a class="mlv-demo-link" href="interactive_tickless_idle_lab.html">Tickless Idle</a>
  <a class="mlv-demo-link" href="interactive_event_groups_lab.html">Event Groups</a>
  <a class="mlv-demo-link" href="interactive_can_filter_lab.html">CAN Filtreleme</a>
  <a class="mlv-demo-link" href="interactive_watchdog_fault_lab.html">Watchdog</a>
  <a class="mlv-demo-link active" href="interactive_usb_cdc_ring_lab.html">USB CDC</a>
  <a class="mlv-demo-link secondary" href="../_static/demos/stm32-usb-cdc-ring-lab.html">Tam Ekran Demo</a>
</div>

<div class="mlv-demo-hero">
  <div class="mlv-demo-kicker">STM32 / Ders 16</div>
  <p class="mlv-demo-lead">Bu laboratuvar, `USB CDC` haberlesmesini yalnizca "terminal acildi, veri geldi" seviyesinde degil; `RX callback`, `ring buffer`, `line framing`, `parser budget` ve `overflow` arasindaki gercek bag olarak gorunur kilar. Hedef, host'tan gelen veri patlamalarinda neden callback'in hafif kalmasi gerektigini ve neden parser'in task seviyesinde, kontrollu bir `ring buffer` akisi uzerinden calistirilmasinin daha dayanikli oldugunu sezgisel hale getirmektir.</p>
</div>

<div class="mlv-demo-grid">
  <div class="mlv-demo-panel">
    <strong>Ne Yap</strong>
    <span>Trafik profilini, ring buffer boyutunu, parser butcesini, servis araligini ve framing modunu degistir; ardindan backlog, kayip byte ve tamamlanan komut sayisini izle.</span>
  </div>
  <div class="mlv-demo-panel">
    <strong>Ne Ogren</strong>
    <span>`CDC_Receive_FS`, `ring write`, `line parser`, `overflow`, `backpressure` ve `newline` seciminin neden tek karar zinciri oldugunu gor.</span>
  </div>
  <div class="mlv-demo-panel">
    <strong>Gorev</strong>
    <span>Once terminal komutlarini temizce akan bir ayar kur. Sonra burst profiline gecip kucuk buffer ile neden veri kaybi yasandigini gor; en sonda parser ritmini arttirarak sistemi toparla.</span>
  </div>
</div>

<div class="mlv-demo-note">
USB CDC tarafinda asil hata cogu zaman "USB bozuk" degildir. Sorun genellikle callback icinde fazla is yapilmasi, ring buffer'in kucuk secilmesi ya da parser'in `newline` beklerken backlog biriktirmesidir.
</div>

<iframe
  class="mlv-demo-frame"
  src="../_static/demos/stm32-usb-cdc-ring-lab.html"
  title="STM32 USB CDC ve Ring Buffer"
  loading="lazy"
  frameborder="0"
></iframe>

## Bu Derste Ne Oturmali?

1. `USB CDC RX callback`, veri kopyalama ve yeniden `Receive` hazirlama gibi hafif isler icin iyidir; parser'in tamamini callback icine yigmamak gerekir.
2. `Ring buffer`, host patlamalari ile uygulama parser hizi arasinda tampon gorevi gorur; kucuk secilirse byte kaybi, gereksiz buyuk secilirse gizli gecikme artabilir.
3. `Line framing`, komut tabanli sistemlerde temizdir; ama `newline` gec gelirse parser bir sure hicbir sey uretmeyebilir ve backlog siser.
4. Dogru USB CDC tasarimi sadece `printf` atmak degil; gelen veri profiline, parser ritmine ve buffer geri basincina birlikte bakmaktir.

```{note}
Bir sonraki dogal laboratuvarlar `reset reason + backup registers`, `stream buffer / message buffer`, `FDCAN + mailbox` ya da `USB CDC + DMA / double buffer` olabilir.
```
