Я не стал связываться с хроно, и сделал так (тоже упражнение, ни для чего не нужно)
void delay(uint32_t cycles)
{
uint32_t t0 = DWT->CYCCNT;
volatile uint32_t t1 = t0;
while ((t1-t0) < cycles)
t1 = DWT->CYCCNT;
}
constexpr double cpu_freq = 48.0e6;
constexpr uint32_t operator""_ms(long double arg)
{
return static_cast<uint32_t>(cpu_freq * arg * 1.0e-3);
}
void foo()
{
delay(10'000); // ~0.21 ms
delay(3.14_ms);
}