Вот я на таймере тахометр обрабатывал. Программно 32 бит из 16. Работает прекрасно.
static uint32_t curr_tim = 0;
в гиперлупе этот curr_tim без косяков читается