Der Code ist recht ineffektiv, insbesondere wenn ein Input Capture zur Verfügung steht.
Counter ist lokal zu Send_UART, befindet sich damit auf dem Stack. Wenn die lokale Variable nicht initialisiert wird, ist ihr Startwert unbestimmt, sagt Dir aber der Compiler schon.
Den Wert nachträglich auf 0 zu setzen ist sinnlos, da Counter als Index auf den Ausgabestring dient, ist das eher Zufall wenn's klappt.