Ohne vollständigen Code kann man ja nur Raten, aber beim Überfliegen ist mir gleich folgendes aufgefallen:
Code:
      
do
  {
      c=USART_Receive();
      if(c==stern) return 0;
      if(c==komma) return i;
   
      if(c!=end) //Buchstaben sammeln
       {
        line[i]=(char)c;
        i++;
         line[i]=0; //End of String updaten
      }

  }while(c!=end);
i wird nicht überwacht. Fehler auf der UART Seite -> Array kann Überlaufen. Sowas kann dir schon passieren wenn der Controller mal zu lange in einem Interrupt braucht und das entscheidente UART Zeichen verpasst wird!