"Жаль, правда, не хватило таймеров" Конечно, не хватило, раз ты на
8 движков зачем-то задействовал 8 аппаратных таймеров STM32.
Аппаратный таймер считает и перегружает значение за 0 тактов,
бесплатно. Зато обнуление/совпадение таймера приводит к вызову ISR
= 12t+10t. Но если считать счетчики программно в ISR срабатывающем
с высокой частотой, то это +4 добавочных такта на каждый таймер
(decrement счетчика, и условный переход если-не-0): LDR reg; SUBS
1; STR reg; CBNZ. А если случится обнуление/совпадение программного счетчика, то для его сброса/перезагрузки еще +2t: LDR reg STR reg (вместо 22t ISR).