uart string empfängen bis zeichenfolge vom gsm-modem

Gast #1466534
Meine Frage ich benutze momentan den code aus dem Tutorium um einen 
String über Uart zu empfangen. Jetzt möchte ich aber von meinem 
GSM-Modem über AT befehle die "OK"'s empfangen, diese werden jedoch 
angeführt vom befehl das man gesendet hat (quasi ECHO) und zusätzlich 
noch so ein paar \r und \n hier mal ein beispiel:

ich sende den befehl: at\r
Antwort: at\r\r\nOK\r\n

das führt natürlich zum abruch des string empfanges. Wie könnte ich den 
folgenden Code ändern das er wartet bis alles vom gsm-modem empfangen 
wurde???? und ggf. nach einer gewissen zeit (ok mit einem timer/counter) 
abgebrochen wird.
1
int usart0_getc(void)
2
{
3
    while (!(UCSR0A & (1<<RXC)));   //Warten bis Zeichen verfügbar
4
    return UDR0;          //Zeichen aus UDR an Aufrufer zurückgeben
5
}
6

7
void usart0_gets(char* Buffer, int MaxLen)
8
{
9
  int NextChar;
10
  int StringLen = 0;
11
 
12
   NextChar = usart0_getc();  //Warte auf und empfange das nächste Zeichen
13
                 //Sammle solange Zeichen, bis:
14
                // * entweder das String Ende Zeichen kam
15
                // * oder das aufnehmende Array voll ist
16
  while(NextChar != '\r' && StringLen < MaxLen - 1)
17
  {
18
      *Buffer++ = NextChar;
19
    printf("%c",NextChar);
20
      StringLen++;
21
      NextChar = usart0_getc();
22
  }
23
 
24
  //Noch ein '\0' anhängen um einen Standard
25
  //C-String daraus zu machen
26
  *Buffer = '\0';
27
}
Gast #1466548
Ich weiß nicht, ob Dei GSM-Modem das macht, aber "ATE0" sollte dieses 
Verhalten eigentlich abschalten. Jedenfalls haben die Modems früher das 
so gemacht.

lg,
Frank.
Gast #1466560
der befehl ate0 funktioniert bei meinem modem auch, jedoch sind die CR 
und LF immer noch dabei. hier ein beispiel:

sende: at\r
antwort: \r\n\OK\r\n

das erste CR würden den empfang abbrechen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.