Forum: Mikrocontroller und Digitale Elektronik Bits ansprechen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sonja (Gast)


Bewertung
0 lesenswert
nicht 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 :-(
  GPIOD_ODR  = 0x00000055;
    Delay_ms(500);
    GPIOD_ODR |= 1 << GPIOD_ODR.B3;
     //GPIOD_ODR.B5 = 1;
   // DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4);
    delay_ms(1000);

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht 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:
GPIOD->ODR = (1 << 3);
Oder noch einfacher (und interrupt-sicher) mithilfe des BSRR Registers:
GPIOD->BSRRL = (1 << 3);

Aber dazu gibts ja auch ohne Ende Beispiele im Netz und nicht zuletzt 
von ST selber...

von Sonja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
nö, geht beides nicht..

von MaWin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>nö, geht beides nicht..

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

von Sonja (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
aber mit
GPIOD_ODR.B1 = 1;
GPIOD_ODR.B2 = 1;
kann man auch gut leben

von Falk B. (falk)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 ?
 GPIOD_ODR |= 1 << B3;
 sollte doch gehen, oder ?

: Bearbeitet durch User
von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
supi, so funktionierts, danke
 GPIOD_ODR = (1 << B2) | (1 << B7) ;



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

von Bernd K. (prof7bit)


Bewertung
2 lesenswert
nicht 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)


Bewertung
-3 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Bernd hat recht. Deine Reaktion ist unterirdisch.

von asdf (Gast)


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.