、简单链路(一句话看懂)
printf("xxx") → newlib库 → 调用弱函数 __io_putchar → 我们重写这个函数 → 调用HAL_UART_Transmit → 串口发送到电脑串口助手
核心:__io_putchar 是弱函数,我们自己写一份,就会覆盖库里面原来的空实现
二、你的 CubeIDE + STM32F4 最简步骤(串口重定向 printf)
-
在
main.c里面,添加头文件#include <stdio.h>
-
在 main.c 文件最后,粘贴重定向函数(用你初始化好的串口,一般是 huart1)
int __io_putchar(int ch)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
} -
打开工程设置: Project Properties → Settings → Tool Settings → MCU Settings ✅ 勾选:Use Newlib-nano(newlib 精简库,必开,不然 printf 很大、容易报错)
如果要打印浮点数:在下方额外勾选 Print float with printf
-
保存设置,重新编译工程
-
测试,在 while 或者 main 里写:
printf("Hello STM32\r\n");
-
串口助手:波特率和 CubeMX 配置一致(比如 115200),打开串口就能看到打印信息
三、补充小提醒(你经常踩坑的)
- 只支持 UART 串口;这一套不是 ITM/SWV 调试打印
- 必须先在 CubeMX 把串口开启、生成代码、huart 初始化成功
- 报错找不到__io_putchar:确认勾选 newlib-nano
- 乱码:波特率、数据位、停止位、校验位匹配,记得加
\r\n(换行)