之前是完全不知道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两个函数

实验效果如下:

最新文章

  1. python chm 中文帮助 (2.7 和 3.4)
  2. CMD-NET命令详解(转载)
  3. PL/SQL — 隐式游标
  4. easyui treegrid 封装(不用分页,用加载更多按钮)延迟加载加加载更多
  5. 该项目中不存在目标 precomputecompiletypescript The target "PreComputeCompileTypeScript" does not exist in the project
  6. The Unique MST (判断是否存在多个最小生成树)
  7. linux杂记(八)linux压缩与打包
  8. Web Deploy发布网站及常见问题解决方法(图文)
  9. java微信平台,发源码
  10. Cookie防篡改机制
  11. 数据导出Excel表格
  12. mysql练习----More JOIN operations
  13. 7.01-beautiful_soup3
  14. Idea中JavaWeb项目部署
  15. Kafka监控KafkaOffsetMonitor【转】
  16. ES--03
  17. JS的document.anchors函数使用示例
  18. JDK源码之ReentrantLock
  19. ora-24550 signo=6 signo=11解决
  20. python基础之赋值/深copy/浅copy

热门文章

  1. css添加全部省略号的方式
  2. 描述一下 DispatcherServlet 的工作流程 ?
  3. 什么是 OAuth?
  4. kafka客户端打印日志
  5. ElasticSearch-学习笔记04-复杂查询
  6. 10.Flink实时项目之订单维度表关联
  7. snippet,让你编码效率翻倍
  8. 前端网络安全——前端XSS
  9. python-验证6174猜想
  10. java中finally有什么意义呢,在现实中?举例