Forum: Mikrocontroller und Digitale Elektronik STM32; GPIOA->MODER, Debugging Problem


von Karl (Gast)


Lesenswert?

Hallo,

ich nutze Atollic Studio und das STM32f4-discovery. Ich konfiguriere die 
Ports/Pins bzw. deren Funktionen auf die "klassische" Art:
1
GPIOA->MODER =(0<<2)|(1<<3)|(0<<6)|(1<<7); //PA1&PA3 auf General purpose output mode

Kompilieren klappt wunderbar(einige Zeilen darüber hab ich den MCO2 & 2 
Inputs konfiguriert (auf die gleiche Art) => funktioniert wie gewünscht.

Nach dem Starten des Debuggers liefert Atollic folgende Meldung:

No breakpoint number 2.
warning: Remote failure reply: E31

Nach heftigen googlen fand ich heraus das der Fehler von einem mit dem 
Debugger geteilten Pin kommen kann. Ist aber wenn ich mich das DS 
richtig gelesen hab bei PA1&PA3 nicht der Fall!

Der Fehler tritt auf allen Pins von PortA auf(hab alle getestet). 
Bereitet aber bei keinem der anderen Ports Probleme.

Schon mal jemand drüber gestolpert?

Danke!!!

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Vorneweg: Behauptet die RM0090 nicht, "10" sei "alternate function"?

von Karl (Gast)


Lesenswert?

Ja stimmt, hab ich inzwischen geändert war aber nicht grund => funkt. 
Noch immer nicht :-(

von Hmm... (Gast)


Lesenswert?

Du setzt das gesamte Register, ist das gewünscht?  Normalerweise 
verodert man das Register mit der Maske damit die nicht zu ändernden 
Bits unberührt bleiben.

von Karl (Gast)


Lesenswert?

Ist ein Argument, denkst Du, dass das der Grund sein könnte?

Was passiert mit den restl. Bits nach meiner Methode?

von Hmm... (Gast)


Lesenswert?

Werden so gesetzt wie es da steht, also auf Null gesetzt.

von Karl (Gast)


Lesenswert?

Herzlichsten Dank für Deinen Hinweis!!

|= ()  und es funktioniert!

mfg karl

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Würden Deine include Files auch sowas hergeben?
Liest sich etwas freundlicher, "code rot" und so...

//PA1&PA3 auf General purpose output mode
GPIOA->MODER &= ~(0x3<<MODER1)|(0x3<<MODER3);
GPIOA->MODER |= (0x1<<MODER1)|(0x1<<MODER3);

wahlweise auch als Einzeiler:

//PA1&PA3 auf General purpose output mode
GPIOA->MODER = (GPIOA->MODER & ~(0x3<<MODER1)|(0x3<<MODER3)) |= 
(0x1<<MODER1)|(0x1<<MODER3);

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.