странно это. Если так, то это означает, что период таймера настроен "на грани" скорости поступления. По идее вы должны были бы периодически получать битые пакеты (когда таймер отрабатывает-таки чуть раньше прихода нового байта), но ниже утверждали, что их нет.
Либо же у вас прерывание RX-Irq выполняется очень долго, и в результате "дрожание" момента возникновения прерывания таймера относительно момента поступления нового байта не позволяет "перескочить назад".
То, что сейчас ошибок нет, по-моему больше похоже на то, что сейчас количество ошибок чётное, а сама причина сбоев так и не найдена, а только замаскирована. Вполне возможно, что программа будет жить ещё несколько лет, пока не возникнет какая-то ситуация, где ошибка вновь себя проявит.
Также в пользу этого говорит и усложнённая сверх необходимого логика, которую сложно сразу всю удерживать во внимании (исходя из тех листингов, которые вы впоследствии удалили) и довольно небрежный стиль программирования. Ничего личного
http://caxapa.ru/238638.html