Schnellstart mit dem GLCD am STM32F0

Das MK3-Grafikdisplay von myAVR ist als Erweiterung des STM32F0 Discovery sehr gut geeignet. Mit dem von myAVR ebenfalls angebotenen Zusatzboard STM32F0D ist das Display sofort arbeitsbereit.

Vorbereitungen

Starten Sie SiSy. Legen Sie ein neues SiSy-Projekt mit dem Vorgehensmodell ARM und ARM Framework sowie ein Klassendiagramm mit der Zielsprache ARM C++ an. Beachten Sie die Einstellungen für die Zielplattform STM32F0-Discovery. Laden Sie aus dem SiSy-Libstore bitte die Diagrammvorlage für ein ARM C++ Grundgerüst ohne Framework.

Die Bibliothek aus dem LibStore

Die aktuellen Treiber für das Grafikdisplay holen wir uns ebenfalls aus dem SiSy-LibStore. Dazu ziehen wir aus der Objektbibliothek das Element LibStore. Daraufhin öffnet sich der SiSy-LibStore-Dialog. Als Suchbegriff geben wir GLCD ein.

Wählen Sie die angebotene Komponente aus und importieren Sie diese in das Diagramm. Beachten Sie, das Sie den Baustein für das STM32F0 importieren.

Die Klasse GraficLcd

Die Klasse GraficLcd besteht aus einer Reihe von Attributen, unter anderem vom Typ DigitalOut, welche die einzelnen Steuer- und Datenleitungen abstrahieren. Diese sind öffentlich, damit das Display vom Anwender konfiguriert werden kann. Die für uns wichtigsten Operationen, um später das Spiel zu realisieren, können wir auch schon erkennen.

  • init()
  • light()
  • clear()
  • setPos()
  • write()
  • circle()
  • line()
  • rect()

Um das Display zu verwenden, muss eine Referenz der Klasse GraficDisplay in das Klassendiagramm der Anwendung gezogen werden. Diese ist mit einer Aggregation an die Applikations-Klasse anzubinden. Benutzen Sie als Rollenbezeichner den namen +lcd.

Initialisierung des Displays

Für die Initialisierung des Displays wählen wir die Operation onStart der Klasse Application aus. Zuerst sind die einzelnen Steuer- und Datenleitungen zu konfigurieren. Danach kann der eigentliche Displaycontroller initialisiert werden. Vergleichen Sie dazu die Pinbelegung des GLCD-Add-On und des STM32F0 Discovery.

Application::main()
/// <sequence show="hide" text="init LCD">
lcd.linePs.config (	GPIOB,BIT15);
lcd.lineC86.config(	GPIOB,BIT14);
lcd.lineLight.config(	GPIOB,BIT13);
lcd.lineE.config(	GPIOB,BIT12);
lcd.lineRw.config(	GPIOB,BIT11);
lcd.lineRs.config(	GPIOB,BIT10);
lcd.lineRes.config(	GPIOB,BIT9);	
lcd.lineCs.config(	GPIOB,BIT8);	
lcd.dataPort.config(	GPIOB,0x00FF);
lcd.init();
lcd.clear();
lcd.light();
/// </sequence>
this->run();

Zu guter Letzt schließen wir die Initialisierung mit einem clear des Displayinhaltes (falls noch „Schrott“ vom letzten Versuch zu sehen ist) und dem Einschalten der Hintergrundbeleuchtung ab.

Texte ausgeben

Die Ausgabe von Texten erfolgt an einer beliebigen grafischen Position. Dazu benutzen wir die Operation setPos. Der Cursor wird bei der Ausgabe des Textes mit der Operation write automatisch weiter gestellt. Deshalb setzt jede weitere Ausgabe an jeweils der letzten Cursorposition an.

lcd.setPos(45, 20);     // Cursor positionieren
lcd.write("GLCD am ");  // Textausgabe
lcd.write("STM32F0!");  // den Text fortsetzen

Grafische Primitive

Grafische Primitive sind Punkt, Linie, Rechteck und Kreis. Diese werden mit den gewünschten Koordinaten, einer möglichen Füllung und dem Pixel-Modus (SET,CLR,XOR) parametrisiert.

lcd.rect(20,10,40,20);
lcd.circle(30,30,10,true);
lcd.line(10,10,50,50,LCD_MODE_XOR);

Test

Erstellen Sie die Anwendung und übertragen Sie diese in den Programmspeicher des Controllers. Testen Sie das Programm!

Viel Spaß beim Spielen und beim Weiterentwickeln!

Videozusammenfassung