STM32-Schnellstart. Teil 2 Hallo Welt auf HAL, Debuggen in Atollic TrueSTUDIO

Als wir das letzte Mal die Erstellung eines neuen Projekts mit STM CubeMX gemeistert haben, finden Sie den ersten Teil hier.

Für diejenigen, die zu faul zum erneuten Lesen sind - alles endete damit, dass das leere Projekt erfolgreich zusammengestellt wurde.



In diesem Teil werden wir das einfachste Hello World-Beispiel für HAL schreiben, sehen, wie der Debugger ausgeführt und verwendet wird, und herausfinden, wie viel Speicher unser Programm belegt, der in diesem Teil in HAL geschrieben wird.

Wir gehen von demselben leeren Projekt aus, das im letzten Teil initialisiert wurde.

Um die LED zu blinken, müssen wir den folgenden Algorithmus einhalten:

  1. Stellen Sie den Status invers auf den aktuellen Status auf dem Mikrocontroller-Zweig ein. Das heißt, es gab 0 - Satz 1, es gab 1 - Satz 0 und so weiter.
  2. Warten Sie N für die Anzahl der Mikrosekunden und kehren Sie zu Schritt 1 zurück.

Um den ersten Punkt zu erfüllen, müssen wir dem Compiler mitteilen, an welchem ​​Pin und Port die LED angeschlossen ist und welche Funktion zum Invertieren ihres Zustands dient.

Zuerst finden wir, wo wir die LED angeschlossen haben.

In der Datei main.c befindet sich unmittelbar nach den einleitenden Kommentaren, die die Firma ST uns freundlicherweise geschrieben hat, eine Zeile zum Verbinden der Header-Datei main.h



Klicken Sie mit der rechten Maustaste in diese Zeile und suchen Sie den Eintrag Open Declaration



Wenn Sie darauf klicken, gelangen Sie zur Datei main.h

Wo Sie unsere angegebenen Pin- und Portnamen finden.



Denken Sie daran, dass wir im ersten Teil bei der Initialisierung der Ausgabe der PC13-LED das Feld User Label ausgefüllt und dort CLOCK_LED eingegeben haben?

Bei der Erstellung des Projekts hat STM32CubeMX unsere Wünsche berücksichtigt und jetzt können wir anstelle von abstrakten GPIO_PIN_13 und GPIOC über die verständlicheren CLOCK_LED_Pin und CLOCK_LED_GPIO_Port auf unsere LED zugreifen.

Damit - was wir schaffen werden - haben wir es herausgefunden.

Jetzt suchen wir nach einer Funktion, die den Status unseres GPIO in das Gegenteil ändern kann.
Suchen Sie dazu im Projektbaum auf der linken Seite des Bildschirms die Datei:

Drivers -> STM32F1xx_HAL_Driver -> Inc -> stm32f1xx_hal_gpio.h 

Es hat eine Menge Dinge, aber wir brauchen Beschreibungen der Funktionen, die im Block / * Exportierte Funktionen * / enthalten sind

Finden Sie die Funktion dort

 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 

Genau das brauchen wir.



Damit die LED ständig blinkt, müssen Sie den Aufruf unserer Funktion in main in den Hauptteil der Hauptprogrammschleife einfügen.

Und um zwischen Blinksignalen zu unterscheiden, fügen Sie anschließend eine Verzögerung mit der Funktion HAL_Delay (500) hinzu.

In diesem Fall beträgt die Verzögerung 500 ms.



Die Funktion HAL_Delay ist übrigens auch in beschrieben

 Drivers -> STM32F1xx_HAL_Driver -> Inc 

Nur in der Datei stm32f1xx_hal.h
Das heißt, um eine LED zu blinken, mussten wir nur 2 Codezeilen schreiben.
Wenn wir alles richtig gemacht haben, können Sie versuchen, den Debugger auszuführen und zu sehen, wie das Programm ausgeführt wird.





Mit den Tasten F5 und F6 können Sie durch den Programmcode navigieren
Gleichzeitig wird mit der Taste F6 nur auf Funktionsaufrufe zugegriffen, und mit der Taste F5 können Sie die aufgerufene Funktion eingeben und sehen, was im Inneren geschieht.



Wenn Sie beim Debuggen keine Störungen feststellen möchten, sollten Sie die Optimierung deaktivieren. Dies erfolgt über das Menü Projekt -> Eigenschaften

Der Wert für die Optimierungsstufe muss auf Keine gesetzt sein (-O0)



Nach dem Beenden des Debuggens startet der Controller den Code erneut und führt ihn zyklisch aus.

Das Ergebnis sollte ungefähr so ​​aussehen.



Um es zusammenzufassen


Mit HAL konnten wir diese Aufgabe implementieren, indem wir nur zwei Codezeilen geschrieben haben.

Zur Vereinfachung der Arbeit musste jedoch mit Gedächtnis bezahlt werden



1,54 KB RAM und 4,69 KB Flash.

Ich möchte Sie daran erinnern, dass die Optimierung deaktiviert ist, dh "-O0".

Ist es viel oder wenig?

Diese Frage kann nur in den folgenden Teilen des Artikels mit Zuversicht beantwortet werden.

Der Originalartikel ist wie immer auf meinem Blog .

Source: https://habr.com/ru/post/de481436/


All Articles