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