Browse Source

【主线待合】增加错误处理逻辑

master^2
Lizongdi 7 days ago
parent
commit
e96acccce6
  1. 19
      bspMCU/bsp_uart.c
  2. 1
      bspMCU/include/bsp_uart.h
  3. 2
      project

19
bspMCU/bsp_uart.c

@ -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

1
bspMCU/include/bsp_uart.h

@ -37,6 +37,7 @@ extern TUartUserData *UART_userdata_init(int _iID, int32_t _uiBaudRate, uint32_t
extern void UART_IT_init(TComCtrl *_ptComCtrl);
extern void UART_DMA_RX_IRQHandler(TComCtrl *_ptComCtrl);
extern void UART_RX_IRQHandler(TComCtrl *_ptComCtrl);
extern void UART_RX_ERRORHandler(TComCtrl *_ptComCtrl);
#endif
#endif /* end of include guard: BSP_UART_H */

2
project

@ -1 +1 @@
Subproject commit 86e867c5d8efd261ce78e0ee480771e8b6e8a7f7
Subproject commit bb250aa22b82811f6f752bb266d19092e6a78b61
Loading…
Cancel
Save