<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>STM32 on Crazy blog</title><link>https://blog.csgo.ovh/categories/stm32/</link><description>Recent content in STM32 on Crazy blog</description><generator>Hugo</generator><language>zh-Hans</language><lastBuildDate>Mon, 28 Sep 2026 23:11:22 +0800</lastBuildDate><atom:link href="https://blog.csgo.ovh/categories/stm32/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Redirect printf to UART on STM32</title><link>https://blog.csgo.ovh/posts/123-stm32-printf-to-uart-quick-guide/</link><pubDate>Mon, 28 Sep 2026 23:11:22 +0800</pubDate><guid>https://blog.csgo.ovh/posts/123-stm32-printf-to-uart-quick-guide/</guid><description>&lt;p&gt;在嵌入式开发与调试过程中，&lt;code&gt;printf&lt;/code&gt; 是最直观、最常用的日志输出工具。许多新手在刚接触 STM32 时，往往被繁琐的标准库/底层系统调用重写搞得一头雾水。&lt;/p&gt;
&lt;p&gt;本文介绍一种&lt;strong&gt;极简、直接且跨平台兼容&lt;/strong&gt;的 &lt;code&gt;printf&lt;/code&gt; 重定向方法，涵盖 &lt;strong&gt;Keil MDK&lt;/strong&gt; 与 &lt;strong&gt;STM32CubeIDE (GCC)&lt;/strong&gt; 两大主流开发环境，3 分钟即可配置完毕。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="核心原理" class="relative group"&gt;核心原理 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e6%a0%b8%e5%bf%83%e5%8e%9f%e7%90%86" aria-label="锚点"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;C 语言标准库中的 &lt;code&gt;printf&lt;/code&gt; 底层最终通过字符输出函数将字符逐个写入底层硬件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keil MDK (ARM Compiler)&lt;/strong&gt;：依赖标准 I/O 的 &lt;code&gt;fputc(int ch, FILE *f)&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GCC / STM32CubeIDE&lt;/strong&gt;：底层通常走 &lt;code&gt;__io_putchar(int ch)&lt;/code&gt; 或 &lt;code&gt;_write()&lt;/code&gt; 系统调用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们只需要重写对应的底层单字符发送函数，将其映射到 STM32 的串口发送函数（如 &lt;code&gt;HAL_UART_Transmit&lt;/code&gt;）即可。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一代码实现以-hal-库为例" class="relative group"&gt;一、代码实现（以 HAL 库为例） &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e4%b8%80%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b0%e4%bb%a5-hal-%e5%ba%93%e4%b8%ba%e4%be%8b" aria-label="锚点"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;打开工程的 &lt;code&gt;main.c&lt;/code&gt;（或单独的 &lt;code&gt;retarget.c&lt;/code&gt; 文件），完成以下两步：&lt;/p&gt;</description></item></channel></rss>