STM32 串口两套打印实现

代码

/**
  * 函    数:重定向 printf 的底层函数,然后就可以在源文件中调用 printf 了
  * 参    数:保持原始格式即可,无需变动
  * 返 回 值:保持原始格式即可,无需变动
// 重定向 fputc 跟 printf 的关系,fputc 是 printf 的底层,printf 函数在不断打印的时候,就是不断调用 fputc 函数一个个打印,我们把 fputc 函数重定向到串口,那 printf 自然就输出到串口了。
  /
int fputc(int ch, FILE f)   // 这是 fputc 函数原型
{
    Serial_SendByte (ch);     // 将 printf 的底层重定向到自己的发送字节函数
    return ch;
}
                             
/
  * 函    数:自己封装的 prinf 函数,代码中调用Serial_Printf来代替调用printf函数
  * 参    数:format 格式化字符串
  * 参    数:... 用来接收后面的可变的参数列表
  * 返 回 值:无
  */
void Serial_Printf (char *format, ...)
{
    char String [100];   // 定义字符串
    va_list arg;        // 定义可变参数列表数据类型的变量
    va_start (arg, format);  
    vsprintf (String, format, arg);  
    va_end (arg);                   
    Serial_SendString (String);      // 串口发送 String
} 

STM32 串口两套打印实现完整解析

两套方案,都实现串口打印,底层原理完全不一样

  1. fputc重定向 → 标准库printf()
  2. Serial_Printf自己封装可变参数 → 自定义打印函数

第一部分:fputc 重定向,对接系统 printf

int fputc(int ch, FILE *f)
{
	Serial_SendByte(ch);
	return ch;
}

fputc 和 printf 的关系

C 标准库里面: printf()本身不会直接输出,printf 底层循环调用fputc(),每输出 1 个字符,就调用一次fputc输出这个字符。

例如:printf("AB");

  1. printf 先处理格式化,得到字符'A''B'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值