STM32 skips UART frames after framing error
Your callback blocks the system for too long during the time it runs, and the interrupt is not made re-entrant. Normally these callbacks are used to quickly set a flag, prepare for next transmission or something similar so the interrupt is done before the next byte arrives.