嵌入式开发:printf、scanf的重定向 gaunthan Posted on Jul 23 2016 ? Embedded Development ? > 在嵌入式开发中,如果能使用C库的printf和scanf这类函数的话,对项目的开发是非常有益的。比如,格式化控制输出,格式化控制输入等等特性。因此,有必要实现它们。 ## 概述 把printf和scanf重定向到串口,需要用户重写C的库函数。当连接器检查到用户编写了与C库函数相同名字的函数时,优先采用用户编写的函数,这样用户便可以实现对库的修改了。 为了实现printf的重定向,需要重写fputc函数;而为了实现scanf函数的重定向,需要重写fgetc函数。 ## 实现fputc printf通过调用putchar函数实现打印功能,而putchar最后调用了fputc函数,因此,实现fpuc函数即可: ``` /* 以下使用STM32固件库使printf重定向至串口1。*/ int fputc(int ch, FILE *f) { /* 发送一个字节数据到USART1 */ USARTSendData(USART1, (u8)ch); /* 等待发送完毕 */ while(USARTGetFlagStatus(USART1, USARTFLAGTC) == RESET) ; return ch; } ``` ## 实现fgetc 实现scanf需要实现fgetc函数: ``` int fgetc(FILE *f) { /* 从USART1获得一个字节数据,并返回它 */ return USARTReceiveData(USART1); } ``` ## 配置Keil工程 按照下图启用微库:  ## 在源文件内添加stdio.h头文件 在使用到输入和/或输出的源文件内,添加stdio.h头文件即可。 赏 Wechat Pay Alipay Orange Pi Lite新手指南 Git 常用配置