Your claim "Millis Function only returning Zero" is obviously wrong.
void setup() {
Serial.begin(115200);
}
void loop() {
static uint32_t lastPrint;
uint32_t topLoop = millis();
if (topLoop - lastPrint >= 2000) {
lastPrint = topLoop;
Serial.println(topLoop);
}
}
2000
4000
6000
8000
10000
12000
14000
16000
18000
20000