|
玩过STM32的应该都是知道的关于把串口重定向到printf函数那边,但是发现单片机的比较少的,但是我还是想用一下。当然printf函数的用处和好处就不必多说了!!他可以输出任意的字符,16进制数,浮点数,包括各式的定义等等。
好了!废话不多说了下面我就以实际例子讲一下。但是还得告诉大家我的设备。单片机是STC12C5204AD。用的是keil2虽然老了点但是本人用着可以。
先上一张图片吧!!
这张图片包含了一下数据要仔细看清楚啦!!上面有AD的转换数据,P1口的状态值,波特率设置值,EEPROM读取的数值。上面的所有数据都是通过printf函数打印到串口助手上面如果不用printf函数就会是很麻烦的事情。用的话就会简单多了。
接下来我们讲程序的实现。首先就是串口的实现,AD转换的实现,波特率的设置,再次我就不在啰嗦,不懂的去网上自己去找吧!!很多很多。。比我讲的都好!!
单片机的串口重定向比较简单就是不容易想到。来一张图片看一下。这是重定向函数是吧很简单。就是在你配置完串口的时候首先写一个数到SBUF寄存器中然后在用printf函数打印就可以,当让这个顺序是不可以变的,如果你想在追问细节为什么,我只能告诉你这应该是开发环境决定的,这一点我就理解这么多,如果有大侠给出更好的解释我也一起共勉。
现在我们来看一下这个程序结构。
首先是串口配置完成。调用重定向函数。就把串口定向到了printf函数了。我在printf函数里面加上了“串口初始化完毕”。
好了现在我们看一下我的串口数据打印情况。仔细看第一行数据就能看到我打印出的字符。并且还能看到程序走的步骤,走到哪一步了,都能得到而且很方便。
所有的一切都搞定了就可以进行AD转换了。就会看到最长的哪一个字符串,就是我在开始讲的那一串字符数据,程序如下完全是C语言的printf风格。
printf("\rEMD电子科技 AD_Data: %f V P1: %X Boud_Rate: %d Eeprom: %d\n",(float)(AD_Data),(uint)(P1),(uint)(Boud_Value),(uint)(temp1));
经过以上讲解大家就可以随意使用串口打印自己想要的东西啦!!!!
如有更好的望高手提出共同学习!!!
最后上程序吧!!!
说明一下本程序只是文本文档不是工程,当然源码不会少的,建立工程立马可用。。。。。欢迎大家交流学习。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|