keil⼯程当中实现printf重定向串⼝打印之前是完全不知道printf可以重定向设置
最近才发现还有这等好事,可以让printf直接实现串⼝打印
在⽹上了很多资料,终于实现了我想要的效果
原理:printf是通过调⽤底部的fputc来实现打印效果的,所以如果我们重写fputc就能实现printf函数的重定向
也就是我们让fputc函数直接通过串⼝进⾏打印数据,则printf也可以通过串⼝打印数据
当然scanf也是⼀样的,我们也可以通过重写fgetc来实现串⼝接收数据
先随便新建⼀个C⽂件,然后添加到include路径⾥⾯(总之就是加到项⽬⽂件⾥⾯去,命名随意)
然后加⼊下列代码
1 #include "stdio.h"
2 #include "stm32f1xx_hal.h"
3
4extern UART_HandleTypeDef huart1;//根据需要修改huart,此处为UART1
5//定义变量存储⽤户数据
6 uint8_t ch;
7 uint8_t ch_r;
8
9//重写这个函数,重定向printf函数到串⼝
10int fputc(int c, FILE * f)
11 {
12  ch = c;//存储⼀个数据
13  HAL_UART_Transmit(&huart1,&ch,1,1000);//通过串⼝发送这⼀个数据(超时时间1000毫秒)
14return c;//发送完成后返回这个数据
15 }
16printf函数是如何实现的
17//重定向scanf函数到串⼝意思就是说接受串⼝发过来的数据
18int fgetc(FILE * F)
19 {
20  HAL_UART_Receive(&huart1,&ch_r,1,0xffff);//通过串⼝接收数据(超时时间65535毫秒)
21return ch_r;//返回接收到的数据信息
22 }
⾄此就完成了重定向printf和scanf两个函数
实验效果如下: