STM32F4 GPIO port masking

OP #3431308
Lesenswert?

Hallo,
ich möchte mit meinem STM32F4 einen Display ansteuern und benötige dafür 
einen 8Bit parallel Port. Nun hat der STM nur 16bit Ports und ich bin 
mir nicht sicher wie ich die 8 Pins über eine einfache 8bit (0xAB) 
Hexzahl ansteuern kann ohne die anderen Pins zu manipulieren. Habt ihr 
da eine Idee wie ich das anstellen kann?
Das hier ist das beste was mit eingefallen ist:

PortVal = GPIOx->ODR;
GPIOx->ODR = (PortVal & 0x00)| 0xAB;

Geht das immer und sicher? Und gibt es eine bessere Lösung?

Vielen Dank und Grüße,
Florian
Gast #3431317
Lesenswert?

Indem du C lernst. "(PortVal & 0x00)" ist immer 0. Du musst lediglich 
die unteren 8 bits des Port-Registers modifizieren und die oberen gleich 
lassen. z.B. so:
1
uint8_t daten = ... ;
2
GPIOx->ODR = (GPIOx->ODR & (0xFF00)) | daten;
Gast #3431323
Lesenswert?

"PortVal & 0x00"

UND-Verküpfung mit Null, da kannst du das ganze auch gleich ganz 
weglassen und "GPIOx->ODR = 0xAB" Schreiben.-)

Du meinst wohl eher:
GPIOx->ODR = (GPIOx->ODR & 0xFF00) | 0x00AB;
#3431376
Lesenswert?

Steel schrieb:
> Dann funktioniert die obige Anweisung trotzdem nicht. Da das löschen
> priority gegenüber dem Satzen hat geht es nicht in einer Anweisung.

Hältst du ST für bescheuert? "If both BSx and BRx are set, BSx has 
priority."

> Dann darf man aber zum löschen nicht FF verwenden sondern muss dort die
> Bits aussparen, die man setzen will.

Nein.


Apropos: Wer sich schon immer fragte, weshalb die Ports nur 16 Bits 
breit sind: vermutlich genau deshalb, also damit ein solches Register 
möglich ist.
#3431535
Lesenswert?

Pete K. schrieb:
> Ist für mich die, die auch andere verstehen oder man selbst nach 4
> Wochen auch noch.

Für mich ist die Lib-Version auch dann die ineffizienteste. Weil ich
- zum Verständnis des STM32 und fürs Debugging dessen Doku lesen muss,
- für die Nutzung der Lib zusätzlich deren Doku lesen muss,
- trotzdem oft zusätzlich in deren Quellcode schauen muss,
- und wenn ich Pech habe noch Bugs anderer Leute fixen muss.
Bei direktem Zugriff reicht der erste Punkt.

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