C语言使用Printf()实现串口打印,方便追踪调试程序
在学习单片机的过程中,学会使用仿真器,用仿真器设置断点、单步调试是一种非常快速和有效的查找问题的方法,但是手边没有仿真器、没有预留仿真接口,要查看变量的变化该怎么办?这时候也是有办法的,通常的做法,把串口引出来,把串口寄存器配置好,通过RS232或者RS485来查看变量的状态和程序的运行方法,这时候只需要将数据发送函数添加到需要查看变量的下发即可,程序执行数据发送函数就可以将变量的值发送到调试助手中,供我们查看。如下所示,就可以通过Data_Send(pllmull)来查看pllmull的值。
除此之外,还有一种非常简便的方法,就是使用Printf()函数,这个函数我们都不陌生。在C语言的第一堂课,我们都学过“Hello world”这个程序,这个程序就是通过Printf()函数来实现的。再来怀旧一下:
使用单片机同样可以使用printf()函数,下面来介绍使用方法。
1. 添加头文件支持
printf()函数位于“stdio.h”文件中,所以第一步就是要添加该头文件;
2. 添加重定向函数
需要添加的重定向函数如下:
重定向函数写法固定,但是根据单片机不同、串口号不同,需要修改,以上函数使用的是片上资源USART1。之所以需要重定向是因为printf()是格式化输出函数,可以按规定格式向标准设备输出打印信息,但是单片机并不是一个标准的输出设备,所以在使用的时候需要借助重定向,将printf()重定向至UART中。所以上面代码的作用就是将重定向指向UART。
3. 配置串口寄存器
这一步就是配置串口通信的参数,所涉及的参数如波特率、数据长度、停止位、校验位等,这一块就是纯单片机的配置方式,大家可以参考下面这篇文章:
STM32单片机串口通信波特率计算方法(点击查看)
4. keil的设置
最后一步,需要对keil做一下设置,
在Target标签中,勾选USE MicroLIB选项.
通过以上三部就可以实现单片机的串口打印了。效果如下: