Debuggen eines ARM (STM32) Mikrocontrollers mit Qt Creator

Ich arbeite seit einiger Zeit mit ARM -Mikrocontrollern der STM32 -Serie auf der IAR Embedded Workbench. Aus irgendwelchen Gründen muss ich jetzt meine Werke nach Qt-Creator verschieben (sowohl unter Windows als auch unter Linux). In IAR EWARM sind die Dinge einfacher: Ich musste mich nie mit Linker-Skripten oder Startdateien befassen, öffne einfach eine IAR EWARM-Projektvorlage aus der Peripheral Library-Version von ST und mit einigen einfachen Anpassungen ist es fertig. Wie auch immer, ich habe versucht, ein neues Projekt für STM32F4 auf Qt zu erstellen, aber ich hatte verschiedene Probleme.

Gibt es jemanden, der diesen Vorgang Schritt für Schritt verständlich erklären kann ? Mit dem zugehörigen Makefile, Linker-Skript, Start- und Systemdateien, wenn möglich.

Hinweis: Eigentlich habe ich ein paar spezifische Fragen zu diesem Thema, aber da ich denke, dass eine Erklärung des gesamten Prozesses für mich und andere Embedded-Neulinge hilfreich sein könnte, habe ich mich entschieden, die Frage auf diese Weise zu stellen.

Wie nennt man "Qt-Umgebung"? Du meinst die Verwendung von Qt-Creator? Oder Sie möchten, dass Ihr Programm in einer Qt-Anwendung läuft? Oder wollen Sie ein Qt-basiertes Programm auf STM32 ausführen? ist mir nicht klar..
Ich möchte meinen C-Code auf Qt-Creator kompilieren und auf die mCU herunterladen. Ich habe die Frage bearbeitet.
Ich finde das ist keine so tolle Idee. Es wird viel Schmerz für ein Werkzeug sein, das nicht wirklich den Anforderungen entspricht. Warum entscheiden Sie sich nicht für etwas wie CooCox oder GNU ARM Eclipse ?
Oder wenn Sie Eclipse-basierte IDEs nicht mögen, probieren Sie CodeBlocks aus . Es hat eine nette eingebettete Toolchain-Unterstützung.
@Antoine, Qt ist derzeit die einzige Option bei der Arbeit. Aber ich werde CodeBlocks auf jeden Fall zu Hause ausprobieren, danke.

Antworten (4)

Ich arbeite tatsächlich mit diesem Setup, es funktioniert wunderbar.

Stellen Sie zunächst sicher, dass Sie eine aktuelle Qt Creator-Version verwenden. Ich habe meine von der Website heruntergeladen. In einigen Linux-Repositories ist es veraltet und unterstützt das BareMetal-Plugin und/oder QBS (was sehr nützlich ist) nicht.

Voraussetzungen:

  • Qt Creator (Download von der QT-Site)
  • ARM GCC (Ubuntu: apt-get install gcc-arm-none-eabi)
  • GDB-Quellarchiv (Download aus dem Archiv )
  • OpenOCD (Ubuntu: apt-get install openocd)

Verwendete Versionen: Qt Creator 3.6.0, ARM GCC 4.8.2-14ubuntu1+6, ARM GDB 7.6/7.10 mit Python-Unterstützung und OpenOCD 0.7.0.

1) Qt Creator installieren. Öffnen Sie Hilfe -> Über Plugins. Suchen Sie die Kategorie Geräteunterstützung und aktivieren Sie BareMetal.

2) Gehen Sie zu Extras -> Optionen. Es gibt ein paar Einstellungen, die wir erstellen und anpassen müssen, um für einen ARM-Cortex-Controller zu kompilieren.

a) Gehen Sie zu "Bare Metal" (letzte Kategorie) - fügen Sie einen Debugger Ihrer Wahl hinzu. Ich persönlich benutze OpenOCD. An dieser Stelle können Sie die Verbindung zu gdb und seinem Port sowie Init-Befehle festlegen. Die Standardbefehle sind für STM32F4xx-Chips festgelegt - aber ich denke, Sie können sie so ändern, dass sie mit jedem ARM Cortex-Controller funktionieren.

b) Gehen Sie zu „Geräte“. Fügen Sie ein neues Gerät hinzu, wählen Sie Bare Metal und den gerade erstellten GDB-Anbieter. Hier muss nichts weiter eingestellt werden.

c) Gehen Sie zu "Build & Run" - Registerkarte Debugger. Dies war das Schwierigste, was zu tun war.

Sie benötigen eine Arm-GDB-Version mit Unterstützung für Python-Skripte . Zu der Zeit (ungefähr 9 Monate zurück, als ich diesen Beitrag schreibe) haben die Binärdateien im Ubuntu-Repo diese Option nicht. Sie können viel Zeit/Ärger sparen, indem Sie überprüfen, ob sich dies geändert hat.

Wenn Sie GDB dennoch mit Python-Unterstützung kompilieren müssen, gehen Sie wie folgt vor. Laden Sie GDB aus den Download-Archiven herunter . Ich verwende immer noch GDB-7.6, was gut zu funktionieren scheint, aber für dieses Tutorial habe ich es für GDB-7.10 neu kompiliert.

Extrahieren Sie das Quellarchiv. Öffnen Sie im Terminal und führen Sie "./configure --with-python --target=arm-elf" aus. Dadurch wird die Make-Umgebung für ARM-Ziele mit aktiviertem Python-Scripting eingerichtet. Führen Sie dann make aus. Dies dauert je nach Systemgeschwindigkeit eine Weile. Leider sind Sie möglicherweise etwas allein, wenn die Kompilierung aufgrund von Abhängigkeitsproblemen stoppt. Keine Angst - das ist mir auch bei meinem ersten Versuch passiert und ich habe es mit einer Reihe von Google-Suchen herausgefunden! Wenn Python fehlschlägt, stellen Sie sicher, dass Sie das Paket python2.x-dev installieren (überprüfen Sie Ihre Versionsnummer - wahrscheinlich 2.7). Vorausgesetzt, die Kompilierung ist gut verlaufen, finden Sie die ausführbare gdb-Datei im Hauptverzeichnis.

Wenn Sie einen Mac verwenden, ist der Vorgang wahrscheinlich ähnlich. Aber mit OSX kenne ich mich nicht aus. Wenn Sie unter Windows arbeiten, müssen Sie leider ein wenig googeln, wie Sie dies mit Mingw oder was auch immer tun (ehrlich gesagt, ich weiß es nicht). Oder finden Sie vielleicht Binärdateien, die diese Unterstützung aktiviert haben.

Sobald Sie eine ausführbare gdb-Datei erworben haben, nennen Sie sie zB "ARM GDB" und legen Sie den Pfad dazu fest. Ich persönlich mache mir nicht die Mühe, es in /usr/bin/ zu platzieren, aber ich denke, Sie könnten es.

Dieses Fenster gibt einen Fehler aus, wenn Sie eine ausführbare gdb-Datei verwenden, die nicht mit Python-Skripten kompiliert wurde.

d) Reiter „Build & Run“ – „Compiler“

Erstellen Sie einen neuen "GCC-Compiler" und nennen Sie ihn "ARM GCC". Verwenden Sie als Pfad "/usr/bin/arm-none-eabi-gcc". Das "ABI" ist nicht wirklich wichtig, ich habe es nur auf arm-unknown-unknown-unknown-32bit gesetzt.

e) Reiter „Build & Run“ – „Kits“. Fügen Sie ein neues Kit hinzu, ich nannte meins "ARM Bare Metal". Gerätetyp: "Bare Metal" Gerät: Zeigen Sie auf das Gerät, das Sie mit seinem OpenOCD/St-Link erstellt haben GDB-Server Sysroot: Lassen Sie es leer Compiler: ARM GCC Debugger: ARM GDB Qt Version: None - Sie können die QT-Laufzeit offensichtlich nicht ausführen ein Cortex m4! Cmake-Tool: unbenutzt

Stellen Sie sicher, dass auf keiner der Registerkarten „Build & Run“ Warnungen angezeigt werden

3) Erstellen Sie Ihr make/qmake/QBS-Projekt. Gehen Sie auf der linken Seite zum Tab "Projekte" und fügen Sie oben links das "ARM Bare Metal"-Kit hinzu. Dies sollte ohne Fehler funktionieren. Ihr Projekt kann mit einem Desktop-Kit beginnen. Austauschen geht meistens nicht. Fügen Sie in diesem Fall ein ARM-Kit hinzu und entfernen Sie dann das Desktop-Kit.

4) Starten Sie Ihren OpenOcd-Server. Ich verwende eine STM32F4-Erkennung für die Entwicklung und auch für die Off-Board-Programmierung meiner eigenen STM32-Boards. Für alle ausgeführten STM32F40x/STM32F41x-Ziele:

openocd -f board/stm32f4discovery.cfg

Dies startet einen GDB-Server auf Port 3333 und einen Telnet-Server (für OpenOCD-Befehle) auf 4444. Als Abkürzung erstelle ich ein paar .sh-Dateien in meinem Home-Verzeichnis für einen schnellen Start eines GDB-Servers.

5) Starten Sie die Debug-Sitzung. Es sollte programmieren und laufen!

Sie können Breakpoints setzen, Code schrittweise durchlaufen, noch mehr PC zurück, Call Stack, Variablen (locals / watch) und Disassemblierung beobachten. Ich bin wirklich zufrieden damit, aber offensichtlich fehlen ein paar Dinge wie: 1) "Registeransicht". Ja, es hat einen, aber das sind nur die CPU-Register. Ich möchte auch eine Registeransicht meiner Peripheriegeräte. 2) Ladefortschritt oder detailliertere Informationen zum Verbindungsstatus herunter. Dazu müssen Sie auf openocd verweisen.

Bearbeiten: Ich habe ein Beispielprojekt in diesem Github-Repository erstellt . Es enthält diesen Beitrag mit einigen hinzugefügten Dialog-Screenshots sowie ein Blinky-Projekt für das STM32F4 Discovery-Board, das ein QBS-Projekt in Qt Creator verwendet.

Was genau gewinnen Sie, wenn Sie Qt Creator als Toolkette verwenden?
Ich denke, ein großer Teil der persönlichen Präferenz. Ich kann die Vielseitigkeit von Eclipse schätzen, aber ich kann absolut nicht ertragen, wie langsam Java-IDEs sind. CodeBlocks wurde bereits erwähnt, ich denke, es gibt keinen großen Unterschied. Beides sind IDEs für C/C++ mit GDB-Debugging. Ich mag das QBS-Build-System, aber es ist kein Muss. Ich verwende bereits Qt, daher ist es schön, zum Codieren in einer Umgebung zu bleiben. Es gibt wahrscheinlich viel bessere kommerzielle Lösungen, aber oft nicht plattformübergreifend oder für viele Bastler oder kleine Teams außerhalb des Budgets.
Ich habe Qt und Qt Creator für die einzige Desktop-Anwendung verwendet, die ich je geschrieben habe, und niemals in einer Million Jahren hätte ich gedacht, dass die Leute es für die eingebettete Entwicklung verwenden würden. Jeden Tag etwas Neues...
Viele Wege führen nach Rom. Jede IDE, die mit GDB kommuniziert, wird irgendwann für die plattformübergreifende oder eingebettete Entwicklung verwendet, nehme ich an. Visual Studio kann über das VisualGDB-Plug-in auch mit OpenOCD kommunizieren und kann (wird) daher für die ARM-Entwicklung verwendet werden. OTOH könnte auch ein Skript schreiben, das ein Makefile ausführt und ein JTAG-Cmd-Zeilentool aufruft, um sein Binärbild auf sein Board hochzuladen. Sie könnten Vim verwenden und über Serial/Scope debuggen. Keine Notwendigkeit für eine Schnittstelle oder einen Debugger, der Code-Stepping unterstützt. Wenn das für dich funktioniert, ist das auch in Ordnung, oder? :-)
Danke für die Hinweise zum BareMetal-Plugin. Ich erinnere mich, dass ich es einmal erwähnt und dann vergessen hatte.

Laden Sie GCC-ARM , OpenOCD und ST-Util herunter und installieren Sie es . STM32CubeF4 ist optional, aber obligatorisch.

Fügen Sie einen benutzerdefinierten Compiler und Debugger als Bild unten auf Tools->Options->Build & Run hinzu .

Geben Sie hier die Bildbeschreibung ein

Erfahren Sie, wie Sie OpenOCD, GDB und ST-Flash verwenden.

Vorgeschlagene Seiten:

Behandeln Sie die gesamte Einrichtung von QtCreator

http://www.bartslinger.com/cx-10-quadcopter/debugging-stm32-from-qtcreator/

Einfaches Bare-Metal-Projekt für STM32 (es ist meins)

https://vilacoder.wordpress.com/category/arm/

Ein guter Ausgangspunkt für Sie ist wiki.qt.io/Building_Qt_5_from_Git

Außerdem finden Sie alles, was Sie brauchen, in ihrer Dokumentation, die sich auf doc.qt.io befindet .

Den besten Support erhalten Sie im offiziellen Forum forum.qt.io/category/4/qt-development .

Dies ist eher eine SO-Frage und nicht für SE EE.

Danke, ich werde diese prüfen. Übrigens, ich habe diese Frage zum ersten Mal auf SO gestellt und konnte etwa eine halbe Stunde lang keine Antwort bekommen, also habe ich beschlossen, sie hier zu stellen.
Holen Sie sich STM32Cube, um ein Projekt für das Eclipse-Tool SW4STM32 zu generieren. Sie erhalten ein Eclipse-Projekt. QT kann dies möglicherweise direkt importieren, oder Sie können sich das Makefile ansehen, das es in <yourproject>/Your Proj config>/debug/makefile generiert. Möglicherweise müssen Sie es zuerst kompilieren, damit das Makefile generiert wird

Wenn Sie Qt für STM32 erstellen möchten, lautet die kurze Antwort: Vergessen Sie es!

Warum ? Wie Sie bereits erwähnt haben, soll Qt unter Windows oder Linux laufen. Es ist jedoch nicht möglich, diese Betriebssysteme auf einem STM32 auszuführen, da ihm MMU, Speicher, Leistung usw. fehlen.

Wenn Sie Qt auf ein neues Betriebssystem oder Event-Bare-Metal portieren möchten, ist der Weg sehr lang!

Ich glaube nicht, dass das Originalposter Qt auf einen Mikrocontroller portieren möchte. Stattdessen möchte er/sie wissen, wie man ein Projekt mit Qt zum Laufen bringt, wenn man bei Null anfängt. Das OP ist ziemlich klar in Bezug auf die Verwendung von Windows und Linux.
Das OP möchte kein Qt auf dem STM32, es möchte nur Qt Creator (die IDE) für die STM32-Entwicklung verwenden.