ARM Embedded

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Re: ARM Embedded

Beitragvon Mathias » 1. Mai 2018, 20:33 Re: ARM Embedded

Das gibt natürlich in die Jahre hinweg viel Erfahrung. :wink:

Ich mache es nur als Hobby.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 2. Okt 2018, 17:03 Re: ARM Embedded

Da ich nun Dank DonAlfredo Lazarus als ARM-Crosscompiler hingekriegt habe, wollte ich mal den ersten Blinker erstellen.
viewtopic.php?f=9&t=11718&start=15

Dazu habe ich unter Zielplattform folgendes eingestellt:
Betriebssystem: Embedded
CPU:arm
Zielprozessoer: ARMV7M

Bei Benutzerdefinierten Einstellungen noch folgendes: -WpSTM32F103C8

Dabei habe ich folgenden Code:
Code: Alles auswählen
program stm32Blink;
var
  APB2ENR: DWord absolute $40021018; // APB2 peripheral clock enable register
  PortC: record
    CRL, CRH, IDR, ODR, BSRR, BRR, LCKR: uint32;
  end
  absolute $40011000;
 
  procedure Delay;
  var
    i: uint32;
  begin
    for i := 0 to 500000 do
    begin
      asm
               NOP end; // Leerbefehl
    end;
  end;
 
begin
  APB2ENR := APB2ENR or (1 shl 4); // Clock für GPIOC freigeben.
  APB2ENR := APB2ENR or (1 shl 3); // Clock für GPIOB freigeben.
  APB2ENR := APB2ENR or (1 shl 2); // Clock für GPIOA freigeben.
 
 
  // Pin P13 von PortC aud Output.
  PortC.CRH := $00300000;
 
  // Hinweis: Die LED leuchtet bei LOW.
  repeat
 
    // Pin13 -- High
    portc.BSRR := 1 shl 13;
    Delay;
 
    // Pin13 -- Low
    portC.BRR := 1 shl 13;
    Delay;
  until 1=2;
end.


Wen ich kompiliere, wird eine stm32Blink.hex erzeugt. Dies würde mal gut aussehen.

Hochladen habe ich es folgendermassen:
Code: Alles auswählen
 st-flash write stm32Blink.hex 0x8000000

Dabei habe ich folgende Ausgabe:
Code: Alles auswählen
st-flash 1.5.1
2018-10-02T17:56:06 INFO common.c: Loading device parameters....
2018-10-02T17:56:06 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2018-10-02T17:56:06 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2018-10-02T17:56:06 INFO common.c: Attempting to write 2950 (0xb86) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08000800 erased
2018-10-02T17:56:07 INFO common.c: Finished erasing 3 pages of 1024 (0x400) bytes
2018-10-02T17:56:07 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2018-10-02T17:56:07 INFO flash_loader.c: Successfully loaded flash loader in sram
2018-10-02T17:56:10 ERROR flash_loader.c: flash loader run error
2018-10-02T17:56:10 ERROR common.c: stlink_flash_loader_run(0x8000000) failed! == -1
stlink_fwrite_flash() == -1
Nur habe ich da leider einen ERROR.

Mache ich es ein zweites mal, gibt es keine Fehler mehr, und dies dauert nur sehr kurz, sieht man an der LED de ST-LINK.
Code: Alles auswählen
st-flash 1.5.1
2018-10-02T17:58:47 INFO common.c: Loading device parameters....
2018-10-02T17:58:47 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2018-10-02T17:58:47 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2018-10-02T17:58:47 INFO common.c: Attempting to write 2950 (0xb86) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08000800 erased
2018-10-02T17:58:47 INFO common.c: Finished erasing 3 pages of 1024 (0x400) bytes
2018-10-02T17:58:47 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2018-10-02T17:58:47 INFO flash_loader.c: Successfully loaded flash loader in sram
  3/3 pages written
2018-10-02T17:58:47 INFO common.c: Starting verification of write complete
2018-10-02T17:58:47 INFO common.c: Flash written and verified! jolly good!
 


Versuche ich es nochmals, kommt wieder der ERROR, probiere ich es nochmals, ist es wieder ohne Fehler, usw.

Unterbreche ich die Verbindung, zwischen dem STM32 und dem STLINK, kommt folgende Meldung:
Code: Alles auswählen
st-flash 1.5.1
2018-10-02T18:01:07 INFO common.c: Loading device parameters....
2018-10-02T18:01:07 WARN common.c: Invalid flash type, please check device declaration
Unknown memory region
Dies ist ein Zeichen dafür, das der STM32 wen angeschlossen, erkannt wird.

Aber eine blinkende LED sehe ich nicht, was mache ich falsch ?

Hat jemand eine Idee ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 2. Okt 2018, 17:11 Re: ARM Embedded

Ich bin weiter gekommen, ich muss die *.bin und nicht die *.hex nehmen.

So hat es geklappt. 8)
Code: Alles auswählen
st-flash write stm32Blink.bin 0x8000000
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 2. Okt 2018, 17:29 Re: ARM Embedded

Nächstes Problem:

Ich will gerne die Unit "STM32F10x_ld" einbinden.
Wen ich sie in den Klausel einbinde und kompiliere, wird sie nicht gefunden.
Code: Alles auswählen
uses
  STM32F10x_ld; 

Aber wen ich mit dem Cursor auf den Namen gehe und [Ctrl+Enter] drücke, dann findet die IDE die Unit sofort.

Nachtrag:
Die Unit ist schon eingebunden, so wie beim AVR die "Atmega328.pp".

Dies wird erkannt:
Code: Alles auswählen
begin
  RCC.APB2ENR := 0;


Aber ich habe doch noch ein Problem.
Wen ich den Cursor auf "RCC" setzt und [Ctrl+Hoch] drücke, wird der Bezeichner nicht gefunden.
Dafür wird in die "systemh.inc" gesprungen, und bleibt bei Zeile 559 hängen.
Code: Alles auswählen
{ platform-dependent types }
{$i sysosh.inc} 


Wie kann ich dies umgehen ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 3. Okt 2018, 07:44 Re: ARM Embedded

Mathias hat geschrieben:Wie kann ich dies umgehen ?

Ich kann dir da nicht helfen. Erlaube eine Bemerkung. Meiner Meinung nach ist der Einbau aller bekannten uP's in den Compiler nicht zielführend. Besser wäre ein System von vom Compiler unabhängigen Definitions-units und über Segmente gesteuerte Linker-scripts.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon pluto » 3. Okt 2018, 12:56 Re: ARM Embedded

Besser wäre ein System von vom Compiler unabhängigen Definitions-units und über Segmente gesteuerte Linker-scripts.

Macht das die Arduino IDE nicht ähnlich? Sie unterstützt als Grundlage erst mal ihre "hausgemachten" MC. nun haben "Leute" weitere wie z.b. den ESP hinzugefügt.

@Mathias
Welchen STM32 hast du genommen?
STM32F303 Discovery oder den STM32F103?

Wie groß ist deine BIN Datei? Unter Arduino ist sie gewaltig.... dabei soll der Code nur die LED blinken lassen.... dabei werden schon über ca 30% Flash Speicher verwendet.... Der Grund ist wohl der Bootloader den ich drauf gespielt habe(jedenfalls bei den STM32F103)....
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6703
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon Mathias » 3. Okt 2018, 16:01 Re: ARM Embedded

Welchen STM32 hast du genommen?

So ein billiger Chines: STM32F103C8T6

Wie groß ist deine BIN Datei?
Nur etwa 1KB.
Unter Arduino ist sie gewaltig....
Code: Alles auswählen
 
Globale Variablen verwenden 3088 Bytes (15%) des dynamischen Speichers, 17392 Bytes für lokale Variablen verbleiben. Das Maximum sind 20480 Bytes.

Auch das Hochladen geht sehr lange. Da sieht man wieder wie ineffizient Arduino ist.


PS: Ich habe gerade mein Compiler geupdatet.
Da motzt er, das er die Unit nicht mehr findet, aber im Editor wird sie geöffnet.
Code: Alles auswählen
stm32f103xb.pp(3,12) Fatal: Can't find unit stm32f103xb used by stm32Blink

Ich denke, dies ist fast der gleiche Fehler, wie ich gestern schon beschrieben habe.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •
Vorherige

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried