Checking interrupt flags for UART data receiving and transmitting on STM32
If you have nothing (more) to send, then you need to disable your UART_IT_TC interrupt.
This interrupt flag is set whenever the UART Transmit buffer is empty, so since you don't even load anything into the Transmit buffer this flag will always be set, resulting in the micro continuously jumping to your interrupt handler and never executing any other code.  

Do not __HAL_UART_ENABLE_IT(&amp;huart2, UART_IT_TC); until you are ready to send data and __HAL_UART_DISABLE_IT(&amp;huart2, UART_IT_TC); in your interrupt when you have finished sending.

You could also simplify your receive code a little by moving the line RxData[RowRxBuffer][ColumnRxBuffer] = (uint8_t)(huart2.Instance-&gt;DR &amp; (uint8_t)0xff); which is duplicated 4 times for each of the conditions so that it's executed immediately after if(__HAL_UART_GET_IT_SOURCE(&amp;huart2, UART_IT_RXNE)) before any of the if/else conditions.