根据网上提供的解决方法有三个,实际测试有效的是1、3,手册描述是需要使用2,实际使用效果不太好
1、发送函数中检测标志USART_FLAG_TXE
2、初始化时清除标志USART_ClearFlag(UART4, USART_FLAG_TC);
3、初始化后随便发送一个字符
USART_FLAG_TXE和USART_FLAG_TC似乎需要配合使用效果更好
void usartSendData(USART_TypeDef* USARTx,uint8_t *dat,uint16_t length) { while(length--) { while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET) ; USART_SendData(USARTx,*dat++); while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET) ; } }