Bits ansprechen

Gast #4698036
Lesenswert?

Hallo,
was mache ich hier falsch
mit // habe ich das Beispiel an dem ich mich orientiere ausgeklammert
Ich nutze den MicroC Compiler
Es klaat nicht mit
GPIOD_ODR |= 1 << GPIOD_ODR.B3;
z.B. Bit 3 zu setzen :-(
1
  GPIOD_ODR  = 0x00000055;
2
    Delay_ms(500);
3
    GPIOD_ODR |= 1 << GPIOD_ODR.B3;
4
     //GPIOD_ODR.B5 = 1;
5
   // DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4);
6
    delay_ms(1000);
Gast #4698052
Lesenswert?

Sonja schrieb:
> was mache ich hier falsch
Einiges o.O

Unter der Annahme dass der MikroC die CMSIS Libraries von ST verwendet 
geht das ganz einfach so:
1
GPIOD->ODR = (1 << 3);
Oder noch einfacher (und interrupt-sicher) mithilfe des BSRR Registers:
1
GPIOD->BSRRL = (1 << 3);

Aber dazu gibts ja auch ohne Ende Beispiele im Netz und nicht zuletzt 
von ST selber...
Gast #4698108
Lesenswert?

ich hätte eher gedacht es müßte eher in diese Richtung
GPIOD_ODR |= 1 << GPIOD_ODR.B3;

nur passiert hier entweder nichts oder es werden falsche LEDs 
angesteuet.
Da Obige ging gar nicht, falsche Parameter, nicht deklarier und . oder ; 
erwartet etc..also der völlig falsche Ansatz
Gast #4698211
Lesenswert?

Sonja schrieb:
> ich hätte eher gedacht es müßte eher in diese Richtung
> GPIOD_ODR |= 1 << GPIOD_ODR.B3;
Wie soll das funktionieren? Angenommen, GPIOD_ODR existiert tatsächlich 
(richtig wäre GPIOD->ODR). Da du darauf zuweisen kannst, ist das wohl 
ein Integer-Typ. GPIOD_ODR.B3 ist also ungültige Syntax. Selbst wenn 
GPIO_ODR irgendwie gleichzeitig ein struct mit Bitfeldern sein könnte, 
wäre GPIOD_ODR.B3 entweder 1 oder 0. Und dann wäre 1 << GPIOD_ODR.B3 
also entweder 1 oder 2. Das schaltet dann also entweder Pin 1 oder 2 an, 
je nachdem ob Pin 3 gerade aus oder an ist.

Sonja schrieb:
> Da Obige ging gar nicht, falsche Parameter, nicht deklarier und . oder ;
> erwartet etc..also der völlig falsche Ansatz
GPIOD->ODR = (1 << 3);
funktioniert auf jeden Fall mit richtigen Compilern, kA was MicroC da 
macht.

Sonja schrieb:
> aber mit
> GPIOD_ODR.B1 = 1;
> GPIOD_ODR.B2 = 1;
> kann man auch gut leben
Ist aber gefährlich, da dank volatile die beiden Pins nacheinander 
eingeschaltet werden. Je nach Anwendung möchte man aber beide 
gleichzeitig schalten.

Falk B. schrieb:
> Bitnummer ala AVR oder Bitmaske oder gar Bitfelder ala MSP430?
Beim STM32 - Bitmasken.

Marc V. schrieb:
> Was bringt dich dazu ? GPIOD_ODR |= 1 << B3;
>  sollte doch gehen, oder ?
Nein, denn B3 ist bei den STM32-CMSIS-Libraries üblicherweise nicht 
definiert.
Gast #4698412
Lesenswert?

wie wäre es sinnvolle Hilöfe zu leisten als dum rumzuquatschen, Mrc hat 
es vorgemacht und eingie andere hier auch, nur Du tanzt wieder voll aus 
der Reihe und spiegelst mal wieder das Micrkontroller..xxx 
wieder...schade..der Thread war schön sauber beendet bis wieder ein 
Dumschwätzer kam :-(

Ich bedanke mich bei den anderen für die umfangreiche hulde und verfolge 
den Faden hier nicht weiter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren