关于printf函数转重定向到串口我在此讲一下!!!

2020-01-15 19:22发布

   玩过STM32的应该都是知道的关于把串口重定向到printf函数那边,但是发现单片机的比较少的,但是我还是想用一下。当然printf函数的用处和好处就不必多说了!!他可以输出任意的字符,16进制数,浮点数,包括各式的定义等等。
  好了!废话不多说了下面我就以实际例子讲一下。但是还得告诉大家我的设备。单片机是STC12C5204AD。用的是keil2虽然老了点但是本人用着可以。
  先上一张图片吧!! P(04L6NRFBYK6}60W565IJI.jpg (108.52 KB, 下载次数: 1) 下载附件 2012-5-31 20:44 上传 仔细看第一行数据就能看到我打印出的字符。并且还能看到程序走的步骤,走到哪一步了,都能得到而且很方便。
   所有的一切都搞定了就可以进行AD转换了。就会看到最长的哪一个字符串,就是我在开始讲的那一串字符数据,程序如下完全是C语言的printf风格。
   printf(" EMD电子科技 AD_Data: %f V P1: %X Boud_Rate: %d Eeprom: %d ",(float)(AD_Data),(uint)(P1),(uint)(Boud_Value),(uint)(temp1));
   经过以上讲解大家就可以随意使用串口打印自己想要的东西啦!!!!
   如有更好的望高手提出共同学习!!!
   最后上程序吧!!!
    串口.rar (2.95 KB, 下载次数: 383) 2012-5-31 20:56 上传 点击文件名下载附件
程序

  说明一下本程序只是文本文档不是工程,当然源码不会少的,建立工程立马可用。。。。。欢迎大家交流学习。
   
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
39条回答
shi_90
1楼-- · 2020-01-16 13:23
danju 发表于 2012-6-1 00:04
这个是调用stdio的库函数吗?如果程序任务中本身就有串口中断,这样用会不会有冲突呢? ...

是调用的库函数,但是把出口定义到了串口,我不是很明白你说的这个程序任务本身什么意思??不过我测试的没发现冲突。。。。。
BXAK
2楼-- · 2020-01-16 18:38
shi_90 发表于 2012-6-1 00:46
无符号长整型数据一般不能强制转换类型一般printf只是无符号整形数据(具体我倒没测试,测试完了再告诉你 ...

4楼的方法OK
danju
3楼-- · 2020-01-16 20:47
shi_90 发表于 2012-6-1 00:49
是调用的库函数,但是把出口定义到了串口,我不是很明白你说的这个程序任务本身什么意思??不过我测试的 ...

我是说程序本身就有串口任务的,如果调试时用重定向打印,会不会有冲突?

另外想知道,这种重定向打印很方便,串口用的是中断模式?还是printf发送时要判断TI和等待?
shi_90
4楼-- · 2020-01-17 01:44
 精彩回答 2  元偷偷看……
tlptotop
5楼-- · 2020-01-17 06:24
就是在你配置完串口的时候首先写一个数到SBUF寄存器中然后在用printf函数打印就可以,当让这个顺序是不可以变的,如果你想在追问细节为什么,我只能告诉你这应该是开发环境决定的,这一点我就理解这么多,如果有大侠给出更好的解释我也一起共勉。

其实也不用首先写一个数据到SBUF寄存器,只需在串口初始化后,加上一句TI=1;即可。原因是printf函数事实上是调用putchar输出字符的。之所以能输出到串口上,就是因为putchar函数把字符通过串口输出。
这是keil中putchar最简单的版本,其他版本也一样,看函数就明白为什么要先让TI=1;了,楼主写的那个SBUF=0,原理是相同的,写入了数据,那么TI就等于1了,然后就可以使用putchar函数和printf函数了。
putchar函数的源码在{keil安装目录下}C51LIB文件夹里的PUTCHAR.C文件里,另外在keil的帮助文档里有说明
  1. char putchar (char c)  {
  2.   while (!TI);
  3.   TI = 0;
  4.   return (SBUF = c);
  5. }
复制代码
shi_90
6楼-- · 2020-01-17 09:29
tlptotop 发表于 2012-6-1 15:51
其实也不用首先写一个数据到SBUF寄存器,只需在串口初始化后,加上一句TI=1;即可。原因是printf函数事实上 ...

谢谢!!学习了!!

一周热门 更多>