keil工程当中实现printf重定向串口打印
2024-08-30 00:27:37
之前是完全不知道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两个函数
实验效果如下:
最新文章
- python chm 中文帮助 (2.7 和 3.4)
- CMD-NET命令详解(转载)
- PL/SQL — 隐式游标
- easyui treegrid 封装(不用分页,用加载更多按钮)延迟加载加加载更多
- 该项目中不存在目标 precomputecompiletypescript The target ";PreComputeCompileTypeScript"; does not exist in the project
- The Unique MST (判断是否存在多个最小生成树)
- linux杂记(八)linux压缩与打包
- Web Deploy发布网站及常见问题解决方法(图文)
- java微信平台,发源码
- Cookie防篡改机制
- 数据导出Excel表格
- mysql练习----More JOIN operations
- 7.01-beautiful_soup3
- Idea中JavaWeb项目部署
- Kafka监控KafkaOffsetMonitor【转】
- ES--03
- JS的document.anchors函数使用示例
- JDK源码之ReentrantLock
- ora-24550 signo=6 signo=11解决
- python基础之赋值/深copy/浅copy