keil工程当中实现printf重定向串口打印
2022/3/27 6:24:21
本文主要是介绍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两个函数
实验效果如下:
这篇关于keil工程当中实现printf重定向串口打印的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)