改写STM32标准库函数中的fputc

int fputc(int ch, FILE *f)
{
    unsigned char temp[1] = {ch};
    HAL_UART_Transmit(&huart1, temp, 1, 0xFFFF);
    return ch; // 或者返回 0,表示写入成功
}

标准库中的 printf 函数在执行输出时会调用 fputc 函数,将字符一个个发送到输出流中。通过重写 fputc 函数,你可以改变字符的输出方式,比如将字符通过 UART 发送出去,而不是输出到标准输出流(比如终端窗口)。

在代码中,直接调用 printf(ch) 并不会让你看到 fputc 函数被多次调用的过程,因为这个过程是在标准库中进行的,是隐藏在 printf 函数的内部实现中的。

所以,虽然在你的代码中你看不到 fputc 函数被多次调用的过程,但在 printf(ch) 执行的过程中,fputc 函数会被多次调用来完成字符的输出。

main函数里:
unsigned char ch[20] = {0};
HAL_UART_Transmit(&huart1, "hello world\n", strlen("hello world\n"), 100);
while(1)
{
HAL_UART_Receive(&huart1, ch, 19, 100);
//HAL_UART_Transmit(&huart1, ch, strlen(ch), 100);
printf(ch);
memset(ch, 0, strlen(ch));
}

所以虽然ch数组大小为20个字节,但是printf会多次调用fputc,一个一个字节传过去。

最后别忘了勾选Micro LIB库,不然printf无法重映射。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值