来源:http://blog.163.com/qiu_zhi2008/blog/static/6014097720111110710738/
STM32 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__ */

基于stm32Cube库:STM32Cube_FW_L1_V1.2.0

/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the 串口2 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);

  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例程中也有这部分代码,可以参考.

版权声明:本文为guangmingwang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/guangmingwang/p/4561323.html