@@ -783,30 +783,35 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
783
783
*/
784
784
void HAL_UART_ErrorCallback (UART_HandleTypeDef * huart )
785
785
{
786
- volatile uint32_t tmpval ;
787
786
#if defined(STM32F1xx ) || defined(STM32F2xx ) || defined(STM32F4xx ) || defined(STM32L1xx )
788
787
if (__HAL_UART_GET_FLAG (huart , UART_FLAG_PE ) != RESET ) {
789
- tmpval = huart -> Instance -> DR ; /* Clear PE flag */
788
+ __HAL_UART_CLEAR_PEFLAG ( huart ) ; /* Clear PE flag */
790
789
} else if (__HAL_UART_GET_FLAG (huart , UART_FLAG_FE ) != RESET ) {
791
- tmpval = huart -> Instance -> DR ; /* Clear FE flag */
790
+ __HAL_UART_CLEAR_FEFLAG ( huart ) ; /* Clear FE flag */
792
791
} else if (__HAL_UART_GET_FLAG (huart , UART_FLAG_NE ) != RESET ) {
793
- tmpval = huart -> Instance -> DR ; /* Clear NE flag */
792
+ __HAL_UART_CLEAR_NEFLAG ( huart ) ; /* Clear NE flag */
794
793
} else if (__HAL_UART_GET_FLAG (huart , UART_FLAG_ORE ) != RESET ) {
795
- tmpval = huart -> Instance -> DR ; /* Clear ORE flag */
794
+ __HAL_UART_CLEAR_OREFLAG ( huart ) ; /* Clear ORE flag */
796
795
}
797
796
#else
798
797
if (__HAL_UART_GET_FLAG (huart , UART_FLAG_PE ) != RESET ) {
799
- tmpval = huart -> Instance -> RDR ; /* Clear PE flag */
798
+ __HAL_UART_CLEAR_FLAG ( huart , UART_CLEAR_PEF ) ; /* Clear PE flag */
800
799
} else if (__HAL_UART_GET_FLAG (huart , UART_FLAG_FE ) != RESET ) {
801
- tmpval = huart -> Instance -> RDR ; /* Clear FE flag */
800
+ __HAL_UART_CLEAR_FLAG ( huart , UART_CLEAR_FEF ) ; /* Clear FE flag */
802
801
} else if (__HAL_UART_GET_FLAG (huart , UART_FLAG_NE ) != RESET ) {
803
- tmpval = huart -> Instance -> RDR ; /* Clear NE flag */
802
+ __HAL_UART_CLEAR_FLAG ( huart , UART_CLEAR_NEF ) ; /* Clear NE flag */
804
803
} else if (__HAL_UART_GET_FLAG (huart , UART_FLAG_ORE ) != RESET ) {
805
- tmpval = huart -> Instance -> RDR ; /* Clear ORE flag */
804
+ __HAL_UART_CLEAR_FLAG ( huart , UART_CLEAR_OREF ) ; /* Clear ORE flag */
806
805
}
807
806
#endif
808
-
809
- UNUSED (tmpval );
807
+ /* Restart receive interrupt after any error */
808
+ uint8_t index = uart_index (huart );
809
+ if (index < UART_NUM ) {
810
+ serial_t * obj = rx_callback_obj [index ];
811
+ if (obj && !serial_rx_active (obj )) {
812
+ HAL_UART_Receive_IT (uart_handlers [obj -> index ], & (obj -> recv ), 1 );
813
+ }
814
+ }
810
815
}
811
816
812
817
/**
0 commit comments