Ваша проблема в том, что вы будете продолжать проверять данные UART, даже если их нет. Могу ли я предложить вам изменить USART_receive
, чтобы он возвращал флаг успеха / неудачи и записывал данные в ваш буфер, используя указатель, который вы передали.
Тогда в вашем обработчике прерываний вы не только проверяете свое завершениесимволов, но также запускают цикл while, пока USART_receive
возвращает значение true.
Необходимо учитывать тот факт, что прерывание может сработать до того, как будет получено полное сообщение, т. е. нет перевода строки или возврата каретки.