Difference between revisions of "ARM Embedded Tutorial - Entry FPC and STM32/de"

From Free Pascal wiki
Jump to navigationJump to search
 
(73 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Translate}}
+
{{LanguageBar}}
 +
 
 
=Einstieg STM32 und FPC=
 
=Einstieg STM32 und FPC=
 +
Dieses Tutorial wurde anhand von Linux Mint 64Bit getestet.
 +
== Treiber für ST-LINK V2 ==
 +
=== Linux ===
 +
====Über die Paketverwaltung:====
 +
<syntaxhighlight lang="bash">
 +
sudo apt install stlink-tools
 +
</syntaxhighlight>
  
== Treiber für ST-LINK V2 ==
+
====Über die original Sourcen:====
Das Paket als Zip runterladen
+
Dies hat den Vorteil, das meistens das Paket aktueller ist.
 +
 
 +
Das Paket als Zip mit '''clone or download''' downloaden:
 
* https://github.com/texane/stlink
 
* https://github.com/texane/stlink
  
Anleitung befolgen
+
Anleitung befolgen:
 
* https://github.com/texane/stlink/blob/master/doc/compiling.md
 
* https://github.com/texane/stlink/blob/master/doc/compiling.md
  
Line 16: Line 26:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo apt-get install cmake
 
sudo apt-get install cmake
sudo apt-get apt-get install gcc
+
sudo apt-get install gcc
sudo apt-get install libusb-1.0-0.dev
+
sudo apt-get install libusb-1.0-0-dev
 
// sudo apt-get install libusb-dev    // ???
 
// sudo apt-get install libusb-dev    // ???
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 26: Line 36:
 
$ make debug
 
$ make debug
  
$ mkdir build
+
$ mkdir build # evt. schon vorhanden.
 
$ cd build
 
$ cd build
 
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
 
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
Line 45: Line 55:
 
Reboot oder:
 
Reboot oder:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ udevadm control --reload-rules
+
$ sudo udevadm control --reload-rules
$ udevadm trigger
+
$ sudo udevadm trigger
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Anschliessend muss eine Gerätedatei '''/dev/stlinkv2_3''' oder ähnlich vorhanden sein.
 +
 +
Als Test mal folgendes aufrufen:<syntaxhighlight lang="bash">st-util</syntaxhighlight>
 +
Dann sollten mehrer Info-Zeilen kommen, unter anderem steht dort wie viel SRAM der Controller hat. Abbrechen kann man es anschliessend mit '''Ctrl+C'''.
 +
 +
Wen '''st-util''' mit folgendem Fehler abbricht:
 +
* ''st-util: error while loading shared libraries: libstlink.so.1: cannot open shared object file: No such file or directory''<br>Ist vermutlich dies das Problem:<br>
 +
** https://github.com/texane/stlink/issues/700<br><br>Anschliessend folgendes aufrufen:<syntaxhighlight lang="bash">sudo ldconfig</syntaxhighlight>
 +
 +
=== Windows/ macOS ===
 +
* https://github.com/texane/stlink/releases ( nicht getestet )
  
 
== Hardware verbinden ==
 
== Hardware verbinden ==
 
ST-LINK V2 folgendmassen mit dem STM32F103C verbinden:
 
ST-LINK V2 folgendmassen mit dem STM32F103C verbinden:
*STLIKN        STM32
+
{| class="wikitable"
*SWDIO -->   SWO
+
|-
*GND   -->   GND
+
! ST LINK V2 !! --> !! STM32F103C
*SWCLK -->   SWCLK
+
|-
*3.3V   -->   3.3V
+
| SWDIO     || --> || SWO
 +
|-
 +
| GND       || --> || GND
 +
|-
 +
| SWCLK     || --> || SWCLK
 +
|-
 +
| 3.3V       || --> || 3.3V
 +
|}
  
== Arduino-IDE einrichten ==
+
== Arduino-IDE einrichten (optimal) ==
 
Dies ist nicht zwingend notwendig, hat aber den Vorteil, das man nachgucken kann, wie dort Probleme gelöst worden sind. ZB. einen I²C-Zugriff.
 
Dies ist nicht zwingend notwendig, hat aber den Vorteil, das man nachgucken kann, wie dort Probleme gelöst worden sind. ZB. einen I²C-Zugriff.
  
Folgende Seite beachten ( Funktioniert nicht mit Sloeber )
+
Folgende Seite beachten ( Funktioniert nicht mit Sloeber ( Eclipse für Arduino ) )
 
* https://github.com/stm32duino/Arduino_Core_STM32
 
* https://github.com/stm32duino/Arduino_Core_STM32
 
JSON-Link:
 
JSON-Link:
Line 67: Line 96:
 
Folgende JSON geht auch mit Sloeber.<br>
 
Folgende JSON geht auch mit Sloeber.<br>
 
Dieser JSON-Link in der Arduino-IDE unter Datei/Voreinstellungen einfügen:
 
Dieser JSON-Link in der Arduino-IDE unter Datei/Voreinstellungen einfügen:
* http://dan.drown.org/stm32duino/package_STM32duino_index.json
+
* http://dan.drown.org/stm32duino/package_STM32duino_index.json ( Version 2018.4.2 wurde getestet.)
Version 2018.4.2 wurde getestet.
+
Am besten auch die ausführliche Ausgabe für Kompilierung und Hochladen aktivieren.
Am besten auch die Ausfühliche Ausgabe für Kompilierung und Hochladen aktivieren.
 
 
Dann sieht man, wen es einen Fehler beim Hochladen gibt.
 
Dann sieht man, wen es einen Fehler beim Hochladen gibt.
Achtung: Es wird im grünen Balken '''Hochladen abgeschlossen.''' angezeigt, auch wen im detailierten Bericht ein Fehler auftrat.
+
'''Achtung:''' Es wird im grünen Balken '''Hochladen abgeschlossen.''' angezeigt, auch wen im detailierten Bericht ein Fehler auftrat.
 
 
  
 
In der Boardverwaltung folgendes installieren:
 
In der Boardverwaltung folgendes installieren:
* STM32 Nucleo
+
* stm32duino/STM32F1xx...
  
 
Unter Werkzeuge das Board konfigurieren:
 
Unter Werkzeuge das Board konfigurieren:
* Board -> Generic ST32F103 series
+
* ''Board'' '''Generic STM32F103 series'''
* Serial Interface -> No Serial
+
* ''Serial Interface'' '''No Serial'''
* Upload method -> STLINK
+
* ''Upload method'' - '''STLINK'''
* Port -> ein bellieber Port, Arduino verlangt einen.
 
  
 
=== Erster Start ===
 
=== Erster Start ===
Den Arduino-Blink Sketch hochladen, dann sollte die LED PC13 blinken.
+
Den Arduino-Blink Sketch hochladen, dann sollte die LED PC13 blinken. Evtl. Ports auf PC13 setzen.
 +
 
 +
== Lazarus-IDE für FPC einrichten ==
 +
===Trunk bauen:===
 +
* Aktuelles FPCUpdeluxe einrichten. [[fpcupdeluxe/de]]
 +
* ListBoxen links-oben '''FPC version''' und '''Lazarus version''' auf '''embedded''' stellen.
 +
* Mit {{keypress|Embedded}} die Lazarus Basis-Trunk-Version bauen. ( Button befindet sich unten, mit dem IC-Symbol. )
 +
* '''Hinweis:''' Bei neueren FPCUPdeluxe Versionen, sin die Buttons anders beschriftet !
 +
Wenn alles ohne Fehler durchläuft bekommt man die aktuelle Trunk von FPC/Lazarus, normale Desktopanwendungen kann man mit dieser schon erstellen.
 +
Und es sollte auf dem Dekstop ein ein Icon '''Lazarus_fpcupdeluxe''' entstanden sein.
 +
 
 +
{{Note|Es könnte sein, dass die SVNs Schwierigkeiten machen. Dann nicht verzagen und es zu einem späterem Zeitpunkt nochmals probieren. ;-) <br>
 +
Was auch schon geholfen hat, FPCUPdeluxe zweimal hintereinander ausführen<br>
 +
Einen '''nicht aktuellen''' FPCUPdeluxe kann auch Schwierigkeiten machen.<br>
 +
Wen etwas nicht klappt, kann man hier im englischenm Forum nachfragen, der Autor ist sehr hilfsbereit.
 +
* https://forum.lazarus.freepascal.org/index.php/topic,34645.0.html
 +
}}
 +
 
 +
===ARM-Crosscompiler bauen:===
 +
* Button {{keypress|Setup+}} drücken, um einen Dialog mit weiteren Optionen zu öffnen. Dort folgendes einstellen:
 +
** ''"Use jobs for GNU make"'': Hacken entfernen.
 +
** CPU: '''arm'''
 +
** OS: '''embedded'''
 +
** Cross SubArch Overide: '''armv7m'''
 +
 
 +
* Dialog mit {{keypress|Ok}} beenden.
 +
* Im Reiter '''Cross''' noch folgende CheckBoxen anwählen:
 +
** CPU: '''arm'''
 +
** OS: '''embedded'''
 +
* Button {{keypress|Install compiler}} drücken, somit wird der Cross-Compiler gebaut.
 +
 
 +
Wenn alles fehlerfrei gelaufen ist, FPCUPdeluxe beenden.
 +
 
 +
==Lazarus vorbereiten==
 +
 
 +
===Lazarus auf deutsch===
 +
* Lazarus mit dem neuen Desktop-Icon (Lazarus_fpcupdeluxe) starten.
 +
* ''"Tools --> Options --> General --> Language"'' Lazarus auf deutsch stellen, mit {{keypress|Ok}} bestätigen und Lazarus neu starten.
 +
Lazarus sollte jetzt deutsch sein.
 +
 
 +
===Start mit {{keypress|F9}}===
 +
Wenn man mit {{keypress|F9}} starten will, kommt immer eine Fehlermeldung. Diese kann man unterbinden.
 +
Bei Lazarus folgendes ändern:
 +
* ''"Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Programm starten"'', auf ''Unbekannt'' stellen.
 +
* ''"Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Start ohne Debugger"'', die Haken bei ''Shift'' und ''Ctrl'' entfernen.
 +
Somit kann man ganz normal mit {{keypress|F9}} hochladen und starten.
 +
Man muss dabei aber bedenken, dass dann der Debugger auch unterbunden ist, wenn man dann mit Lazarus ein normales PC-Programm schreibt!
 +
 
 +
===Codetools===
 +
Es kann sein, das die Codetools, die Unit stm32f103xb nicht findet. Dann ist folgender Schritt nötig:
 +
* ''"Werkzeuge --> FPC-Quelltextverzeichniss neu einlesen"''
 +
 
 +
===Leserlicher ASM-Code Erstellung===
 +
Wen man die Source als Assembler-Code sehen will, ist folgender Schritt notwendig:
 +
*''"Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen"'' noch '''-al''' eintragen, dies erzeugt eine *.s-Datei, welche das Programm als ASM-Code enthält. <br>
 +
 
 +
===Fehlerhafte Optimierung===
 +
Ich habe schon erlebt, das das Programm nicht richtig funktionierte, weil der Compiler den Code fehlerhaft optimierte.
 +
* Mit '''{$O-}''' am Programmanfang die Codeoptimierung ausschalten.
  
== IDE für FPC einrichten ==
+
==Erstes Projekt==
=== MSEide und MSEgui ===
+
 
=== Lazarus ===
+
===Neues Projekt erzeugen===
Läuft leider noch nicht.
+
* ''"Datei --> neu... --> Einfaches Programm"'' - ein neues Project erstellen.
 +
* ''"Projekt --> Projekteinstellungen... --> Konfiguration und Ziele"'' - folgendes einstellen:
 +
** Ziel-Betriebsystem (-T): '''Embedded'''
 +
** Ziel-CPU-Familie (-P): '''arm'''
 +
** Zielprozessor (-Cp): '''ARMV7M'''
 +
 
 +
* ''"Projekt --> Projekteinstellungen... --> Debuggen"'': Den Haken ''"Debugger-Information für GDB erzeugen"'' entfernen.<br>
 +
* ''"Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen'' noch '''-WpSTM32F103X8''' eintragen.<br>
 +
* ''"Projekt --> Projekteinstellungen... --> Compiler-Kommandos --> Nachher ausführen"''
 +
** Haken '''Kompilieren''' und '''Neu kompilieren''' entfernen.
 +
** Folgendes bei '''Befehl:''' eintragen:<br><code>st-flash write stm32Blink.bin 0x8000000</code><br>
 +
 
 +
{{Note|Die Pfade müssen noch an die eigenen Installationen angepasst werden.}}
 +
 
 +
Als Empfehlung, würde ich dieses Projekt als Vorlage nehmen, und alle neuen Projekte auf dieser Aufbauen. Jedesmal das ganze bei einem neuen Projekt einzustellen, ist etwas mühsam.
 +
 
 +
===Projekt starten===
 +
Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit {{keypress|F9}} Programm kompilieren und hochladen. Wenn alles funktioniert hat, sollte die LED an Pin13 ca. alle 1 Sekunden blinken.
 +
 
 +
 
 +
===Beispiel Code===
 +
 
 +
<syntaxhighlight lang="pascal">
 +
program stm32Blink;
 +
 
 +
{$O-} // Keine Optimierung
 +
 
 +
procedure Delay;
 +
var
 +
  i: uint32;
 +
begin
 +
  for i := 0 to 500000 do begin
 +
    asm nop end; // Leerbefehl
 +
  end;
 +
end;
 +
 
 +
begin
 +
  // PortC einschalten
 +
  RCC.APB2ENR := RCC.APB2ENR or (%1 shl 4);
 +
 
 +
  // Pin P13 von PortC aud Output.
 +
  PortC.CRH := $00300000;
 +
 
 +
  // Hinweis: Die LED leuchtet bei LOW.
 +
  while true do begin
 +
 
 +
    // Pin13 -- High
 +
    PortC.BSRR := 1 shl 13;
 +
    Delay;
 +
 
 +
    // Pin13 -- Low
 +
    PortC.BRR := 1 shl 13;
 +
    Delay;
 +
  end;
 +
end.
 +
</syntaxhighlight>
 +
 
 +
== Manuell mit Make ==
 +
Nicht getestet.
 +
<syntaxhighlight lang="bash">
 +
make clean all OS_TARGET=embedded CPU_TARGET=arm SUBARCH=armv7m
 +
</syntaxhighlight>
 +
 
 +
== MSEide und MSEgui ==
 +
Als Alternative zu Lazarus kann man auch die MSEide und MSEgui verwenden.
 +
 
 +
Folgende Tools sind notwendig:
 +
* https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads - GNU Arm Embedded Toolchain ( gcc für ARM )
 +
* https://sourceforge.net/projects/mseide-msegui/files/fpccrossarmembedded/ - Cross-Compiler für ARM Embedded.
 +
* https://sourceforge.net/projects/mseide-msegui/files/mseide-msegui/4.6/ - mseGUI ( Bin und Sourcen downloaden )
 +
* https://gitlab.com/mseide-msegui/mseuniverse/tree/master/samples/embedded/arm/stm32l100c - Demo-Project
 +
Diese Archive in einen Ordner entpacken, zB. '''/home/tux/STM32-FPC'''
 +
 
 +
MSEide unter '''/home/tux/STM32-FPC/msegui/bin''' starten.
 +
 
 +
* ''Settings --> Configure MSEide'' - folgende Pfad anpassen:
 +
** ''$ {MSEDIR} - '''/home/tux/STM32-FPC/msegui/'''
 +
* ''Project --> open'' - Das Demo-Project im entpackten Ordner öffnen. ( '''/home/tux/STM32-FPC/samples/embedded/arm/stm32l100c/stm32l100c.prj''' )
 +
* ''Project --> Options --> Macros'' folgende Pfade anpassen:
 +
** ''TOOLCHAINDIR'' - '''/home/tux/STM32-FPC/gcc-arm-none-eabi-7-2017-q4-major/'''
 +
** ''CROSSFPCDIR'' - '''/home/tux/STM32-FPC/crossfpc-x86_64_linux_eabi_embedded_3_1_1/'''
 +
Wen in der Linken Spalte noch ein roter Break-Point gesetzt ist, dieser mit einem Klick deaktivieren.
 +
Mit {{keypress|F9}} das Programm starten. Wen alles richtig gelaufen ist, müsste dies ohne Fehler durchlaufen.
 +
 
 +
Wen man den Code im Editor durch folgenden ersetzt, sollte die LED an PC13 blinken.
  
 
== Siehe auch ==
 
== Siehe auch ==
* Übersichtseite [[ARM Embedded Tutorial/de]]
+
 
 +
* Übersichtseite [[ARM Embedded Tutorials/de]]
  
 
Autor: [[User:Mathias|Mathias]]
 
Autor: [[User:Mathias|Mathias]]
  
[[Category:Embedded]]
+
[[Category:ARM/de]]
[[Category:ARM]]
+
[[Category:Embedded/de]]
 +
[[Category:Tutorials/de]]
 +
{{AutoCategory}}

Latest revision as of 16:00, 13 June 2022

Deutsch (de) English (en)

Einstieg STM32 und FPC

Dieses Tutorial wurde anhand von Linux Mint 64Bit getestet.

Treiber für ST-LINK V2

Linux

Über die Paketverwaltung:

sudo apt install stlink-tools

Über die original Sourcen:

Dies hat den Vorteil, das meistens das Paket aktueller ist.

Das Paket als Zip mit clone or download downloaden:

Anleitung befolgen:

Folgende Pakete müssen installiert werden

  • CMake (minimal v2.8.7)
  • C compiler (gcc, clang, mingw)
  • Libusb 1.0 (minimal v1.0.9)
sudo apt-get install cmake
sudo apt-get install gcc
sudo apt-get install libusb-1.0-0-dev
// sudo apt-get install libusb-dev    // ???

stlink compiliern und installieren:

$ make release
$ make debug

$ mkdir build # evt. schon vorhanden.
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
$ make

Im Home Verzeichniss:

$ cd build/Release
$ make install DESTDIR=$HOME

Im System global:

$ cd build/Release
$ sudo make install

Reboot oder:

$ sudo udevadm control --reload-rules
$ sudo udevadm trigger

Anschliessend muss eine Gerätedatei /dev/stlinkv2_3 oder ähnlich vorhanden sein.

Als Test mal folgendes aufrufen:

st-util

Dann sollten mehrer Info-Zeilen kommen, unter anderem steht dort wie viel SRAM der Controller hat. Abbrechen kann man es anschliessend mit Ctrl+C.

Wen st-util mit folgendem Fehler abbricht:

  • st-util: error while loading shared libraries: libstlink.so.1: cannot open shared object file: No such file or directory
    Ist vermutlich dies das Problem:

Windows/ macOS

Hardware verbinden

ST-LINK V2 folgendmassen mit dem STM32F103C verbinden:

ST LINK V2 --> STM32F103C
SWDIO --> SWO
GND --> GND
SWCLK --> SWCLK
3.3V --> 3.3V

Arduino-IDE einrichten (optimal)

Dies ist nicht zwingend notwendig, hat aber den Vorteil, das man nachgucken kann, wie dort Probleme gelöst worden sind. ZB. einen I²C-Zugriff.

Folgende Seite beachten ( Funktioniert nicht mit Sloeber ( Eclipse für Arduino ) )

JSON-Link:

Folgende JSON geht auch mit Sloeber.
Dieser JSON-Link in der Arduino-IDE unter Datei/Voreinstellungen einfügen:

Am besten auch die ausführliche Ausgabe für Kompilierung und Hochladen aktivieren. Dann sieht man, wen es einen Fehler beim Hochladen gibt. Achtung: Es wird im grünen Balken Hochladen abgeschlossen. angezeigt, auch wen im detailierten Bericht ein Fehler auftrat.

In der Boardverwaltung folgendes installieren:

  • stm32duino/STM32F1xx...

Unter Werkzeuge das Board konfigurieren:

  • Board - Generic STM32F103 series
  • Serial Interface - No Serial
  • Upload method - STLINK

Erster Start

Den Arduino-Blink Sketch hochladen, dann sollte die LED PC13 blinken. Evtl. Ports auf PC13 setzen.

Lazarus-IDE für FPC einrichten

Trunk bauen:

  • Aktuelles FPCUpdeluxe einrichten. fpcupdeluxe/de
  • ListBoxen links-oben FPC version und Lazarus version auf embedded stellen.
  • Mit Embedded die Lazarus Basis-Trunk-Version bauen. ( Button befindet sich unten, mit dem IC-Symbol. )
  • Hinweis: Bei neueren FPCUPdeluxe Versionen, sin die Buttons anders beschriftet !

Wenn alles ohne Fehler durchläuft bekommt man die aktuelle Trunk von FPC/Lazarus, normale Desktopanwendungen kann man mit dieser schon erstellen. Und es sollte auf dem Dekstop ein ein Icon Lazarus_fpcupdeluxe entstanden sein.

Light bulb  Hinweis: Es könnte sein, dass die SVNs Schwierigkeiten machen. Dann nicht verzagen und es zu einem späterem Zeitpunkt nochmals probieren. ;-)
Was auch schon geholfen hat, FPCUPdeluxe zweimal hintereinander ausführen
Einen nicht aktuellen FPCUPdeluxe kann auch Schwierigkeiten machen.
Wen etwas nicht klappt, kann man hier im englischenm Forum nachfragen, der Autor ist sehr hilfsbereit.

ARM-Crosscompiler bauen:

  • Button Setup+ drücken, um einen Dialog mit weiteren Optionen zu öffnen. Dort folgendes einstellen:
    • "Use jobs for GNU make": Hacken entfernen.
    • CPU: arm
    • OS: embedded
    • Cross SubArch Overide: armv7m
  • Dialog mit Ok beenden.
  • Im Reiter Cross noch folgende CheckBoxen anwählen:
    • CPU: arm
    • OS: embedded
  • Button Install compiler drücken, somit wird der Cross-Compiler gebaut.

Wenn alles fehlerfrei gelaufen ist, FPCUPdeluxe beenden.

Lazarus vorbereiten

Lazarus auf deutsch

  • Lazarus mit dem neuen Desktop-Icon (Lazarus_fpcupdeluxe) starten.
  • "Tools --> Options --> General --> Language" Lazarus auf deutsch stellen, mit Ok bestätigen und Lazarus neu starten.

Lazarus sollte jetzt deutsch sein.

Start mit F9

Wenn man mit F9 starten will, kommt immer eine Fehlermeldung. Diese kann man unterbinden. Bei Lazarus folgendes ändern:

  • "Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Programm starten", auf Unbekannt stellen.
  • "Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Start ohne Debugger", die Haken bei Shift und Ctrl entfernen.

Somit kann man ganz normal mit F9 hochladen und starten. Man muss dabei aber bedenken, dass dann der Debugger auch unterbunden ist, wenn man dann mit Lazarus ein normales PC-Programm schreibt!

Codetools

Es kann sein, das die Codetools, die Unit stm32f103xb nicht findet. Dann ist folgender Schritt nötig:

  • "Werkzeuge --> FPC-Quelltextverzeichniss neu einlesen"

Leserlicher ASM-Code Erstellung

Wen man die Source als Assembler-Code sehen will, ist folgender Schritt notwendig:

  • "Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen" noch -al eintragen, dies erzeugt eine *.s-Datei, welche das Programm als ASM-Code enthält.

Fehlerhafte Optimierung

Ich habe schon erlebt, das das Programm nicht richtig funktionierte, weil der Compiler den Code fehlerhaft optimierte.

  • Mit {$O-} am Programmanfang die Codeoptimierung ausschalten.

Erstes Projekt

Neues Projekt erzeugen

  • "Datei --> neu... --> Einfaches Programm" - ein neues Project erstellen.
  • "Projekt --> Projekteinstellungen... --> Konfiguration und Ziele" - folgendes einstellen:
    • Ziel-Betriebsystem (-T): Embedded
    • Ziel-CPU-Familie (-P): arm
    • Zielprozessor (-Cp): ARMV7M
  • "Projekt --> Projekteinstellungen... --> Debuggen": Den Haken "Debugger-Information für GDB erzeugen" entfernen.
  • "Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen noch -WpSTM32F103X8 eintragen.
  • "Projekt --> Projekteinstellungen... --> Compiler-Kommandos --> Nachher ausführen"
    • Haken Kompilieren und Neu kompilieren entfernen.
    • Folgendes bei Befehl: eintragen:
      st-flash write stm32Blink.bin 0x8000000
Light bulb  Hinweis: Die Pfade müssen noch an die eigenen Installationen angepasst werden.

Als Empfehlung, würde ich dieses Projekt als Vorlage nehmen, und alle neuen Projekte auf dieser Aufbauen. Jedesmal das ganze bei einem neuen Projekt einzustellen, ist etwas mühsam.

Projekt starten

Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit F9 Programm kompilieren und hochladen. Wenn alles funktioniert hat, sollte die LED an Pin13 ca. alle 1 Sekunden blinken.


Beispiel Code

program stm32Blink;

{$O-} // Keine Optimierung

procedure Delay;
var
  i: uint32;
begin
  for i := 0 to 500000 do begin
    asm nop end; // Leerbefehl
  end;
end;

begin
  // PortC einschalten
  RCC.APB2ENR := RCC.APB2ENR or (%1 shl 4);

  // Pin P13 von PortC aud Output.
  PortC.CRH := $00300000;

  // Hinweis: Die LED leuchtet bei LOW.
  while true do begin

    // Pin13 -- High
    PortC.BSRR := 1 shl 13;
    Delay;

    // Pin13 -- Low
    PortC.BRR := 1 shl 13;
    Delay;
  end;
end.

Manuell mit Make

Nicht getestet.

make clean all OS_TARGET=embedded CPU_TARGET=arm SUBARCH=armv7m

MSEide und MSEgui

Als Alternative zu Lazarus kann man auch die MSEide und MSEgui verwenden.

Folgende Tools sind notwendig:

Diese Archive in einen Ordner entpacken, zB. /home/tux/STM32-FPC

MSEide unter /home/tux/STM32-FPC/msegui/bin starten.

  • Settings --> Configure MSEide - folgende Pfad anpassen:
    • $ {MSEDIR} - /home/tux/STM32-FPC/msegui/
  • Project --> open - Das Demo-Project im entpackten Ordner öffnen. ( /home/tux/STM32-FPC/samples/embedded/arm/stm32l100c/stm32l100c.prj )
  • Project --> Options --> Macros folgende Pfade anpassen:
    • TOOLCHAINDIR - /home/tux/STM32-FPC/gcc-arm-none-eabi-7-2017-q4-major/
    • CROSSFPCDIR - /home/tux/STM32-FPC/crossfpc-x86_64_linux_eabi_embedded_3_1_1/

Wen in der Linken Spalte noch ein roter Break-Point gesetzt ist, dieser mit einem Klick deaktivieren. Mit F9 das Programm starten. Wen alles richtig gelaufen ist, müsste dies ohne Fehler durchlaufen.

Wen man den Code im Editor durch folgenden ersetzt, sollte die LED an PC13 blinken.

Siehe auch

Autor: Mathias