|
|
|
@ -159,4 +159,23 @@ void UART_RX_IRQHandler(TComCtrl *_ptComCtrl) |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
void UART_RX_ERRORHandler(TComCtrl *_ptComCtrl) |
|
|
|
{ |
|
|
|
TUartUserData *ptUartUserData = (TUartUserData *)_ptComCtrl->m_pUserData; |
|
|
|
if (NULL == ptUartUserData) return; |
|
|
|
/* 先读 RDR,清除残留 RXNE */ |
|
|
|
volatile uint32_t dummy = ptUartUserData->m_uart->Instance->RDR; |
|
|
|
(void)dummy; |
|
|
|
|
|
|
|
/* 清除 ORE 等错误标志 */ |
|
|
|
ptUartUserData->m_uart->Instance->ICR = USART_ICR_ORECF | USART_ICR_FECF | USART_ICR_PECF | USART_ICR_NECF; |
|
|
|
|
|
|
|
/* HAL 发生 ORE 时内部会锁住 huart,必须解锁后
|
|
|
|
才能重新启动 Receive_IT */ |
|
|
|
__HAL_UNLOCK(ptUartUserData->m_uart); |
|
|
|
|
|
|
|
/* 重新启动中断接收 */ |
|
|
|
HAL_UART_Receive_IT(ptUartUserData->m_uart, &ptUartUserData->m_temp, 1); |
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|