Forum: Mikrocontroller und Digitale Elektronik STM32F407VG Registerinhalt auslesen


von Torch M. (thelightener)


Lesenswert?

Hallo,

ich benutze das Board STM32F407VG Discovery und arbeite mit EmBlitz 1.1. 
Leider funktioniert das Plugin SVD-Repository bei mir nicht, womit man 
sich ja die gesetzten Bits bzw. die Registerinhalte anschauen kann. Beim 
Starten des Plugins stürzt EmBlitz ab. Nun würde ich aber gerne 
überprüfen, ob das Setzen von Bits in den verschiedenen Registern die 
ich benutzen möchte klappt. Fällt dazu jemanden eine Möglichkeit ein? 
Kann man evtl. den Registerinhalt einer Variable zuweisen oder so?

MfG
thelightener

von ui (Gast)


Lesenswert?

Torch M. schrieb:
> Kann man evtl. den Registerinhalt einer Variable zuweisen oder so?

Klar, warum nicht?
1
uint32_t reg = I2C1->CR;

fertig

von ui (Gast)


Lesenswert?

Torch M. schrieb:
> Leider funktioniert das Plugin SVD-Repository bei mir nicht, womit man
> sich ja die gesetzten Bits bzw. die Registerinhalte anschauen kann.

Kann man übrigens mit jedem gdb oder jlink gdp oder oder oder... Da 
sollte man sich mal bisserl über embedded debugging beschäftigen.
Du kannst auch via SWO Tracenachrichten (printf...) raushauen.

von Torch M. (thelightener)


Lesenswert?

Leider stehe ich noch ganz am Anfang und muss mich mit 1000 Dingen 
beschäftigen, was mich z.Z. etwas überfordert. gdb oder SWO sagt mir 
daher gerade nichts.

Kannst du mir deinen Befehl noch genauer erläutern?

uint32_t reg = I2C1->CR;

Was ist in diesem Fall I2C1 und CR?

MfG
thelightener

von ui (Gast)


Lesenswert?

CR ist das Kontrollregister vom I2C1. War ja nur ein Beispiel.

Mach irgendein einfaches Beispiel, hier sowas z.B.
http://www.diller-technologies.de/stm32_wide.html

Und wenns mit der aktuellen Entwicklungsumgebung nicht geht, dann nimm 
irgendwas für DAUs. Atollic Truestudio, CooCox oder Eclipse mit 
manueller Konfiguration.

von Torch M. (thelightener)


Lesenswert?

Mit folgendem Code möchte ich zunächst ein Bit des entsprechenden 
Registers setzen und im Anschluss prüfen, ob es gesetzt wurde.

static const uint32_t TIM3_BASE_OWN = 0x40000400; //Basisadresse für 
Timer3-Register
volatile uint32_t *TIM3_BASE_MOD = (uint32_t*)(TIM3_BASE_OWN);
*TIM3_BASE_MOD |= 0x00000001;

Wie würde das mit deinem Code-Beispiel funktionieren?

von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Torch M. schrieb:
> Mit folgendem Code möchte ich zunächst ein Bit des entsprechenden
> Registers setzen und im Anschluss prüfen, ob es gesetzt wurde.
>
> static const uint32_t TIM3_BASE_OWN = 0x40000400; //Basisadresse für
> Timer3-Register
> volatile uint32_t *TIM3_BASE_MOD = (uint32_t*)(TIM3_BASE_OWN);
> *TIM3_BASE_MOD |= 0x00000001;
>
> Wie würde das mit deinem Code-Beispiel funktionieren?

Uh? Das Setzen hast Du Dir ja schon selbst beantwortet, und das Lesen... 
Genau umgekehrt?

if (*TIM3_BASE_MOD & 0x00000001)
  ...
else
  ...

... natürlich durchgehend mit symbolischen Identifiern. Die ST CMSIS 
Library hat für jedes Bit einzelne symbolische Konstanten.

Übrigens könntest Du Dir beim Cortex mal Bit Banding ansehen, da ist 
jedes Bit im Systemadressbereich auf ein Long gemappt. Ganz praktisch.

Solltest Du WinIdea benutzen, hast Du im SFR Fenster jedes einzelne Bit 
schön lesbar decodiert, da brauchst Du programmatisch gar nichts zu tun.

: Bearbeitet durch User
von Mehmet K. (mkmk)


Lesenswert?

Torch M. schrieb:
> Leider funktioniert das Plugin SVD-Repository bei mir nicht, womit man
> sich ja die gesetzten Bits bzw. die Registerinhalte anschauen kann.

Bei EmBlitz werden manche Optionen nur noch bei Entrichtung eines 
jaehrlichen Beitrags von 49 EUR freigeschaltet.
Bin mir nicht ganz sicher, meinte aber irgendwo gelesen zu haben, dass 
die Registeransicht in diese Sparte faellt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.