Hi,
STM or PIT should be good choice for this.
PIT already has an option to read current value of the timer either in tick count or in microseconds. For example, there are functions like:
PIT_DRV_GetCurrentTimerCount
or
PIT_DRV_GetCurrentTimerUs
STM then has function STM_DRV_ComputeTicksByUs.
Or you can easily calculate the time like this: you know the source clock of a timer. One tick takes 1 / f_source_clock. And if you know the number of ticks, you can calculate the time as (1 / f_source_clock)*number_of_ticks.
Regards,
Lukas