C语言中printf函数默认输出设备是显示器,如果要实现在串口或者LCD上显示,必须重定义标准库函数里调用的与输出设备相关的函数。比如使用printf输出到串口,需要将fputc里面的输出指向串口,这一过程就叫重定向。
核心思想:利用C语言特性中的”就近原则”;
那么如何让STM32使用printf函数呢?
那么我们首先需要知道为什么我们需要实现printf的重定向?
在Windows编译器中我们知道,printf可以输出很多种格式的数据,例如:%d、%s、%c、%x等等。但是在STM32中,我们需要向串口或者lcd上显示,只能通过串口在USARTx_ODR上以字符的格式进行读取和发送。那么也有可以勉强实现传输字符串的方式如下图所示
可以将要发送的字符串的地址通过这个封装的函数进行传输,实质上也是通过字节进行数据传输。那我们想要传输数字,难道还需要将数字转换成字符后再输出吗?这样效率上就太慢了!
由此,我们希望在单片机上也能够实现输出“自由”!所以,业界大能就想到了基于<stdio.h>
(标准输入输出库)对printf的底层函数进行移植,或者说是进行“打劫”!
串口想要使用printf需要对printf重定向,也就是需要重定义fputc(),这个函数是 printf的底层函数。劫取