借用9楼的
1 if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) 2 { 3 // Read one byte from the receive data register 4 temp = USART_ReceiveData(USART2); 5 USART_SendData(USART2,temp); 6 while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); 7 { 8 ; 9 } 10 }
第5行有一个严重错误
就是未检查串口发送寄存器是否为空就发送数据
试着把6-9行改到第5行之前,把条件改成发送寄存器是否为空(TXE),就一定没问题了
>> 另外,即使是这个问题,那一串数据时第一个字节总应该能转发对,是不是?
第5行刚刚发送时,数据还没进入发送移位寄存器,TC的状态有可能还是置位,所以6-9行的检查无效
在你正在发送第一个字节时,收到第二个字节,没作 TXE 检查就发送第二个字节,肯定把第一个正在发送中的字节破坏了 |