Ich habe es mitlerweilen geschafft STM32 auf C++ zu konvertieren und bereits erste Beispiele ausprobiert. Nun möchte ich einige verwendet Libraries aus einem Projekt konvertiren. Da es so aussieht das STM32 für einen Pin-Change zwei Variablen benötigt, möchte ich diese gerne auf ein Objekt umbiegen wie z.b. #define AO_Pin GPIO_PIN_1 #define AO_GPIO_Port GPIOB uint8_t thePin[2] ={AO_Pin,AO_GPIO_Port} So das den Funktionen "thePin" weitergeben wird, welche sie ebenfalls weiter an die Schreibfunktion übermittelt. Das sähe dann so aus: classname::init(uint8_t *pin){ writePin(pin); } classname:writePin(uint8_t *pin){ HAL_GPIO_TogglePin(pin[0],pin[1]); } Nur leider weiss ich nicht was denn GPIOB für ein Datentype ist?? Kann mir hier jemand weiterhelfen?
Das ist doch eine Adresse, oder? Also ist es ein Pointer. Wie groß ist das Register, auf das dieser Pointer zeigt? Ist das ein 8- oder 16-Bit-Register? Also ist das entweder ein Pointer auf uint8_t oder uint16_t.
Johnny S. schrieb: > Ich habe es mitlerweilen geschafft STM32 auf C++ zu konvertieren und > bereits erste Beispiele ausprobiert. Nun möchte ich einige verwendet > Libraries aus einem Projekt konvertiren. > Aha ;-) > > #define AO_Pin GPIO_PIN_1 > #define AO_GPIO_Port GPIOB > > Nur leider weiss ich nicht was denn GPIOB für ein Datentype ist?? Kann > mir hier jemand weiterhelfen? GPIOB nennt sich üblicherweise PORTB und ist ein Zeiger auf das uin32_t Register mit dem Offset 0 = MODER (Mode Register); Pin int eine Zahl (enum) 0...15; > classname::init(uint8_t *pin){ > writePin(pin); > } Damit wirst du ohne weitere Parameter nicht weit kommen ... Ein Stm32F port hat 10 32bit Register davon sind 4 zur Konfiguration der pins. Wenn du alternate Functions verwendest sind es noch 2 mehr.
Johnny S. schrieb: > Nur leider weiss ich nicht was denn GPIOB für ein Datentype ist?? Kann > mir hier jemand weiterhelfen? Einfach im Header nachsehen. GPIOB ist vom Typ Zeiger auf GPIO_TypeDef. Wie Hans-Georg schon schreibt, wirst du aber noch ein paar mehr Sachen brauchen. Und ein Array ist da nun ganz ungeeignet. Definiere dir eine Struct.
:
Bearbeitet durch User
Johnny S. schrieb: > Nun möchte ich einige verwendet > Libraries aus einem Projekt konvertiren. > > Da es so aussieht das STM32 für einen Pin-Change zwei Variablen > benötigt, möchte ich diese gerne auf ein Objekt umbiegen wie z.b. > > #define AO_Pin GPIO_PIN_1 > #define AO_GPIO_Port GPIOB > uint8_t thePin[2] ={AO_Pin,AO_GPIO_Port} Dein Ansinnen ist falsch. Ein Port ist keine Variable, sondern ein Gerät mit zwei Interfaces: eines draußen zum Anlöten und eines drinnen mit Registern, die das Bedienen dieses Gerätes ermöglichen. Und das, was man da bedienen kann, ist von Chip zu Chip und Port zu Port und Pin zu Pin nur ähnlich, aber nicht gleich. Also laß dein Ansinnen fallen, Pins mit generalisierten Funktionen beglücken zu wollen. Solche Ideen stammen eher aus AVR-Gefilden, sind aber für die Welt der Cortexe einfach nur unpassend. Mache dir stattdessen projekt- und aufgabenbezogene Lowlevel-Treiber. Etwa so in der Art: void SchalteMotorEin(void); bool isRiegelOffen(void); void LampeDimmen(int prozent); und so weiter. Und innerhalb dieser Treiber greifst du direkt gemäß RefManual auf das am besten geeignete Register des betreffenden Ports zu. Es gibt nämlich je nach Chip eine ganze Reihe von sehr unterschiedlichen Arten, die Ports zu bedienen. W.S.
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.