Dies ist eine alte Version des Dokuments!


Kommunikation mit dem PC

Eingebettete Systeme besitzen oft eine Schnittstelle zur PC-Welt oder anderen eingebetteten Systemen. Das können ein USB-Anschluss, Ethernet, Infrarot, Bluetooth oder zum Beispiel auch WiFi sein. Eine nach wie vor oft verwendete Schnittstelle ist die gute alte UART. Obwohl diese schon recht betagt ist finden wir faktisch in jeder Controllerfamilie diese Schnittstelle wieder. Der STM32F4 verfügt sogar über sechs UART bzw. USART. Die hohe Verfügbarkeit und die einfache Handhabung machen diese Schnittstelle sehr attraktiv. So können eingebettete Systeme über diese Schnittstelle Messwerte senden oder konfiguriert und debuggt werden.

Die Aufgabe soll darin bestehen, die Zeichenkette „Hallo mySTM32!“ per UART an den PC zu senden. Dort werden die empfangenen Daten in einem Terminal-Programm angezeigt.

Falls Sie jetzt noch das Klassendiagramm geöffnet haben, wählen Sie im Kontextmenü (rechte Maustaste) des Diagramms den Menüpunkt „nach oben“. Falls das Projekt nicht mehr geöffnet ist, öffnen Sie das SiSy UML-Projekt wieder. Legen Sie ein neues Klassendiagramm an, wählen Sie die Sprache ARM C++ und stellen Sie die Hardware (STM32F407) ein. Beim Öffnen des Diagramms (rechte Maustaste, nach unten) laden Sie aus dem SiSy LibStore die Diagrammvorlage Application Grundgerüst für PEC Anwendungen (XMC, STM32, AVR). Weisen Sie das Treiberpaket für STM32F4 zu.

Da heutige Rechner kaum noch über eine klassische RS232-Schnittstelle (COM) verfügen, benutzen wir eine USB-UART-Bridge. Auf dem Zusatzboard für das STM32F4-Discovery existiert dafür ein entsprechendes Modul, die USB-UART-Bridge myUSBtoUART.

Studieren wir das Datenblatt stellen wir fest, dass sich die Sendeleitung TxD (transmit data) und die Empfangsleitung RxD (receive data) der USART3 als Alternativfunktionen über die Busmatrix auf verschiedene GPIO-Pins legen lassen. Wir wollen die USART3 am Port D verwenden. Damit lautet unsere Konfiguration: GPIO-Pin D8 ist die Sendeleitung TxD und GPIO-Pin D9 ist die Empfangsleitung RxD. Diese Pins liegen am Nächsten an unserer USB-UART-Bridge. Die Geschwindigkeit für die Datenübertragung legen wir mit 9600 Baud fest.

Verbinden Sie die Pins RxD und TxD der USB-UART-Bridge auf dem Zusatzboard mit den Pins PD8 (RxD3) und PD9 (TxD3). Benutzen Sie dazu geeignete Patchkabel. Beachten Sie, dass die RxD jeweils mit TxD über Kreuz verbunden sein muß. (TxD3 - > RxD, RxD3 - > TxD).

Zusätzlich ist die USB-UART-Bridge mit dem PC zu verbinden. Dazu benötigen Sie ein zweites Mini-USB-Kabel. Über die USB-Verbindung zum integrierten STLINK/V2 wird der Controller programmiert und das System mit Spannung versorgt.

Für die zu entwerfende Anwendung wollen wir vorhandene Bausteine (Klasse/Templates) für die UART nutzen. Der Einfachheit halber suchen wir im Explorer mit dem Suchtext UART; oder im Navigator bei den UML Paketen des Frameworks (UML-Pakete/Pec/pec_Uart). Wir werden fündig mit dem allgemeinen Interface für eine PecUart.

Die konkreten Templates für die UART-Anbindung an einen bestimmten Port finden Sie mit dem Suchtext UARTList oder unter UML-Pakete/UartList_stm32f4.

Ergänzen Sie die Grundstruktur zu dem hier gezeigten Entwurf.

Nachdem wir die benötigten Bausteine (PecUart, usart3portD8_stm32f4, baudrate9600) aus der Bibliothek bezogen und zu einer Komponenten (Terminal) zusammengesetzt haben wurde diese im System (Controller) als Instanz (terminal) aggregiert. Jetzt können wir die Instanz der Komponente benutzen. Realisieren Sie die geforderte Ausgabe der Zeichenkette „Hallo mySTM32“ wie folgt in der Methode onWork.

Controller::onWork:

terminal.writeString("Hallo mySTM32!\n");
waitMs(1000);

Übersetzen Sie das Programm. Korrigieren Sie ggf. Schreibfehler. Übertragen Sie das lauffähige Programm in den Programmspeicher des Controllers und Starten das Werkzeug ControlCenter.

  1. Erstellen (Kompilieren und Linken)
  2. Brennen
  3. Menü Werkzeuge, ControlCenter

Stellen Sie im ControlCenter die Parameter für die Verbindung mit dem Board ein. Achten Sie auf den richtigen COM-Port und die korrekte Baudrate. Der COM-Port ist ggf. dem Gerätemanager zu entnehmen.

Jetzt können Sie die gewünschten Daten vom Controller empfangen.

Erweiterung

Als Erweiterung der Anwendung sollen Zeichen vom PC empfangen und wieder zurückgesendet werden. Dabei ist zu beachten, dass nur dann, wenn Zeichen verfügbar sind, diese auch von der UART abgeholt werden dürfen. Mit den Operationen dataAvailable und writeByte stellt die UART die benötigte Funktionalität zur Verfügung. Dieses „Echo“ ergänzen Sie bitte wie folgt in der Methode onWork.

Controller::onWork:

while (terminal.dataAvailable())
{
	char zeichen;
	zeichen=terminal.readByte();
	terminal.writeByte(zeichen);
}

Tragen Sie im ControlCenter den zu sendenden Text ein und aktivieren Sie Senden.

Videozusammenfassung

Erlernte und gefestigte Arbeitsschritte:

  1. Klassendiagramm anlegen und öffnen
  2. Diagrammvorlage für PEC Applikation auswählen, laden und Treiberpaket für STM32F4 einfügen - Navigator auf UML Pakete umschalten
  3. gewünschte Klassen im Navigator suchen und ins Diagramm ziehen
  4. Klassen aggregieren
  5. Operationen einer Klasse anlegen
  6. Klassen und Templates zu Komponenten zusammenbauen
  7. den nötigen Quellcode in den Operationen erstellen
  8. Erstellen und Brennen einer ARM Applikation im Klassendiagramm
  9. das Sisy-Controlcenter konfigurieren und anwenden

Und hier diesen Abschnitt wiederum als Videozusammenfassung.

<flashplayer width=„600“ height=„400“ position=„0“>file=http://youtu.be/d_MV0dplWgI</flashplayer>

Übung

Erweitern Sie zur Übung die Anwendung um einen Taster. Die Ausgabe „Hallo mySTM32!“ per UART soll nur erfolgen solange der Taster gedrückt ist. Das Echo soll unabhängig von der gedrückten Taste zurückgesendet werden.

Nächstes Thema