Hallo,

ich möchte mit meinem STM32F4 über die USB-Schnittstelle und dem VCP-Treiber einen COM-Port erzeugen um darauf mit HTerm bzw. später dann auch mit vorhandener Software "Dialoge" führen zu können. Die bestehen größtenteils aus "AT"-Kommandos im Modem-Stil. Hierzu überlege ich wie ich den Parser baue um die Befehle zu verarbeiten. Programmiert werden soll das ganze in C. Hier wäre ich für ein wenig Hilfe wie man das umsetzt sehr dankbar!
Grundlegende C-Kenntnisse sind vorhanden (hoffe ich . Zwar bin ich auf dem ST neu, aber mit AVR habe ich auch schon das ein oder andere gemacht. Also nicht bei NULL starten, aber auch nicht gleich abheben. Ich würde mich dem Problem gerne schrittweise annähern um mitzukommen und alles zu verstehen.

Die Schnittstelle ist einfach:
  • Wenn der Connect zustande kommt, soll der ST mit einer Initzeile "Welcome to ST" oder sowas antworten.
  • Anschließend kommt ein Prompt-Zeichen: ">" und er wartet auf ein Kommando.
  • Jedes Kommando wird mit CR angeschlossen. Pro Zeile nur ein Kommando.
  • Nachdem der ST die Zeile verarbeitet hat muss er entweder mit "OK", irgendwelchen Daten als hexdump kodierte Zeichen oder einem Fehlercode "ERROR - <CODE>" antworten.
  • Ich überlege noch einen ECHO-Mode zu implementieren, sodass das eingegebene Kommando wieder reflektiert wird.


Von der Umsetzung stelle ich mir das grundsätzlich so vor:
  • Der ST muss sich an die Serielle "ankoppeln". Dabei wäre Autobaud hilfreich, aber nicht zwingend. 38400 8N1 wären gut.
  • Nun schreibt er den Init-String und anschließend das Prompt raus.
  • Sobald Zeichen am USB (UART?) eintreffen werden diese intern gepuffert, bis ein CR erkannt wird. Anfangs würde ich gern auf Interrupts verzichen wollen, also einfach in einer Main-Loop alles machen.
  • Nun muss er die Zeichenkette untersuchen ob es ein gültiges Kommando (ggf. mit einem oder mehreren Parametern) handelt.
  • Ist das der Fall, soll er die entsprechenden Aktionen ausführen (z.B. einen Meßwert besorgen, einen Aktor betätigen oder eine Funknachricht übermitteln).
  • Der Parser sollte alle Zeichen, außer [a-Z0-9] einfach ignorieren. Bei der "Handeingabe" über HTerm können die zum formatieren genutzt werden, was die Befehle lesbarer macht.


Also eigentlich alles kein Hexenwerk, denke ich. Aber wie mache ich es Konkret im Code? Welche Befehle nutze ich zum parsen? Wie handle ich den Eingangspuffer? Wie die Verarbeitung (switch-case?)?

Vielen Dank im Voraus für die Hilfe!