这个问题的根本原因是复位后,TC和TXE标志位默认都是1,很多人喜欢这样写:
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
while在发送第一个字节时没有起到应有作用,直接跳出,接着写第二个字节,这时第一个字节还未发出,数据被破坏了
USART_SendData执行后延迟一段时间,TC标志位才清零。
把GPIO时钟和USART时钟一起开,就不会出现fe