Аппаратный таймер
Счётчик, вытравленный в кремнии, который тикает по тактовому сигналу независимо от того, чем занят процессор.
В основе — регистр-счётчик, увеличивающийся на единицу с каждым тактом, обычно после того, как предделитель понизил частоту. Когда счёт достигает значения сравнения или переполняется, таймер может вызвать прерывание, сбросить себя или переключить выходной вывод. Из этих кирпичиков одна и та же периферия даёт периодические прерывания, ШИМ, измерение импульсов через входной захват и точные временные окна через выходное сравнение.
Суть в том, что время не зависит ни от задержки прерывания, ни от того, какой код сейчас выполняется. Цикл задержки на C меняется от флагов компилятора, таймер — нет. В типичном STM32 их около дюжины разной разрядности, и к концу проекта свободного, как правило, не остаётся.