由于在日常使用中经常碰到要使用printf的时候,每次都要去上网翻查一下,在此做记录方便查找
C语言中的标准库中所用的标准输出函数,默认的输出设备是显示器,要实现串口或LCD的输出,必须重新定义标准库函数里与输出函数相关的函数。例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下:
只要自己添加一个int fputc(int ch, FILE *f)函数,能够输出字符就可以了
使用STM32CubeMX配置串口工程后,想直接使用printf需要加以下代码到usart.c的用户代码段:
/* USER CODE BEGIN 1 */
#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 */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 1 */
就这样而不需要宏定义任何内容了,代码中粗暴的printf("hello world")吧~,此方法亲测适用MDK和IAR环境
———————————————————————2020.07.06更新———————————————————————
- 添加一些神奇的三字母词
- 在printf的""内打入左侧的三字母,执行后会得到右侧的字符(^U^)ノ~YO
-
??( ———— [
-
??) ———— ]
-
??< ———— {
-
??> ———— }
-
??= ———— #
-
??/ ———— \
-
??! ———— |
-
??' ———— ^
-
??- ———— ~
-
-
一些转义字符
-
\ddd ddd表示1~3个八进制数字。这个转义符表示的字符就是给定的八进制数值所代表的字符。
-
\xddd 与上面类似,只是八进制数换成了十六进制数
-
任何十六进制数都有可能会包含在\xddd序列中,但如果结果值得大小超出了表示字符的范围,其结果就是未定义的。
-
-