Как-то не обращал внимания на данную периферию, почитал
en.STM32G4-WDG_TIMERS-High_Resolution_Timer_HRTIM.pdf. Во многих микроконтроллерах STM32 присутствует high resolution timer (HRTIM). Разрешение таймера указывается порядка 200 пикосекунд (!), что соответствует частоте 5ГГц. Это особенно интересно для реализации частотомера по измерению периода. Но смущает данная оговорка:
The high‐resolution is available for any kind of waveform
adjustment (period, duty‐cycle, or PWM to PWM phase
adjustment), but not for input capture, performed with the
regular input clock (from 100 to 170 MHz)
Правильно ли я понимаю, что если делать Input capture, то внешний импульс сможет быть зафиксирован только в моменты, кратные периоду
T = 1/f = 1/100 [MHz] = 10 [ns]
Например, измеряем длительность между импульсами 5МГц (5*10^6)
T = 1/f = 1/5 [MHz] = 200 [ns]
добавим к этому ошибку 10 наносекунд из-за работы Input capture с периодом 10наносекунд.
T = 210 [ns]
Период одного такта HRTIM 200 пикосекунд
Thrtim = 200 [ps]
И он насчитает в Input Capture
N = T / Thrtim = 210 [ns] / 200 [ps] = 1050 импульсов,
из которых мы определим длительность и частоту импульса:
f2 = 1/(1050*Thrtim) = 4.761905 [MHz]
Точность небольшая из-за добавки 10 наносекунд, зато измерение производится очень быстро.
Что если складывать значения счётчика HRTIM Input Capture по DMA, например 100 значений,
T = 200 [ns] * 100 = 20000 [ns]
Я предполагаю, что смещение в 10 наносекунд влияет только "по краям" интервала из 100 значений, поэтому
T = 20000 [ns] + 10 [ns]
N = T / Thrtim = 20010 [ns] / 200 [ps] = 100050 импульсов за 100 периодов измеряемого импульса 5МГц
f3 = 1/(100050*Thrtim*100) = 4.997501 [MHz]
Насколько реалистична данная оценка, возможно ли измерить импульсы с частотой повторения 5МГц за 20 микросекунд с такой точностью?
Пока что не уверен реализуемо ли это, тут я не учитывал другие возможные задержки gpio -> external event -> hrtim и hrtim input capture -> dma. Если это всё-таки реализуемо, то можно было бы реализовать что-то похожее на микросхему подсчёта времени TDC7200 для дальномеров. Или для самодельных частотомеров, которые быстрее определяют частоту сигнала.