stm32中printf第一次打印字符丢失

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32中printf第一次打印字符丢失相关的知识,希望对你有一定的参考价值。

while(1)

printf("why?i=%d",i);

第一个循环打印出的只有wy?i=%d,少了一个h,以后就正常。
这是为什么?

如果打印机出现打印字符丢失,问题可能出在打印机上,需要换台打印机解决问题。
打印机也是一种常用的输出设备。因为显示器上显示的内容一旦关机就看不见了,也不方便把显示器搬来搬去给别人阅读,所以我们还是需要用打印机把自己的工作成果打印出来。
打印机分为针式打印机、喷墨打印机和激光打印机。
针式打印机通过打印头上的针打印字符和图形,分辨率较低,打印速度比较慢。
喷墨打印机体积小,质量小,打印分辨率在360点/英寸以上,打印速度比较慢,效果一般。
激光打印机是复印机、电脑和激光的组合,打印速度快,分辨率高,无噪声,用同步的多面镜像和完整的光学部件在硒鼓上写字符,激光扫过硒鼓时,通过开关的两种状态表示白色区域和黑色区域。硒鼓旋转一圈,激光打印机就打印出一行。激光打印机本身含内存,一般在64MB到2GB之间。
参考技术A 这是因为TC和TXE 标志位在复位的时候会被置1,导致第一次没有发送。
可以在printf("why?i=%d",i);前添加一句USART1->SR;清下标志位。
或者简单点,在你需要输出的字符前加一个空格。本回答被提问者和网友采纳
参考技术B 目测printf重定向函数里面TC标记位没有清0。因为SR寄存器中的TC标记位默认是置1的,所以只要把TC标记位清0就OK了。
int fputc(int ch, FILE *f)

/* 清SR寄存器中的TC标志 */
USART_ClearFlag(USART1,USART_FLAG_TC);

USART_SendData(USART1,(uint8_t)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
return ch;

以上是关于stm32中printf第一次打印字符丢失的主要内容,如果未能解决你的问题,请参考以下文章

STM32为啥要用重定向printf来打印串口数据?直接用串口发送函数不行吗

STM32串口打印的那些知识

STM32串口打印的那些知识

STM32标准库_03 | 串口printf打印

TrueStudio开发工具:printf函数输出使用没方向,怎么办?

STM32CubeMx + makefile --- 添加串口打印 printf