串口溢出后,因为接收移位寄存器不会把接收到的数据放到接收寄存器中,则RXNE/RXFNE不会再置位,不能再接收,表现为串口死机
__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE_RXFNE(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->ISR, USART_ISR_RXNE_RXFNE) == (USART_ISR_RXNE_RXFNE)) ? 1UL : 0UL);
}
在串口初始化之后,再加上以下代码,关闭串口溢出,解决问题
__HAL_UART_DISABLE(huart);
CLEAR_BIT(huart->Instance->CR3, USART_CR3_OVRDIS);
__HAL_UART_ENABLE(huart);