- ST-LINK V2
- STM32CubeMX
- Erforderliche Materialien
- Schaltplan und Anschlüsse
- Erstellen und Brennen eines Programms in STM32 mit Keil uVision und ST-Link
- Ausgabe der Keil-programmierten STM32-Karte
- Programm
STM32-Mikrocontroller, die die ARM Cortex M- Architektur verwenden, werden immer beliebter und werden aufgrund ihrer Funktionen, Kosten und Leistung in vielen Anwendungen verwendet. Wir haben STM32F103C8 mit der Arduino IDE in unseren vorherigen Tutorials programmiert. Das Programmieren von STM32 mit Arduino IDE ist einfach, da für verschiedene Sensoren viele Bibliotheken zur Verfügung stehen, um jede Aufgabe auszuführen. Wir müssen nur diese Bibliotheken zum Programm hinzufügen. Dies ist eine einfache Prozedur, und Sie werden möglicherweise nicht tief in die ARM-Prozessoren eintauchen. Jetzt kommen wir zur nächsten Programmierstufe, der ARM-Programmierung. Auf diese Weise können wir nicht nur unsere Codestruktur verbessern, sondern auch Speicherplatz sparen, indem wir keine unnötigen Bibliotheken verwenden.
STMicroelectronics führte ein Tool namens STM32Cube MX ein, das Basiscode entsprechend den Peripheriegeräten und der ausgewählten STM32- Karte generiert. Wir müssen uns also nicht um die Codierung für grundlegende Treiber und Peripheriegeräte kümmern. Weiterhin kann dieser generierte Code in Keil uVision zur Bearbeitung nach Bedarf verwendet werden. Und schließlich wird der Code mit dem ST-Link-Programmierer von STMicroelectronics in STM32 gebrannt.
In diesem Tutorial lernen wir, wie Sie STM32F103C8 mit Keil uVision & STM32CubeMX programmieren, indem Sie ein einfaches Projekt durchführen, bei dem ein Druckknopf und eine LED mit der blauen Pillenplatte STM32F103C8 verbunden werden. Wir werden den Code mit STM32Cube MX generieren und dann den Code mit Keil uVision bearbeiten und auf STM32F103C8 hochladen. Bevor wir ins Detail gehen, lernen wir zunächst den ST-LINK-Programmierer und das STM32CubeMX-Softwaretool kennen.
ST-LINK V2
Der ST-LINK / V2 ist ein In-Circuit-Debugger und Programmierer für die STM8- und STM32-Mikrocontrollerfamilien. Mit diesem ST-LINK können wir Code auf STM32F103C8 und andere STM8- und STM32-Mikrocontroller hochladen. Das Single Wire Interface Module (SWIM) und die JTAG / Serial Wire Debugging (SWD) -Schnittstellen werden zur Kommunikation mit jedem STM8- oder STM32-Mikrocontroller auf einer Anwendungsplatine verwendet. Da STM32-Anwendungen die USB-Schnittstelle mit voller Geschwindigkeit verwenden, um mit integrierten Entwicklungsumgebungen von Atollic, IAR, Keil oder TASKING zu kommunizieren, können wir diese Hardware zum Programmieren der STM 8- und STM32-Mikrocontroller verwenden.
Oben sehen Sie das Bild des ST-LINK V2-Dongles von STMicroelectronics, der die gesamte Palette der STM32-SWD-Debugging-Schnittstelle unterstützt, eine einfache 4-Draht-Schnittstelle (einschließlich Stromversorgung), schnell und stabil. Es ist in verschiedenen Farben erhältlich. Der Körper besteht aus einer Aluminiumlegierung. Es verfügt über eine blaue LED-Anzeige, mit der der Betriebszustand des ST-LINK überwacht wird. Die Pin-Namen sind deutlich auf der Schale markiert, wie wir im obigen Bild sehen können. Es kann mit der Keil-Software verbunden werden, über die das Programm auf die STM32-Mikrocontroller geflasht werden kann. Lassen Sie uns in diesem Tutorial sehen, wie dieser ST-LINK-Programmierer zum Programmieren des STM32-Mikrocontrollers verwendet werden kann. Das folgende Bild zeigt die Pins des ST-LINK V2-Moduls.
Hinweis: Wenn Sie ST-Link zum ersten Mal mit dem Computer verbinden. Der Gerätetreiber muss installiert sein. Gerätetreiber finden Sie unter diesem Link entsprechend Ihrem Betriebssystem.
STM32CubeMX
Das STM32CubeMX-Tool ist Teil von STMicroelectronics STMCube. Dieses Software-Tool erleichtert die Entwicklung, indem es den Entwicklungsaufwand, die Zeit und die Kosten reduziert. STM32Cube enthält STM32CubeMX, ein grafisches Softwarekonfigurationstool, mit dem C-Initialisierungscode mithilfe grafischer Assistenten generiert werden kann. Dieser Code kann in verschiedenen Entwicklungsumgebungen wie keil uVision, GCC, IAR usw. verwendet werden. Sie können dieses Tool über den folgenden Link herunterladen.
STM32CubeMX verfügt über folgende Funktionen
- Pin-Out-Konfliktlöser
- Ein Helfer beim Einstellen des Uhrenbaums
- Ein Stromverbrauchsrechner
- Ein Dienstprogramm, das eine MCU-Peripheriekonfiguration wie GPIO-Pins, USART usw. Durchführt
- Ein Dienstprogramm, das die MCU-Peripheriekonfiguration für Middleware-Stacks wie USB, TCP / IP usw. Durchführt
Erforderliche Materialien
Hardware
- STM32F103C8 Blue Pill Board
- ST-LINK V2
- Druckknopf
- LED
- Steckbrett
- Überbrückungsdrähte
Software
- STM32CubeMX Code Generation Tool (Link)
- Keil uVision 5 (Link)
- Treiber für ST-Link V2 (Link)
Schaltplan und Anschlüsse
Unten sehen Sie den Schaltplan zum einfachen Verbinden einer LED mit der STM32-Karte über einen Druckknopf.
Verbindung zwischen ST-LINK V2 und STM32F103C8
Hier wird die STM32 Blue Pill-Karte über den ST-LINK mit Strom versorgt, der an den USB-Anschluss des Computers angeschlossen ist. Wir müssen den STM32 also nicht separat mit Strom versorgen. Die folgende Tabelle zeigt die Verbindung zwischen ST-Link und Blue Pill Board.
STM32F103C8 |
ST-Link V2 |
GND |
GND |
SWCLK |
SWCLK |
SWDIO |
SWDIO |
3V3 |
3,3V |
LED & Druckknopf
Die LED wird verwendet, um die Ausgabe von Blue Pill Board anzuzeigen, wenn ein Druckknopf gedrückt wird. Die Anode der LED ist mit dem Pin PC13 der Blue Pill-Platine verbunden und die Kathode ist geerdet.
Ein Druckknopf dient zur Eingabe des Pins PA1 der Blue Pill-Platine. Wir müssen auch einen Pull-up-Widerstand mit einem Wert von 10k verwenden, da der Pin beim Loslassen der Taste möglicherweise ohne Eingabe schwebt. Ein Ende des Druckknopfs ist mit Masse und das andere Ende mit Pin PA1 verbunden. Ein Pull-up-Widerstand von 10 k ist ebenfalls mit 3,3 V der Blue Pill-Platine verbunden.
Erstellen und Brennen eines Programms in STM32 mit Keil uVision und ST-Link
Schritt 1: - Zuerst installieren Sie alle Gerätetreiber für ST-LINK V2, Software - Tools STM32Cube MX & Keil uVision und notwendigen Pakete für STM32F103C8 installieren.
Schritt 2: - Der zweite Schritt ist Öffnen >> STM32Cube MX
Schritt 3: - Klicken Sie dann auf Neues Projekt
Schritt 4: - Nach dieser Suche & wählen unsere Mikrocontroller STM32F103C8
Schritt 5: - Nun erscheint die Pinbelegungsskizze von STM32F103C8, hier können wir die Pinkonfigurationen einstellen. Wir können unsere Pins auch im Bereich Peripherie entsprechend unserem Projekt auswählen.
Schritt 6: - Sie können auch direkt auf den Pin klicken und eine Liste wird angezeigt. Wählen Sie nun die gewünschte Pin-Konfiguration aus.
Schritt 7: - Für unser Projekt haben wir PA1 als GPIO INPUT, PC13 als GPIO OUTPUT & SYS Debug als SERIAL WIRE ausgewählt. Hier verbinden nur die ST-LINK SWCLK & SWDIO Pins. Die ausgewählten und konfigurierten Pins werden in GRÜN angezeigt. Sie können dies im folgenden Bild feststellen.
Schritt 8: - Wählen Sie als Nächstes auf der Registerkarte Konfiguration die Option GPIO aus, um die GPIO-Pin-Konfigurationen für die von uns ausgewählten Pins festzulegen.
Schritt 9: - Als nächstes können wir in diesem Pin-Konfigurationsfeld die Benutzerbezeichnung für die von uns verwendeten Pins konfigurieren, dh benutzerdefinierte Pin-Namen.
Schritt 10: - Klicken Sie anschließend auf Projekt >> Code generieren .
Schritt 11: - Nun erscheint das Dialogfeld Projekteinstellungen. Wählen Sie in diesem Feld den Namen und den Speicherort Ihres Projekts und die Entwicklungsumgebung aus. Wir verwenden Keil. Wählen Sie daher MDK-ARMv5 als IDE aus.
Schritt 12: - Weiter unter Code Generator Registerkarte, wählen Sie Kopieren Sie nur die erforderlichen Bibliotheksdateien und dann auf OK klicken.
Schritt 13: - Nun erscheint das Dialogfeld Codegenerierung. Wählen Sie Projekt öffnen, um den generierten Code in Keil uvsion automatisch zu öffnen.
Schritt 14: - Jetzt wird das Keil uVision-Tool mit unserem generierten Code in STM32CubeMx mit demselben Projektnamen mit der erforderlichen Bibliothek und den Codes geöffnet, die für die von uns ausgewählten Pins konfiguriert sind.
Schritt 15: - Jetzt müssen wir nur noch die Logik einbinden, um eine Aktion an der Ausgangs-LED (Pin PC13) auszuführen, wenn die Taste am GPIO-Eingang (Pin PA1) gedrückt und losgelassen wird. So wählen Sie unser main.c Programm einige Codes umfassen.
Schritt 16: - Fügen Sie nun den Code in die while (1) -Schleife ein. Sehen Sie sich das folgende Bild an, in dem ich diesen Abschnitt hervorgehoben habe, um den Code kontinuierlich auszuführen.
while (1) {if (HAL_GPIO_ReadPin (BUTN_GPIO_Port, BUTN_Pin) == 0) // => DETECTS-Taste wird gedrückt {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 1); // Um die Ausgabe hoch zu machen, wenn die Taste gedrückt wird} else {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 0); // Ausgabe auf Low setzen, wenn die Taste gedrückt wird}}
Schritt 17: - Nachdem Sie den Code bearbeitet haben, klicken Sie auf das Symbol Optionen für Ziel auf der Registerkarte Debug und wählen Sie ST-LINK Debugger
Klicken Sie außerdem auf die Schaltfläche " Einstellungen" und aktivieren Sie auf der Registerkarte " Flash-Download" das Kontrollkästchen " Zurücksetzen und ausführen" und klicken Sie auf "OK".
Schritt 18: - Klicken Sie nun auf das Symbol Neu erstellen, um alle Zieldateien neu zu erstellen.
Schritt 19: - Jetzt können Sie den ST-LINK mit bereitgestellten Schaltkreisverbindungen an den Computer anschließen und auf das DOWNLOAD-Symbol klicken oder F8 drücken, um den STM32F103C8 mit dem von Ihnen generierten und bearbeiteten Code zu flashen.
Schritt 20: - Sie können die blinkende Anzeige am unteren Rand des keil uVision-Fensters bemerken.
Ausgabe der Keil-programmierten STM32-Karte
Wenn wir nun den Druckknopf drücken, leuchtet die LED auf und wenn wir ihn loslassen, erlischt die LED.
Programm
Der Hauptteil, den wir im generierten Programm hinzugefügt haben, ist unten dargestellt. Dieser folgende Code muss in while (1 ) des vom STM32CubeMX generierten main.c- Programms enthalten sein. Sie können zu Schritt 15 bis Schritt 17 zurückkehren, um zu erfahren, wie es im Programm main.c hinzugefügt werden soll .
while (1) {if (HAL_GPIO_ReadPin (BUTN_GPIO_Port, BUTN_Pin) == 0) // => DETECTS-Taste wird gedrückt {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 1); // Um die Ausgabe hoch zu machen, wenn die Taste gedrückt wird} else {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 0); // Ausgabe auf Low setzen, wenn die Taste gedrückt wird}}
Der vollständige Vorgang zum Erstellen und Hochladen eines Projekts in die STM32-Karte wird auch im Video am Ende erläutert. Der vollständige Code der Datei main.c ist unten angegeben, einschließlich des oben angegebenen Codes.
Außerdem finden Sie hier unseren kompletten Satz von STM32-Projekten.