Все логично. Функция настроилп передачу по прерыванию, положила данные в регистр данных и вышла вернум все ОК. С этим же у нее проблем не было? Если бы функция ждала срабатывания прерывания, то она бы блокировала роботу всей программы на этот период, и работала так же как и HAL_UART_Receive