Forum: Mikrocontroller und Digitale Elektronik STM32G431 alternate functions


von Raoul D. (raoul_d219)


Lesenswert?

Hallo zusammen,

ich habe etwas Verwirrung bzgl. der Auswahl der "alternate functions" 
beim G431.

Folgendes gemacht:

1) Timer3 konfiguriert als PWM
2) PB4 als AF2 (TIM3_CH1) GPIO->AFR[0] = 2

So geht das auch prima.

Beim weiteren Lesen des DB (und weiteren Beispielen) habe ich 
festgestellt, das man auch in GPIO->MODER noch als Mode noch "alternate 
function mode" (0x10) einstellen sollte.

Füge ich das ein, also

1) Timer3 konfiguriert als PWM
2) in GPIO->MODER für PB4 alternate function mode setzen
3) PB4 als AF2 (TIM3_CH1) mit GPIO->AFR[0] = 2

geht es nicht mehr, der PB4 floated.

Irgendeine Idee?

von Alex R. (geneo)


Lesenswert?

Es liegt daran, dass der Pin nach Reset im Alternate Mode ist.
Steht auch so im Reference Manual.

Was sagt denn der Debugger?

: Bearbeitet durch User
von Raoul D. (raoul_d219)


Lesenswert?

Alex R. schrieb:
> Es liegt daran, dass der Pin nach Reset im Alternate Mode ist.
> Steht auch so im Reference Manual.

Nein. Ist im Analog-Modus.

> Warum du ausgerechnet beim Setzen des Modes deines Pins in den
> Prosamodus gehst, verstehe uch nicht.
>
> Auf welchen Wert setzt du denn den Modus? Er sollte 2 sein.

Genau:

Raoul D. schrieb:
> Beim weiteren Lesen des DB (und weiteren Beispielen) habe ich
> festgestellt, das man auch in GPIO->MODER noch als Mode noch "alternate
> function mode" (0x10) einstellen sollte.

Das war ein Schreibfehler: 0x02
Und der war auch im Code ;-) Danke!

: Bearbeitet durch User
von Andreas B. (abm)


Lesenswert?

Raoul D. schrieb:
> 1) Timer3 konfiguriert als PWM
> 2) PB4 als AF2 (TIM3_CH1) GPIO->AFR[0] = 2
Logisch, denn PB4 ist nach Reset als JTRST eingestellt, d. h. AF0.
Klar, dass man dann nur noch AFR umstellen muss ...

Das sieht man auch wenn man einfach mal ins RM schaut:
"9.4.1 GPIO port mode register (GPIOx_MODER)
...
Reset value: 0xFFFF FEBF (for port B)"

Für PB4 also '10', sprich "Alternate Mode"

> Beim weiteren Lesen des DB (und weiteren Beispielen) habe ich
> festgestellt, das man auch in GPIO->MODER noch als Mode noch "alternate
> function mode" (0x10) einstellen sollte.

Das Lesen des RM ist meist deutlich hilfreicher, als 
Fehler/Ungenauigkeiten aus irgendwelchen obskuren Beispielen zu 
kopieren.

> Füge ich das ein, also
> 1) Timer3 konfiguriert als PWM
> 2) in GPIO->MODER für PB4 alternate function mode setzen
> 3) PB4 als AF2 (TIM3_CH1) mit GPIO->AFR[0] = 2
>
> geht es nicht mehr, der PB4 floated.
>
> Irgendeine Idee?

Ja: Irgendetwas falsch gemacht. Es wäre sinnvoll, mal danach im MODER 
nachzusehen, ob wirklich das drinsteht, was man GLAUBT, da 
hineingeschrieben zu haben. Merke: Wunschdenken und Realität sind 
oftmals leicht verschieden.

von Alex R. (geneo)


Lesenswert?

Schau mal im RM0440 nach.
Da bekommst du viel mehr Informationen als im normalen Datenblatt.
Zu jedem Bereich bekommst du auch eine Auflistung der Register und deren 
Reset-Werte. Wenn sie sich zwischen den einzelnen Gruppen unterscheiden 
(z.B. GPIOA, GPIOB,... oder USART1, USART2...) stehen die Resetwerte 
jeweils da.

von Raoul D. (raoul_d219)


Lesenswert?

Andreas B. schrieb:
> Reset value: 0xFFFF FEBF (for port B)"

Ja, das hatte ich zwar übersehen, hat aber nichts mit meinem Problem zu 
tun ;-)

Andreas B. schrieb:
> Das Lesen des RM ist meist deutlich hilfreicher

Sorry, mit DB meinte ich auch RM.

Andreas B. schrieb:
> sinnvoll, mal danach im MODER
> nachzusehen, ob wirklich das drinsteht, was man GLAUBT, da
> hineingeschrieben zu haben.

Nö, es war einfach der o.g. Fehler: 0x10 statt 0b10.

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.