CubeIDE串口重定向 printf

、简单链路(一句话看懂)

printf("xxx") → newlib库 → 调用弱函数 __io_putchar → 我们重写这个函数 → 调用HAL_UART_Transmit → 串口发送到电脑串口助手

核心:__io_putchar 是弱函数,我们自己写一份,就会覆盖库里面原来的空实现

二、你的 CubeIDE + STM32F4 最简步骤(串口重定向 printf)

  1. 在 main.c 里面,添加头文件

    #include <stdio.h>

  2. 在 main.c 文件最后,粘贴重定向函数(用你初始化好的串口,一般是 huart1)

    int __io_putchar(int ch)
    {
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
    return ch;
    }

  3. 打开工程设置: Project Properties → Settings → Tool Settings → MCU Settings ✅ 勾选:Use Newlib-nano(newlib 精简库,必开,不然 printf 很大、容易报错)

如果要打印浮点数:在下方额外勾选 Print float with printf

  1. 保存设置,重新编译工程

  2. 测试,在 while 或者 main 里写:

    printf("Hello STM32\r\n");

  3. 串口助手:波特率和 CubeMX 配置一致(比如 115200),打开串口就能看到打印信息

三、补充小提醒(你经常踩坑的)

  • 只支持 UART 串口;这一套不是 ITM/SWV 调试打印
  • 必须先在 CubeMX 把串口开启、生成代码、huart 初始化成功
  • 报错找不到__io_putchar:确认勾选 newlib-nano
  • 乱码:波特率、数据位、停止位、校验位匹配,记得加 \r\n(换行)
相关推荐
沐晓时光2 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
智者知已应修善业9 小时前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
布莱克60518 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
揽星河..1 天前
【C语言】底层程序设计
c语言·开发语言
揽星河..1 天前
【C语言】结构体
c语言·开发语言
唐青枫1 天前
C 语言 malloc() 详解与实战 Demo
c语言
揽星河..1 天前
【C语言】指针
c语言·开发语言
蹊黎2 天前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
爱聊灵光的维C2 天前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI+程序员在路上2 天前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能