应该如6楼所说的情况,当你判断USART_FLAG_TXE时数据只是被转移到移位寄存器里,并没有发送或完全发送,你又将下一个数据写进去,造成前一个数据的丢失,所以你应该改为判断USART_FLAG_TC位,查询法可改为 while (1) { while (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET); i = USART_ReceiveData(USART1); while (USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET); USART_SendData(USART1, i); } 测试结果 [img]
[/img]
|