Gibt es in der lib für den STM32 eine Funktion, bei der.

Gast #4619590
Lesenswert?
• ▲
▼
Guten Abend,

ich möchte in ein Register einen hex-Wert (value) schreiben: GPIOD->ODR 
|= value; so dass nur die bestimmten Bits verändert werden und alle 
anderen Bits gleich bleiben.

Nn der lib für den STM32F4 habe ich bisher nur folgende Funktionen 
gefunden:

GPIO_Write(GPIOB, 0x1234);
GPIO_SetBits(GPIOA, GPIO_Pin_0);

Mit der zweiten Funktion kann ich nur die Bits "manuell" verändern und 
nicht mit einem Wert beschreiben und bei der zweiten Funktion werden 
eben alle anderen Bits auf Null gesetzt.

Gibt es dort keine Funktion, die dem Befehl |= entspricht ?
Gast #4619610
Lesenswert?
• ▲
▼
1993 schrieb:
> Guten Abend

Ja, ebenso guten Abend.

Mein Rat: fang endlich mal an, das RefManual zu deinem Chip zu lesen, 
anstatt in sowas wie der ST-Lib herumzustochern.

Vielleicht fällt dir beim verstehenden Lesen dabei ins Auge, was es für 
Register in den allgemeinen Ports gibt und welchem Zwecke sie dienen.

Und nochwas: zumindest ich erwarte schon ein bissel eigenen Antrieb 
deinerseits zum Wissenserwerb durch Lesen.

W.S.
Gast #4619657
Lesenswert?
• ▲
▼
W.S. schrieb:
> Vielleicht fällt dir beim verstehenden Lesen dabei ins Auge, was es für
> Register in den allgemeinen Ports gibt und welchem Zwecke sie dienen.

Genau das habe ich gemacht. Ich habe zum Setzen der GPIOs das oben 
beschrieben ODR Register und zusätzlich noch das BSRRL und BSRRH 
Register. Hier könnte ich dann auch das Register BSRRL verwenden, das 
dann eben nur die gewünschten Pins überschreibt.

Nun möchte ich aber mit der Lib arbeiten und da hilft mir das Wissen 
über die Register auch nicht weiter.
Gast #4619683
Lesenswert?
• ▲
▼
>Nun möchte ich aber mit der Lib arbeiten und da hilft mir das Wissen
>über die Register auch nicht weiter.

Man muss die "Lib" nicht auf Krampf verwenden wenn man weiss wie
es anders (und schneller!) geht.

Und niemand hindert dich daran folgendes zu tun:

GPIO_SetBits(GPIOA, GPIO_Pin_5 | GPIO_Pin_1 | GPIO_Pin_0);

Wenn man eine Lib verwendet sollte man schon auch die Funktionen
näher betrachten und die einfachsten Zusammenhänge erkennen können.
Gast #4619805
Lesenswert?
• ▲
▼
holger schrieb:
> GPIO_SetBits(GPIOA, GPIO_Pin_5 | GPIO_Pin_1 | GPIO_Pin_0);
>
> Wenn man eine Lib verwendet sollte man schon auch die Funktionen
> näher betrachten und die einfachsten Zusammenhänge erkennen können.

Und wie soll ich das dann mit meiner variablen machen?
GPIO_SetBits(GPIOA, variable);
Denn dies macht keinen Sinn!

Also wenn ich eure Antworten richtig deute, dann gibt es in der Lib 
nichts passendes.
Moderator Persönliche Seite #4620056
Lesenswert?
• ▲
▼
Thomas E. schrieb:
> Diese Möglichkeit scheint aber für den TO keinen Sinn zu machen:
>
> hex schrieb:
>> Und wie soll ich das dann mit meiner variablen machen?
>> GPIO_SetBits(GPIOA, variable);

Weil er nicht verstanden hat, dass GPIO_Pin_0 usw. Bitmasken sind. 
Wahrscheinlich denkt er noch zu sehr an den AVR, wo PD0, PD1 usw. nur 
Bitnummern sind. Daher auch seine Frage nach dem "|=".

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.