[应用方案] 串口printf调试输出

[复制链接]
114|46
modesty3jonah 发表于 2026-4-28 17:54 | 显示全部楼层 |阅读模式
在头文件中包含stdio.h

再在c文件中添加重定向:

  GCC和keil等不同编译器调用printf时候是不同的

  可以定义一个宏保证他们的兼容性,即使printf函数重定向
  1. #ifdef __GNUC__    //选择gcc编译时才会定义的宏
  2. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  3. #else
  4. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f)    //单片机字符也是int类型保存
  5. #endif


  6. PUTCHAR_PROTOTYPE
  7. {
  8.     HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);
  9.     return ch;
  10. }
串口浮点数输出:
  由于单片机硬件资源限制(内存小),STM32单片机里C语言标准库的printf()并不支持浮点数的输出
  可以在Properties Settings中添加 -u _printf_float解决

uiint 发表于 2026-6-3 20:09 | 显示全部楼层
在使用 printf 前,需完成串口的初始化配置
kkzz 发表于 2026-6-3 22:19 | 显示全部楼层
printf函数体庞大,且通常包含 putchar循环等待发送完成(阻塞)。
pentruman 发表于 2026-6-3 22:43 | 显示全部楼层
如何用串口调试理解程序运行状态?
热爱童话世界 发表于 2026-6-3 22:59 | 显示全部楼层
学习了,原来还可以通过修改链接器设置来支持浮点数的输出,这对于资源受限的单片机来说非常有用。
wangdezhi 发表于 2026-6-4 08:15 | 显示全部楼层
用串口 printf 进行调试就像是让单片机“开口说话”
adolphcocker 发表于 2026-6-4 08:34 | 显示全部楼层
添加 stdio.h 头文件printf 函数声明位于此头文件中,必须包含以使用该函数
kmzuaz 发表于 2026-6-4 18:18 | 显示全部楼层
串口调试中波特率计算实例演示中断式
pmp 发表于 2026-6-5 20:21 | 显示全部楼层
能用整数别用浮点。              
loutin 发表于 2026-6-5 21:37 | 显示全部楼层
高频使用可能严重拖慢主程序,甚至错过中断。调试结束后,务必注释或移除无关的 printf 语句
nomomy 发表于 2026-6-6 10:19 | 显示全部楼层
不要在中断服务程序或要求严苛的实时控制环路中使用 printf,否则会直接导致中断溢出或控制周期超时。
pl202 发表于 2026-6-6 12:39 | 显示全部楼层
如何打印中文字符不乱码?              
phoenixwhite 发表于 2026-6-6 15:51 | 显示全部楼层
printf 本质上是 C 标准库的格式化输出函数
averyleigh 发表于 2026-6-6 16:11 | 显示全部楼层
己实现轻量 uart_printf
51xlf 发表于 2026-6-6 16:32 | 显示全部楼层
需要重写 fputc 函数,将字符通过串口发送出去,这就是“重定向”。
jtracy3 发表于 2026-6-6 17:32 | 显示全部楼层
默认 printf 输出到标准输出,必须重定向到串口发送函数
backlugin 发表于 2026-6-7 21:10 | 显示全部楼层
在 Keil 中,标准 C 库的 printf 依赖复杂的文件系统。必须在工程设置中勾选 “Use MicroLIB”,它针对嵌入式做了精简,才能正常支持重定向
hudi008 发表于 2026-6-7 22:00 | 显示全部楼层
如何在printf中高效打印浮点数?
yeates333 发表于 2026-6-7 22:19 | 显示全部楼层
频繁或大量调用printf可能导致程序运行效率降低
beacherblack 发表于 2026-6-10 12:29 | 显示全部楼层

怎么用printf输出到多个串口?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

2115

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
0