diff --git a/src/main/drivers/system.c b/src/main/drivers/system.c index 0785250c2..ba4dd6b0a 100644 --- a/src/main/drivers/system.c +++ b/src/main/drivers/system.c @@ -99,6 +99,12 @@ uint32_t micros(void) do { ms = sysTickUptime; cycle_cnt = SysTick->VAL; + + /* + * If the SysTick timer expired during the previous instruction, we need to give it a little time for that + * interrupt to be delivered before we can recheck sysTickUptime: + */ + asm volatile("\tnop\n"); } while (ms != sysTickUptime); return (ms * 1000) + (usTicks * 1000 - cycle_cnt) / usTicks; }