так
void delay(unsigned long ms)
{
uint32_t start = micros();
while (ms > 0) {
yield();
while ( ms > 0 && (micros() - start) >= 1000) {
ms--;
start += 1000;
}
}
}
сделан через micros)))
теперь я не понял как тогда это может быть связано с overflow millis)))
uint32_t uint16_t посмотри размер числа. и приди к мысли о том, что число start обнуляется