<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z" -->

---
title: STM32 + Segger Real-Time Transfer (RTT) Debugging Basics...
description: A tutorial demonstrating Segger&#x27;s Real-Time Transfer (RTT) debugging feature on an STM32H7 (SN3287-series) microcontroller using a Segger JLink Ultra Plus...
canonical: https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: STM32 + Segger Real-Time Transfer (RTT) Debugging Basics - Phil&#x27;s Lab #177 | daily.dev
og:description: A tutorial demonstrating Segger&#x27;s Real-Time Transfer (RTT) debugging feature on an STM32H7 (SN3287-series) microcontroller using a Segger JLink Ultra Plus...
og:url: https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z
og:image: https://api.daily.dev/og/posts/vdnSeu07Z.png
og:image:alt: STM32 + Segger Real-Time Transfer (RTT) Debugging Basics - Phil&#x27;s Lab #177
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# STM32 + Segger Real-Time Transfer (RTT) Debugging Basics - Phil's Lab #177

**[Phil's Lab](https://daily.dev/sources/phils-lab)** · 22 min read · 0 upvotes · 0 comments

## Summary

A tutorial demonstrating Segger's Real-Time Transfer (RTT) debugging feature on an STM32H7 (SN3287-series) microcontroller using a Segger JLink Ultra Plus debugger. It explains how RTT provides bidirectional terminal-style debugging over the existing SWD/JTAG link without extra pins, covers up/down ring buffers, channels, blocking modes, and walks through implementing write_string, printf, and read/key functions to toggle LEDs and stream ADC data between target and host via the RTT Viewer and Client. Sponsored segments for JLCPCB and Altium are included.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=f9bXY4pD8xw>

## Questions this post answers

### What microcontroller feature is required to use Segger RTT debugging?

The target microcontroller must support background memory access through the debug port (SWD or JTAG) without halting the core, which is typical of Cortex-M type cores. This lets the JLink debugger read and write RAM containing RTT ring buffers while the application keeps running, enabling terminal-style debugging without extra pins or peripherals like SWO or UART.

_Embedded developers comparing debug interfaces can browse practical RTT walkthroughs like this on daily.dev._

### What are the RTT non-blocking modes for handling a full ring buffer in Segger RTT?

Segger RTT offers three modes for a channel's ring buffer: no-block-skip (drops new data if the buffer is full, mode 0), no-block-trim (mode 1), and block-if-full (mode 2, which stalls the application until space is available). No-block-skip is the default and recommended for normal use, while block mode suits initial bring-up when data loss is unacceptable.

_Developers tuning debug pipelines to avoid stalls can find setup guides like this one via daily.dev._

### What data transfer speeds can Segger RTT achieve over a JLink debugger?

Segger RTT transfer speed depends on buffer size and the specific JLink probe, ranging roughly from 0.5 megabytes per second up to 2 megabytes per second. The main bottleneck is simply the RAM copy operation plus the debugger's access to that RAM region, and the memory footprint of the implementation is small enough for size-constrained embedded targets.

_Engineers evaluating debug throughput options can compare RTT benchmarks like these on daily.dev._

---

Tags: [#embedded](https://daily.dev/tags/embedded), [#stm32](https://daily.dev/tags/stm32)

[View this post on daily.dev](https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"STM32 + Segger Real-Time Transfer (RTT) Debugging Basics - Phil's Lab #177","url":"https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z"},"datePublished":"2026-08-31T16:27:45.615Z","dateModified":"2026-08-31T16:28:09.114Z","description":"A tutorial demonstrating Segger's Real-Time Transfer (RTT) debugging feature on an STM32H7 (SN3287-series) microcontroller using a Segger JLink Ultra Plus...","image":"https://i.ytimg.com/vi/f9bXY4pD8xw/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/f9bXY4pD8xw/sddefault.jpg","isAccessibleForFree":true,"articleSection":"Phil's Lab","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Phil's Lab","logo":"https://media.daily.dev/image/upload/s--GO-0wB-h--/f_auto,q_auto/v1780213514/logos/phils-lab?_a=BAMAMiWQ0","url":"https://daily.dev/sources/phils-lab"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"embedded,stm32","timeRequired":"PT22M","video":{"@type":"VideoObject","name":"STM32 + Segger Real-Time Transfer (RTT) Debugging Basics - Phil's Lab #177","description":"A tutorial demonstrating Segger's Real-Time Transfer (RTT) debugging feature on an STM32H7 (SN3287-series) microcontroller using a Segger JLink Ultra Plus...","thumbnailUrl":"https://i.ytimg.com/vi/f9bXY4pD8xw/sddefault.jpg","uploadDate":"2026-08-31T16:27:45.615Z","duration":"PT22M","url":"https://api.daily.dev/r/vdnSeu07Z","embedUrl":"https://www.youtube.com/embed/f9bXY4pD8xw"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Phil's Lab","item":"https://daily.dev/sources/phils-lab"},{"@type":"ListItem","position":3,"name":"STM32 + Segger Real-Time Transfer (RTT) Debugging Basics - Phil's Lab #177"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/stm32-segger-real-time-transfer-rtt-debugging-basics---phil-s-lab-177-vdnseu07z#faq","mainEntity":[{"@type":"Question","name":"What microcontroller feature is required to use Segger RTT debugging?","acceptedAnswer":{"@type":"Answer","text":"The target microcontroller must support background memory access through the debug port (SWD or JTAG) without halting the core, which is typical of Cortex-M type cores. This lets the JLink debugger read and write RAM containing RTT ring buffers while the application keeps running, enabling terminal-style debugging without extra pins or peripherals like SWO or UART. Embedded developers comparing debug interfaces can browse practical RTT walkthroughs like this on daily.dev."}},{"@type":"Question","name":"What are the RTT non-blocking modes for handling a full ring buffer in Segger RTT?","acceptedAnswer":{"@type":"Answer","text":"Segger RTT offers three modes for a channel's ring buffer: no-block-skip (drops new data if the buffer is full, mode 0), no-block-trim (mode 1), and block-if-full (mode 2, which stalls the application until space is available). No-block-skip is the default and recommended for normal use, while block mode suits initial bring-up when data loss is unacceptable. Developers tuning debug pipelines to avoid stalls can find setup guides like this one via daily.dev."}},{"@type":"Question","name":"What data transfer speeds can Segger RTT achieve over a JLink debugger?","acceptedAnswer":{"@type":"Answer","text":"Segger RTT transfer speed depends on buffer size and the specific JLink probe, ranging roughly from 0.5 megabytes per second up to 2 megabytes per second. The main bottleneck is simply the RAM copy operation plus the debugger's access to that RAM region, and the memory footprint of the implementation is small enough for size-constrained embedded targets. Engineers evaluating debug throughput options can compare RTT benchmarks like these on daily.dev."}}]}
```

