Forum: Mikrocontroller und Digitale Elektronik Bits ansprechen


von Sonja (Gast)


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);

von Dr. Sommer (Gast)


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...

von Sonja (Gast)


Lesenswert?

nö, geht beides nicht..

von MaWin (Gast)


Lesenswert?

>nö, geht beides nicht..

Bitte nicht so präzise Fehlermeldungen. Das könnte verwirren.

von Sonja (Gast)


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

von Sonja (Gast)


Lesenswert?

aber mit
GPIOD_ODR.B1 = 1;
GPIOD_ODR.B2 = 1;
kann man auch gut leben

von Falk B. (falk)


Lesenswert?

Man(n) sollte sich über das Thema Bitmanipulation informieren und es 
erstes prüfen, welches Konzept der Compiler bzw. die Libs benutzen. 
Bitnummer ala AVR oder Bitmaske oder gar Bitfelder ala MSP430?

Beitrag "Re: XC8 compiler - Register schreiben wie bei Atmel"

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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

 Was bringt dich dazu ?
1
 GPIOD_ODR |= 1 << B3;
 sollte doch gehen, oder ?

: Bearbeitet durch User
von Dr. Sommer (Gast)


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.

von Sonja (Gast)


Lesenswert?

supi, so funktionierts, danke
 GPIOD_ODR = (1 << B2) | (1 << B7) ;



     GPIOD->ODR = (1 << 3);
funktioniert nicht
undeclared identifier

von Bernd K. (prof7bit)


Lesenswert?

Wie wärs damit vielleicht irgendwann mal die entsprechenden Kapitel im 
Reference Manual zu lesen und sich parallel dazu auch mal die 
Headerfiles mit den dafrür zuständigen Registerdefinitionen anzuschauen 
anstatt einfach nur wild herumzuprobieren?

von Sonja (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bernd hat recht. Deine Reaktion ist unterirdisch.

von asdf (Gast)


Lesenswert?

Die Art und Weise kommt mir bekannt vor.
Sonja == Tanja? :-)

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.