{"id":1729,"date":"2026-07-13T00:37:05","date_gmt":"2026-07-13T00:37:05","guid":{"rendered":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/"},"modified":"2026-07-13T01:39:16","modified_gmt":"2026-07-13T01:39:16","slug":"stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers","status":"publish","type":"post","link":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","title":{"rendered":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers"},"content":{"rendered":"<p>If you have ever polled a UART with <code>HAL_UART_Receive<\/code> in a loop, you already know the problem: the CPU sits there waiting for bytes that may never come, or arrive faster than you can read them. DMA solves this by letting the peripheral move bytes into memory on its own, freeing the CPU to do everything else. This guide covers the pattern most production STM32 firmware actually uses: UART RX in circular DMA mode combined with idle-line detection.<\/p>\n<h2>Why Circular DMA Instead of Normal Mode<\/h2>\n<p>Normal DMA mode fills a fixed-size buffer once and then stops, which is fine if you know exactly how many bytes are coming. Real serial data rarely works that way \u2014 GPS strings, AT command responses, and sensor packets all vary in length. Circular mode keeps DMA running indefinitely, wrapping back to the start of the buffer once it reaches the end, so the peripheral never stalls waiting for you to reset it.<\/p>\n<h2>Adding Idle-Line Detection<\/h2>\n<p>Circular DMA alone does not tell you when a message ends, since it just keeps filling the buffer. Idle-line detection solves this: the UART peripheral raises an interrupt when the line goes quiet for one frame period after receiving data, which is a reliable signal that a message is complete.<\/p>\n<pre><code>huart1.Instance = USART1;\nhuart1.Init.BaudRate = 115200;\nhuart1.Init.WordLength = UART_WORDLENGTH_8B;\nhuart1.Init.StopBits = UART_STOPBITS_1;\nhuart1.Init.Parity = UART_PARITY_NONE;\nhuart1.Init.Mode = UART_MODE_TX_RX;\nHAL_UART_Init(&huart1);\n\n__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);\nHAL_UART_Receive_DMA(&huart1, rx_buffer, RX_BUFFER_SIZE);\n<\/code><\/pre>\n<h2>Handling the Idle Interrupt<\/h2>\n<p>In the interrupt handler, clear the idle flag and calculate how many bytes actually arrived by comparing the DMA&#8217;s remaining-count register against the buffer size. This tells you the message length without needing a length prefix or terminator byte.<\/p>\n<pre><code>void USART1_IRQHandler(void) {\n  if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE)) {\n    __HAL_UART_CLEAR_IDLEFLAG(&huart1);\n    uint16_t remaining = __HAL_DMA_GET_COUNTER(huart1.hdmarx);\n    uint16_t received_len = RX_BUFFER_SIZE - remaining;\n    process_message(rx_buffer, received_len);\n  }\n  HAL_UART_IRQHandler(&huart1);\n}\n<\/code><\/pre>\n<h2>Keep the Interrupt Handler Short<\/h2>\n<p>Do not parse the message inside the interrupt handler itself. Copy it into a queue or set a flag and handle the actual parsing in your main loop or an RTOS task. This keeps interrupt latency low, which matters if you have other time-critical peripherals like PWM or ADC running on the same chip.<\/p>\n<h2>TX Side: DMA Out Too<\/h2>\n<p>The same principle applies to transmission. Use <code>HAL_UART_Transmit_DMA<\/code> for anything longer than a few bytes, and check <code>HAL_UART_GetState<\/code> or wait for the TX complete callback before queuing the next transmission, rather than blocking with <code>HAL_UART_Transmit<\/code>.<\/p>\n<h2>Where This Pattern Breaks Down<\/h2>\n<p>Circular DMA with idle detection works well for message-based protocols, but if your data has no natural pause between frames \u2014 continuous streaming sensor data, for example \u2014 you will need a different strategy, typically DMA half-transfer and full-transfer interrupts to process the buffer in two halves while the other half keeps filling. That is worth its own guide, but the setup above will cover the vast majority of UART use cases on STM32.<\/p>","protected":false},"excerpt":{"rendered":"<p>Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[60,62],"tags":[],"class_list":["post-1729","post","type-post","status-publish","format-standard","hentry","category-stm32f4","category-tutorials-guides"],"blocksy_meta":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Vincent Nyanzu Kwofie\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Nvixeon - Custom STM32 Development Boards \u2014 Built in Ghana, Shipped Worldwide\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon\" \/>\n\t\t<meta property=\"og:description\" content=\"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-4-Transparent.webp\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-4-Transparent.webp\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-13T00:37:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-13T01:39:16+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-4-Transparent.webp\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#blogposting\",\"name\":\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon\",\"headline\":\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers\",\"author\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/author\\\/vincentkwofie123gmail-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Nvixeon-Logo-Black-With-outline-Transparent.webp\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/#articleImage\",\"width\":1536,\"height\":1024},\"datePublished\":\"2026-07-13T00:37:05+00:00\",\"dateModified\":\"2026-07-13T01:39:16+00:00\",\"inLanguage\":\"fr-FR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#webpage\"},\"articleSection\":\"STM32F4, Tutorials &amp; Guides\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/category\\\/stm32f4\\\/#listItem\",\"name\":\"STM32F4\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/category\\\/stm32f4\\\/#listItem\",\"position\":2,\"name\":\"STM32F4\",\"item\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/category\\\/stm32f4\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#listItem\",\"name\":\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#listItem\",\"position\":3,\"name\":\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/category\\\/stm32f4\\\/#listItem\",\"name\":\"STM32F4\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/#organization\",\"name\":\"Nvixeon\",\"description\":\"Custom STM32 Development Boards \\u2014 Built in Ghana, Shipped Worldwide\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Nvixeon-Logo-Black-With-outline-Transparent.webp\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#organizationLogo\",\"width\":1536,\"height\":1024},\"image\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/author\\\/vincentkwofie123gmail-com\\\/#author\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/author\\\/vincentkwofie123gmail-com\\\/\",\"name\":\"Vincent Nyanzu Kwofie\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Vincent Nyanzu Kwofie\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#webpage\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/\",\"name\":\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon\",\"description\":\"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.\",\"inLanguage\":\"fr-FR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/author\\\/vincentkwofie123gmail-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/author\\\/vincentkwofie123gmail-com\\\/#author\"},\"datePublished\":\"2026-07-13T00:37:05+00:00\",\"dateModified\":\"2026-07-13T01:39:16+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/\",\"name\":\"Nvixeon\",\"description\":\"Custom STM32 Development Boards \\u2014 Built in Ghana, Shipped Worldwide\",\"inLanguage\":\"fr-FR\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon","description":"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.","canonical_url":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#blogposting","name":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon","headline":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers","author":{"@id":"https:\/\/www.nvixeon.com\/fr\/author\/vincentkwofie123gmail-com\/#author"},"publisher":{"@id":"https:\/\/www.nvixeon.com\/fr\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-Transparent.webp","@id":"https:\/\/www.nvixeon.com\/fr\/#articleImage","width":1536,"height":1024},"datePublished":"2026-07-13T00:37:05+00:00","dateModified":"2026-07-13T01:39:16+00:00","inLanguage":"fr-FR","mainEntityOfPage":{"@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#webpage"},"isPartOf":{"@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#webpage"},"articleSection":"STM32F4, Tutorials &amp; Guides"},{"@type":"BreadcrumbList","@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.nvixeon.com\/fr#listItem","position":1,"name":"Home","item":"https:\/\/www.nvixeon.com\/fr","nextItem":{"@type":"ListItem","@id":"https:\/\/www.nvixeon.com\/fr\/category\/stm32f4\/#listItem","name":"STM32F4"}},{"@type":"ListItem","@id":"https:\/\/www.nvixeon.com\/fr\/category\/stm32f4\/#listItem","position":2,"name":"STM32F4","item":"https:\/\/www.nvixeon.com\/fr\/category\/stm32f4\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#listItem","name":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.nvixeon.com\/fr#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#listItem","position":3,"name":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers","previousItem":{"@type":"ListItem","@id":"https:\/\/www.nvixeon.com\/fr\/category\/stm32f4\/#listItem","name":"STM32F4"}}]},{"@type":"Organization","@id":"https:\/\/www.nvixeon.com\/fr\/#organization","name":"Nvixeon","description":"Custom STM32 Development Boards \u2014 Built in Ghana, Shipped Worldwide","url":"https:\/\/www.nvixeon.com\/fr\/","logo":{"@type":"ImageObject","url":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-Transparent.webp","@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#organizationLogo","width":1536,"height":1024},"image":{"@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/www.nvixeon.com\/fr\/author\/vincentkwofie123gmail-com\/#author","url":"https:\/\/www.nvixeon.com\/fr\/author\/vincentkwofie123gmail-com\/","name":"Vincent Nyanzu Kwofie","image":{"@type":"ImageObject","@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g","width":96,"height":96,"caption":"Vincent Nyanzu Kwofie"}},{"@type":"WebPage","@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#webpage","url":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","name":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon","description":"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.","inLanguage":"fr-FR","isPartOf":{"@id":"https:\/\/www.nvixeon.com\/fr\/#website"},"breadcrumb":{"@id":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#breadcrumblist"},"author":{"@id":"https:\/\/www.nvixeon.com\/fr\/author\/vincentkwofie123gmail-com\/#author"},"creator":{"@id":"https:\/\/www.nvixeon.com\/fr\/author\/vincentkwofie123gmail-com\/#author"},"datePublished":"2026-07-13T00:37:05+00:00","dateModified":"2026-07-13T01:39:16+00:00"},{"@type":"WebSite","@id":"https:\/\/www.nvixeon.com\/fr\/#website","url":"https:\/\/www.nvixeon.com\/fr\/","name":"Nvixeon","description":"Custom STM32 Development Boards \u2014 Built in Ghana, Shipped Worldwide","inLanguage":"fr-FR","publisher":{"@id":"https:\/\/www.nvixeon.com\/fr\/#organization"}}]},"og:locale":"fr_FR","og:site_name":"Nvixeon - Custom STM32 Development Boards \u2014 Built in Ghana, Shipped Worldwide","og:type":"article","og:title":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon","og:description":"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.","og:url":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","og:image":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-4-Transparent.webp","og:image:secure_url":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-4-Transparent.webp","article:published_time":"2026-07-13T00:37:05+00:00","article:modified_time":"2026-07-13T01:39:16+00:00","twitter:card":"summary_large_image","twitter:title":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers - Nvixeon","twitter:description":"Blocking UART reads stall your main loop and drop bytes at high baud rates. This guide shows how to receive variable-length UART data on STM32 using DMA in circular mode with idle-line detection, so your CPU stays free for everything else.","twitter:image":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/Nvixeon-Logo-Black-With-outline-4-Transparent.webp"},"aioseo_meta_data":{"post_id":"1729","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-07-14 16:35:36","updated":"2026-07-14 16:35:36"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.nvixeon.com\/fr\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.nvixeon.com\/fr\/category\/stm32f4\/\" title=\"STM32F4\">STM32F4<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tSTM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.nvixeon.com\/fr"},{"label":"STM32F4","link":"https:\/\/www.nvixeon.com\/fr\/category\/stm32f4\/"},{"label":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers","link":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/"}],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>STM32 UART DMA Guide: Non-Blocking Serial with Circular Buffers<\/title>\n<meta name=\"description\" content=\"Learn to receive variable-length UART data on STM32 using circular DMA and idle-line detection, freeing your CPU from blocking serial reads.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"STM32 UART DMA Guide: Non-Blocking Serial with Circular Buffers\" \/>\n<meta property=\"og:description\" content=\"Learn to receive variable-length UART data on STM32 using circular DMA and idle-line detection, freeing your CPU from blocking serial reads.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/\" \/>\n<meta property=\"og:site_name\" content=\"Nvixeon\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-13T00:37:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-13T01:39:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/14578c91-110c-4615-b54e-fb52d8ee3a41-1.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1402\" \/>\n\t<meta property=\"og:image:height\" content=\"1122\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Vincent Nyanzu Kwofie\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vincent Nyanzu Kwofie\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/\"},\"author\":{\"name\":\"Vincent Nyanzu Kwofie\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#\\\/schema\\\/person\\\/1e56786402d05eb5a411bc0e203bd6b7\"},\"headline\":\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers\",\"datePublished\":\"2026-07-13T00:37:05+00:00\",\"dateModified\":\"2026-07-13T01:39:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/\"},\"wordCount\":436,\"publisher\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#organization\"},\"articleSection\":[\"STM32F4\",\"Tutorials &amp; Guides\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/\",\"name\":\"STM32 UART DMA Guide: Non-Blocking Serial with Circular Buffers\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#website\"},\"datePublished\":\"2026-07-13T00:37:05+00:00\",\"dateModified\":\"2026-07-13T01:39:16+00:00\",\"description\":\"Learn to receive variable-length UART data on STM32 using circular DMA and idle-line detection, freeing your CPU from blocking serial reads.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.nvixeon.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#website\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/\",\"name\":\"Nvixeon\",\"description\":\"Custom STM32 Development Boards \u2014 Built in Ghana, Shipped Worldwide\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.nvixeon.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#organization\",\"name\":\"Nvixeon\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/cropped-Nvixeon_Icon-12.webp\",\"contentUrl\":\"https:\\\/\\\/www.nvixeon.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/cropped-Nvixeon_Icon-12.webp\",\"width\":512,\"height\":512,\"caption\":\"Nvixeon\"},\"image\":{\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.nvixeon.com\\\/#\\\/schema\\\/person\\\/1e56786402d05eb5a411bc0e203bd6b7\",\"name\":\"Vincent Nyanzu Kwofie\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g\",\"caption\":\"Vincent Nyanzu Kwofie\"},\"sameAs\":[\"http:\\\/\\\/nvixeon.com\"],\"url\":\"https:\\\/\\\/www.nvixeon.com\\\/fr\\\/author\\\/vincentkwofie123gmail-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"STM32 UART DMA Guide: Non-Blocking Serial with Circular Buffers","description":"Learn to receive variable-length UART data on STM32 using circular DMA and idle-line detection, freeing your CPU from blocking serial reads.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","og_locale":"fr_FR","og_type":"article","og_title":"STM32 UART DMA Guide: Non-Blocking Serial with Circular Buffers","og_description":"Learn to receive variable-length UART data on STM32 using circular DMA and idle-line detection, freeing your CPU from blocking serial reads.","og_url":"https:\/\/www.nvixeon.com\/fr\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","og_site_name":"Nvixeon","article_published_time":"2026-07-13T00:37:05+00:00","article_modified_time":"2026-07-13T01:39:16+00:00","og_image":[{"width":1402,"height":1122,"url":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/14578c91-110c-4615-b54e-fb52d8ee3a41-1.webp","type":"image\/webp"}],"author":"Vincent Nyanzu Kwofie","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Vincent Nyanzu Kwofie","Dur\u00e9e de lecture estim\u00e9e":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#article","isPartOf":{"@id":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/"},"author":{"name":"Vincent Nyanzu Kwofie","@id":"https:\/\/www.nvixeon.com\/#\/schema\/person\/1e56786402d05eb5a411bc0e203bd6b7"},"headline":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers","datePublished":"2026-07-13T00:37:05+00:00","dateModified":"2026-07-13T01:39:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/"},"wordCount":436,"publisher":{"@id":"https:\/\/www.nvixeon.com\/#organization"},"articleSection":["STM32F4","Tutorials &amp; Guides"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","url":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/","name":"STM32 UART DMA Guide: Non-Blocking Serial with Circular Buffers","isPartOf":{"@id":"https:\/\/www.nvixeon.com\/#website"},"datePublished":"2026-07-13T00:37:05+00:00","dateModified":"2026-07-13T01:39:16+00:00","description":"Learn to receive variable-length UART data on STM32 using circular DMA and idle-line detection, freeing your CPU from blocking serial reads.","breadcrumb":{"@id":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.nvixeon.com\/stm32-uart-dma-guide-non-blocking-serial-communication-with-circular-buffers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.nvixeon.com\/"},{"@type":"ListItem","position":2,"name":"STM32 UART DMA Guide: Non-Blocking Serial Communication with Circular Buffers"}]},{"@type":"WebSite","@id":"https:\/\/www.nvixeon.com\/#website","url":"https:\/\/www.nvixeon.com\/","name":"Nvixeon","description":"Custom STM32 Development Boards \u2014 Built in Ghana, Shipped Worldwide","publisher":{"@id":"https:\/\/www.nvixeon.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.nvixeon.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.nvixeon.com\/#organization","name":"Nvixeon","url":"https:\/\/www.nvixeon.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.nvixeon.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/cropped-Nvixeon_Icon-12.webp","contentUrl":"https:\/\/www.nvixeon.com\/wp-content\/uploads\/2026\/06\/cropped-Nvixeon_Icon-12.webp","width":512,"height":512,"caption":"Nvixeon"},"image":{"@id":"https:\/\/www.nvixeon.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.nvixeon.com\/#\/schema\/person\/1e56786402d05eb5a411bc0e203bd6b7","name":"Vincent Nyanzu Kwofie","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e656f896e9c830369e61ccecbdefb5e9ffbe544962a13983f2ae009448338ce5?s=96&d=mm&r=g","caption":"Vincent Nyanzu Kwofie"},"sameAs":["http:\/\/nvixeon.com"],"url":"https:\/\/www.nvixeon.com\/fr\/author\/vincentkwofie123gmail-com\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/posts\/1729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/comments?post=1729"}],"version-history":[{"count":1,"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/posts\/1729\/revisions"}],"predecessor-version":[{"id":1740,"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/posts\/1729\/revisions\/1740"}],"wp:attachment":[{"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/media?parent=1729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/categories?post=1729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nvixeon.com\/fr\/wp-json\/wp\/v2\/tags?post=1729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}