摘要:本文介绍了在不同嵌入式平台上重定向printf输出到串口的实现方法。重点说明了三步操作:1.初始化串口;2.添加fputc重定向函数,将字符发送至UART;3.包含stdio.h头文件即可使用printf。同时提供了三种常见平台(TI CCS、GCC+Newlib、IAR)的具体实现代码示例,帮助开发者在不同环境下快速实现串口调试输出功能。
三步即可
一、初始化串口
依次点击串口初始化配置

二、重定向
添加重定向函数,放哪里都可以
/**
* @brief 重定向 printf 底层输出到 UART
*
* 标准库 printf 最终会调用 fputc 输出每个字符,
* 重写此函数即可让 printf 直接通过串口打印,
* 无需任何包装函数。
*/
int fputc(int ch, FILE *f)
{
DL_UART_Main_transmitDataBlocking(debug_INST, (uint8_t)ch);
return ch;
}
三、包含头文件
在要使用printf的文件下,添加头文件包含#include <stdio.h>,即可使用和c语言几乎一样的printf函数
四、其他厂商单片机方法
各平台的写法不太一样
各平台参考写法
// === TI CCS (你当前用的) ===
int fputc(int ch, FILE *f)
{
DL_UART_Main_transmitDataBlocking(debug_INST, (uint8_t)ch);
return ch;
}
// === GCC + Newlib (STM32/GD32/大多数 ARM) ===
int _write(int fd, char *ptr, int len)
{
for (int i = 0; i < len; i++)
HAL_UART_Transmit(&huart1, (uint8_t *)&ptr[i], 1, HAL_MAX_DELAY);
return len;
}
// === IAR ===
size_t __write(int handle, const unsigned char *buf, size_t size)
{
for (size_t i = 0; i < size; i++)
UART_SendByte(buf[i]);
return size;
}