STM32使用printf丢失第一个字母怎么办?
扫描二维码
随时随地手机看文章
STM32使用printf函数给串口打印信息的执行步骤为:
1.重定向printf函数
给uart.c文件中增加如下函数:
//重定向c库函数printf到USART1intfputc(intch,FILE*f){/*清SR寄存器中的TC标志*/USART_ClearFlag(USART1,USART_FLAG_TC);/*发送一个字节数据到USART1*/USART_SendData(USART1,(uint8_t)ch);/*等待发送完毕*/while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
return(ch);}
2.增加头文件stdio
#include
3.勾选Use MircoLIB
以上3条,缺一不可,如果你只做了第一步,编译的时候,就会报错,如下所示:
CFGuart.c(52):error:#20:identifier"FILE"isundefined
如果只做了前两步,而没有勾选Use MicorLIB,编译器虽然不会报错,但是串口不会输出数据。
很多人做了重定向函数以后,输出一串字符的第一个字符会丢失,根本原因是因为SR寄存器中的TC标志默认是置1的。
解决方法1:和我上面的重定向函数一样,在开始先用USART_ClearFlag(USART1,USART_FLAG_TC);函数把TC标志清0。
解决方法2:写字符串的时候,前面留一个空格。
两种方法选一个即可。