USART interrupt handler is invoked only once

The fact the function “returns” doesn’t mean it can’t have corrupted memory somewhere causing the crash.

IF this was my problem, I would have stepped into the crash at a single instruction level to see what happens to cause the crash and trace it back to what might have done the corruption.

If you don’t have the skill to do that, you will need to strip out parts of the functionality (like processing the data) to see what causes the problem. At least it sounds very repeatable.