原因
然后其他外设配置好之后直接使用printf(“abc");发现a打印不出来,具体原因为stm32的usart的sr寄存器的TC为初始为1,导致第一次while时的第一个数据被覆盖,所以打印不出;
解决方法:
1.直接修改while的等待条件,while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);把TC改为TXE,因为TXE只能硬件清零,在数据写进DR时就置0,数据移出时置1,可以保证数据不会在DR被覆盖;
2.既然TC位初始为1导致的问题,那么我们在发送每一个字节前把TC置0也可以解决问题,
写多一句USART_ClearFlag(UART4, USART_FLAG_TC);
3.条件允许情况下,也可以委屈自己一下,在输出字符前面加一没用字符,也可以解决;
本文详细解析了STM32微控制器在使用USART进行串口打印时遇到的首个字符缺失问题。阐述了STM32的USART SR寄存器TC位初值为1导致的数据覆盖现象,并提供了三种解决方案:修改while等待条件、发送前手动清零TC位、或在字符前添加无用字符。
1231

被折叠的 条评论
为什么被折叠?



