www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F10X_CL Linker script


Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In meinem Projekt setze ich den STM32F105RB ein.
Also Connectivity Line mit 128k Flash, 32k Ram.

Als Basis benutze ich ein Projekt von M. Thomas
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm...
Läuft so auch erstmal alles wunderbar.
Aber ich weiß, dass das Linker script nur für den STM32F103 mit weniger 
Periperie ist.
Wenn ich im Makefile
CDEFS = -DSTM32F10X_MD
in
CDEFS = -DSTM32F10X_CL
ändere, spuckt der Usart nur noch Müll aus.

Ich würde jetzt gerne das Linker script und was sonst noch notwendig ist 
anpassen, damit alles korrekt läuft.

Im STM32F10x_128k_20k_flash.ld habe ich die Zeile
RAM      (RWX) : ORIGIN = 0x20000000+0, LENGTH = 32K-0
in
RAM      (RWX) : ORIGIN = 0x20000000+0, LENGTH = 20K-0
geändert. Reicht das?

In startup_stm32f10x_md_mthomas.c werde ich alle isr (isr_vectorsram) 
ergänzen müssen, die der 105 mehr hat.

Sonst noch etwas?

Ich bin mit den ARMs noch ziemlicher Anfänger (vorher AVR) und die ganze 
Linkergeschichte muss noch etwas sacken.
Bin aber lernwillig :)

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stack Pointer richtig gesetzt?

Irgendwo müsste "_estack" definiert sein. Der Stackpointer wird bei 
"g_pfnVectors:" automatisch initialisiert.

In der "stm32f10x.h" muss auch noch der Device-Typ angepasst werden

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stack pointer sollte passen, da Martin das alles sehr schön über Makros 
gemacht hat.
_estack = ORIGIN(RAM)+LENGTH(RAM);

Nach meinem Verständnis muss in der "stm32f10x.h" nichts angepasst 
werden, da die zur ST lib gehört.
Alle Anpassungen da drin werden über die defines aus der makefile 
gemacht.
Ich benutze jetzt die V3.2.0 der ST Lib und nun läuft Usart.
Vermutlich hat die V3.1.2 einen Bug beim PLL initialisieren.

Jetzt zickt noch der CAN interrupt, aber das ist auch nur eine Frage der 
Zeit :)

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ist nicht der Interrupt, sondern der CAN läuft mit 1/3 der 
Geschwindigkeit, wie er sollte.
Also ca. 12Mhz statt 36Mhz.

Das gleiche Phänomen hatte ich vorher mit Usart unter V3.1.2.
Ein Bug in der PLL Init sollte es ja wohl nicht sein?

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe bei mir die "stm32f10x.h" angepasst, damit Eclipse die richtige 
Codevervollständigung hat.

Ich nutze die von ST gelieferten *.s Dateien nicht weil ich einen 
Bootloader drin habe. Deshalb würde die Interrupts nicht mehr tun.
Ich hab mit da was eigenes gestrickt.
In jedem Fall musste ich die Variable "SystemCoreClock" auch von Hand 
mit der richtigen Zahl beschreiben, denn ich initialisieren die Clocks 
auch selbst, so wie in der FW-Lib V2.x. Aktuell nutze ich auch die 
FW-Lib 3.2.0 und damit funktioniert CAN und USART prinzipiell richtig.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ok.
Ich musste die "stm32f10x.h" jetzt auch anpassen, weil die PLL beim 105 
anders initialisiert wird als beim 103.
Kein direkter Bug, aber auf jeden Fall unschön. Der Code sollte ja durch 
die Lib eigentlich sehr leicht portierbar sein.
Bin gerade noch dabei, den Sinn davon zu verstehen.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwo müsste man im User-Code Bereich dieses Define setzen können, 
aber die "stm32f10x.h" kann natürlich kein User-Code-Define einbinden.

Die Lösung wäre schlichtweg man hätte eine kleine Header-Datei die 
Konfigurationen/Defines beinhaltet und von der "stm32f10x.h" eingebunden 
ist. Denn in der "stm32f10x.h" rum zu doktorn ist eigentlich tötlich.
Einen Kompiller/Linker Schalter zu verwenden ist irgendwie doof, denn 
Eclipse blendet die nicht aktiven Defines (#ifdef) im Code aus, damit 
hat man viel mehr überblick.

Unschön finde ich auch wo die Variable "SystemCoreClock" initialisiert 
wird, denn die wird in der gesammten FW-LIB verwendet.

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus Müller schrieb:
> denn
> Eclipse blendet die nicht aktiven Defines (#ifdef) im Code aus, damit
> hat man viel mehr überblick.

Das kannst du abschalten in den Preferences:
Window->Preferences->C/C++->Editor->Folding->Enable Folding of 
Preprocessor branches.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Will ich aber nicht ;)

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus Müller schrieb:
> Will ich aber nicht ;)

Uppps... ja nach einem Beschleuniger in Form eines koffeinhaltigen 
Getränkes verstehe ich dein Posting oben auch richtig. Abschalten ist 
doof ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.