USART interrupt handler is invoked only once

The question is, what is happening in the “process the received data”. If that is doing something which somehow corrupts the system, that will only happen if you give the semaphore.