Ну да, делать каждые 100us.. у меня тактовая 240МГц, что мне, жалко
тики что ли )) .. хотя и на 72 МГц эти 1мс прерывания жить не
мешают. Хотя если хочется потратить полчаса времени - можно после каждого пересчета определяет ближайшее событие и настраивать таймер до него. В десятки-сотни раз реже будет прерывание вызываться.
events.c
events.h
где-то вначале main вызываешь
event_InterruptInit();
а далее по необходимости
event_Init(cb, ms);
или если хочется чтобы оно постоянно повторялось
event_InitCycle(cb, ms);
Я с использованием этого механизма удобно сделал 8ми канальный преобразователь udp->dmx.. лампочкой моргаю, частоту 500Гц на пассивный буззер даю, отложенную запись в флешь и многое другое.
Лет 5 назад написал еще для stm и до сих пор пользуюсь в каждом проекте.