STM32 printf函数重映射

时间:2021-08-21 08:46:35

STM32 printf函数重映射  

/* Private function prototypes -----------------------------------------------*/

#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__ */



/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* Loop until the end of transmission */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
{}

/* write a character to the USART */
USART_SendData(EVAL_COM1, (uint8_t) ch);

return ch;
}

 

某人的解释:

这段代码的意思是将C语言的库函数printf重定向,或重映射,这词有点太专业,简单的讲:
就是C语言的库中printf函数会调用PUTCHAR_PROTOTYPE这个硬件接口函数,向显示器上输出char型变量,用来显示,
STM32当然是没有显示器的,所以就用UART输出Char型变量到PC机,由PC机的超级终端来显示,说白了,
就是原来送到显示器上的显示数据,现在送到STM32的串口上;
如果调不过去,你要注意两点:
1.你的板子上用的是不是USART1,如果是,那连到PC的串口,就可以在超级终端上,看到打印出来的东西了,如果不是,请参考第2点.
2.先将你的板子上的USART初始化,然后把PUTCHAR_PROTOTYPE函数体中的USART1换成你现在用的那个USART.
于免费送一个注意点,当然以上也都免费,呵呵
1.STM32的外设输出引脚可以重映射,如USART2,要注意板子上,是按原来的引脚连的,还是重映射后的,如果是重映射后的,请参考第2点.
2.如果连接是重映射后的引脚,请在原初始化之前,加一个重映射函数,当然ST例程中也有这部分代码,可以参考.