[!前情提要] 通常重定向
fputc函数(标准库中printf的底层函数),将输出数据发送到串口,让开发者可以像在 PC 编程中一样使用printf进行调试和信息输出,能极大地程度地简化开发过程。
重写 fputc 函数(基于HAL库)
1. 阻塞式(HAL_UART_Transmit)
- 实现最简单:只需几行代码即可完成重定向
- 可靠性高:数据发送过程由 CPU 全程监控,不会因缓冲区溢出或配置错误导致数据丢失
- 阻塞 CPU:发送过程中 CPU 无法执行其他任务,若发送大量数据(如长字符串)会显著占用 CPU 时间。
#include <stdio.h>
// 假设已初始化 USART1,句柄为 huart1
// 重写 fputc,将字符发送到 USART1
int fputc(int ch, FILE *f)
{
// 发送一个字节到串口,超时时间设为无限等待
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); //阻塞式发送
return ch; // 返回写入的字符
}