很早就知道了这个问题,在串口写入时的速度和发送速度不一样,写入过快会丢失一部分,导致控制不正常。
为此每次写入前个检查USART_FLAG_TXE位是否为空,下次发送前检查USART_FLAG_TC位是否发送完。
程序可修改如下
-
USART_SendData(USART1,0xFF); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);//是否为空
-
USART_SendData(USART1,0xFF); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);//是否发送完