STM32的疑难杂症之一:Printf的使用 一、Printf简介 Printf是一个标准的C库API,用来打印信息显示的。Printf的底层输出调用,在windows环境下是fputc函数,在GNUC环境下是__io_putchar函数。Printf主要做两件事:第一件是将参数字符串以及可变参数进行解析,格式化成 一串字符串。第二件事就是将格式化的
之前可以的#ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC_...
fputc 函数写入字符 ch 到给定输出流 stream,printf函数在调用该函数时,会向stream参数传入stdout从而打印数据到标准输出。 那么,要实现printf打印到串口就变得非常简单了,只需要重新定义fputc函数,在fputc的函数中将数据通过串口发送,称之为:fputc重定向或者printf重定向。 2.在MDK中使用MicroLib重定向printf 勾选Use Mi...
1. #ifdef __GNUC__2. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)3. #else 4...
= HAL_OK){Error_Handler();}}void Error_Handler(void){while(1){}}#ifdef __GNUC__#define ...
例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: 只要自己添加一个int fputc(int ch, FILE *f)函数,能够输出字符就可以了 #ifdef__GNUC__/*With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar()*/#definePUTCHAR...
2 宏定义并实现具体的发送函数 代码在编译时首先判断__GNUC__有无定义,之后将PUTCHAR_PROTOTYPE替换成具体的定义。在keil5中,使用fputc函数,所以其实最后是重写了fputc的实现,在该函数中,调用串口的发送函数,每次发送一个字符。3 在使用标准库的时候,需要修改设置使用MicroLib,或者还是使用标准库并添加一部分...
endif /* __GNUC__ */ 这个宏定义根据不同的编译环境选择合适的输出函数原型。接下来,我们需要实现这个输出函数。其具体实现如下:PUTCHAR_PROTOTYPE { /* 将Printf内容发往串口 */ USART_SendData(USART1, (unsigned char) ch);//USART1->SR:TXE位为发送数据寄存器空 //while (!(USART1->...
本文详细的介绍了如何重定向printf输出到串口输出的多种方法,包括调用MDK微库(MicroLib)的方法,调用标准库的方法,以及适用于 GNUC 系列编译器的方法。 1.printf与fputc 对于printf 函数相信大家都不陌生,第一个C语言程序就是使用 printf 函数在屏幕上的控制台打印出Hello World,之后使用 printf 函数输出各种类型的数据...
一、常见printf输出 1.UART打印 这种使用UART串口输出,需要占用一个硬件串口。 2.KeilMDK-ARMViewer输出 3.IAR EWARM终端输出 4.ST-LINK Utility SWV输出 这后面三种不占用硬件UART,使用ITM机制。 二、UART映射printf 这种方法应该很多人都知道,就是使用硬件UART串口映射,实现printf打印输出。