added usart recieve function, bunch of explanation comments