Hallo, wie kann ich mit einer Int8 Variablen am einfachsten 8 Port Pins setzen? Das gleich rückwärts wäre auch gut zu wissen, also 8 Port Pins in eine Variable. Am besten wäre ein kleines Beispiel. Vielen Dank in Voraus Jörg
1 | GPIOx->ODR = PortVal; |
Wobei GPIOx dein Port ist wo du die Bits setzen willst und PortVal das Bitmuster als INT mit 16 Bits ist. Heisst also, du musst deine 8 Bit INT in eine passende mit 16 Bit packen. Wobei ich mir gerade nicht sicher bin ob du weisst, dass der STM32F4 teilweise mehr als 8 Pins pro Port hat.
mr. mo schrieb: > Wobei ich mir gerade nicht sicher bin ob du weisst, dass der STM32F4 > teilweise mehr als 8 Pins pro Port hat. weiß ich, ich habe aber nur 8 bit Variablen die ich Protokoll bedingt übertrage.
Schonmal probiert die 8bit als 16bit zu casten?, also:
1 | uint8_t variable1; |
2 | uint16_t variable2; |
3 | |
4 | variable2 = (uint16_t)variable1; |
Ob es geht bin ich mir spontan gar nicht sicher. Wie man aus einer uint16_t zwei uint8_t macht ja, in der Richtung noch nie probiert.
Ich habe mich damit bis jetzt nicht beschäftigt. Habe mich in das CanOpen Protokoll eingearbeitet und jetzt möchte ich es auf die Hardware umsetzen.
Ich habe darüber noch mal nachgedacht. So werden ja aber alle 16 Portpins verändert. Ich müsste also erst das Register sichern und die Hälfte die nicht verändert werden muss mit in die Variable schreiben???
Jörg B. schrieb: > Ich müsste also erst das Register sichern und die > Hälfte die nicht verändert werden muss mit in die Variable schreiben??? Ja!!!einself Das Portregister beim stm32 ist nunmal 16 Bit breit und wird immer so gelesen+geschrieben.
Oder so etwas wie
1 | GPIOx->BSRR = Variable + ((~Variable & 0x00FF)<<16); |
Ich denke es ist besser eine Funktion zu schreiben. Damit kann ich dann flexibel irgendwelche Portpins nutzen. Ich müsste dann also die einzelnen 8 Bits der Variablen mit If abfragen. Wie selektiert man nun jeweils ein einzelnes Bit? Grüße Jörg
1 | if (key & 0x01) |
2 | |
3 | GPIO_SetBits(OPB0_Port , OPB0_Pin); |
4 | |
5 | else
|
6 | |
7 | GPIO_ResetBits(OPB0_Port , OPB0_Pin); |
8 | |
9 | if (key & 0x02) |
10 | |
11 | GPIO_SetBits(OPB1_Port , OPB1_Pin); |
12 | |
13 | else
|
14 | |
15 | GPIO_ResetBits(OPB1_Port , OPB1_Pin); |
16 | |
17 | ......
|
Hab es schon heraus gefunden
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.