@@ -783,30 +783,35 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
783783 */
784784void HAL_UART_ErrorCallback (UART_HandleTypeDef * huart )
785785{
786- volatile uint32_t tmpval ;
787786#if defined(STM32F1xx ) || defined(STM32F2xx ) || defined(STM32F4xx ) || defined(STM32L1xx )
788787 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 */
790789 } 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 */
792791 } 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 */
794793 } 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 */
796795 }
797796#else
798797 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 */
800799 } 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 */
802801 } 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 */
804803 } 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 */
806805 }
807806#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+ }
810815}
811816
812817/**
0 commit comments