keil工程当中实现printf重定向串口打印

之前是完全不知道printf可以重定向设置

最近才发现还有这等好事,可以让printf直接实现串口打印

在网上找了很多资料,终于实现了我想要的效果

原理:printf是通过调用底部的fputc来实现打印效果的,所以如果我们重写fputc就能实现printf函数的重定向

也就是我们让fputc函数直接通过串口进行打印数据,则printf也可以通过串口打印数据

当然scanf也是一样的,我们也可以通过重写fgetc来实现串口接收数据

先随便新建一个C文件,然后添加到include路径里面(总之就是加到项目文件里面去,命名随意)

然后加入下列代码

复制代码
 1 #include "stdio.h"
 2 #include "stm32f1xx_hal.h"
 3 
 4 extern UART_HandleTypeDef huart1;//根据需要修改huart,此处为UART1
 5 //定义变量存储用户数据
 6 uint8_t ch;
 7 uint8_t ch_r;
 8 
 9 //重写这个函数,重定向printf函数到串口
10 int fputc(int c, FILE * f)
11 {
12   ch = c;//存储一个数据
13   HAL_UART_Transmit(&huart1,&ch,1,1000);//通过串口发送这一个数据(超时时间1000毫秒)
14   return c;//发送完成后返回这个数据
15 }
16 
17 //重定向scanf函数到串口 意思就是说接受串口发过来的数据
18 int fgetc(FILE * F)
19 {
20   HAL_UART_Receive(&huart1,&ch_r,1,0xffff);//通过串口接收数据(超时时间65535毫秒)
21   return ch_r;//返回接收到的数据信息
22 }
复制代码

至此就完成了重定向printf和scanf两个函数

实验效果如下:

 

posted @   砕月之殇  阅读(2415)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
欢迎阅读『keil工程当中实现printf重定向串口打印』
/*粒子线条,鼠标移动会以鼠标为中心吸附的特效*/
点击右上角即可分享
微信分享提示