linkov1959, для реализации обратного счета только аппаратными средствами МК нужны минимум 3 таймера, 2 из которых должны быть 32х битные. Полноценный 32х битный таймер легко делается из двух 16ти битных аппаратным объединением.
Вот как сделано в RLC-71:
- входной сигнал заведён на каналы захвата таймеров T1, T2. Захваты по фронту.
- T1. Входной триггер - запуск от канала захвата (Trigger Mode). Выходной триггер - активация при включении (Enable(CNT_EN)). Тактовый сигнал - системная частота. Этот таймер только запускает и останавливает остальную связку синхронно с входным сигналом.
- T2 (32х битный). Входной триггер (ITR0 от T1) - тикаем пока активно (Gated Mode). Тактовый сигнал - системная частота. Этот таймер подсчитывает количество перепадов опорной частоты от первого до последнего фронта входного сигнала. Бит переполнения можно использовать в качестве полноценного 33го бита счётчика. В МК STM32F303 этот таймер можно тактировать частотой, вдвое большей, чем системная.
- T4. Входной триггер (ITR0 от T1) - тикаем пока активно (Gated Mode). Выходной триггер - переполнения (Update).Тактовый сигнал - нога ETR. Этот таймер подсчитывает количество входных фронтов, младшая часть.
- T3. Входной триггер (ITR3 от T4) - тактирование. Старшая часть T4. Бит переполнения можно использовать в качестве полноценного 33го бита счётчика.
Алгоритм измерения (все таймеры остановлены):
1. обнуляем регистры.
2. разрешаем TRGI таймера T1.
3. следующим фронтом входного сигнала Т1 запускается сам и запускает остальную связку.
4. ничего не делаем требуемый интервал измерения, но не больше, чем двойное переполнение T2.
5. запрещаем TRGI таймера T1, затем останавливаем его.
6. из T2_CCRx вытаскиваем количество перепадов опорной частоты на момент последнего фронта входного сигнала.
7. из T3,T4 вытаскиваем количество пришедших входных фронтов.
8. вычисляем частоту и идём на п.1.
А алгоритм без остановки таймеров это по сути конвейерный режим. Даже на достаточно развесистом STM32F446 без дополнительного обвеса мне такого не удалось.
Только с внешней логикой.
ЗЫ: кстати при измерении частоты методом обратного счёта, асинхронные входные делители не уменьшают разрядность результата.