Jak odpalasz peryterium to zrób wszystko w najprostszej formie na pollingu bez buforów. Masz za dużo miejsc gdzie może nie działać.
void USART_Transmit( void ) - to jest ekscentryczne i wysyłanie ze zmiennej globalnej - możesz uzasadnić takie coś?. Ciekawe jaki kod został wygenerowany.
dlaczego nie jak Bóg przykazał void USART_Transmit(uint8_t byte) ......
void USART_Transmit(); w main nie robi tego co sądzisz (tzn nic nie robi)

Równie dobrze mógłbyś tę linię zakomentować
Chociaż to nie bład w tym przypadku - podawaj przy long literałach L lub UL