Hallo, gibt es eine HAL Funktion zum einlesen eines kompletten 16Bit Ports ? HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) gibts und toggle bits usw. aber ich will einen kompletten Port einlesen können, statt 8 oder 16 * ReadPin.. Hab ich was übersehen ? ..
Ich denke, Du hast jetzt eine gute Gelegenheit das mysteriöse und viel geschmähte HAL zu erforschen. Schau dir die Definition von HAL_GPIO_ReadPin an, da findest Du den einfachen Registerzugriff: GPIOx->IDR. Der Rest ist HAL Luxus.
pegel schrieb: > Ich denke, Du hast jetzt eine gute Gelegenheit das mysteriöse und viel > geschmähte HAL zu erforschen. Ein Blick ins "Reference Manual" bietet meines Erachtens die besseren Informationen. HAL hat sich danach erledigt.
uint32_t HAL_GPIO_ReadPort(GPIO_TypeDef *GPIOx) { return GPIOx->IDR; }
Das kommt dann dabei heraus, wenn Leute von Anfang an mit Abstraktions-Layern lernen. Sie vergessen, dass man einfache Sachen einfach machen kann. Ich habe gerade einen Knubbel Papier vor mir liegen. Jetzt vereinbare ich mal einen Termin mit der örtlichen Müllabfuhr, dass die hier her kommen und mit den Knubbel vom Tisch holen. Da frage ich mich: Wofür ist eigentlich der Blaue Eimer in der Ecke jedes Bürozimmers und wer macht die leer?
Stefan, ich arbeite und programmiere seit vielen Jahren/Jahrzehnten mit C und Microcontrollern. Nein ich fange nicht mit Abstraction Layer an. Ich untersuche nur die Möglichkeiten und Limits des HAL—Layers von ST. Das der HAL Layer für manche verpönt ist kann ich verstehen, aber wenn man sich solche Technologien nicht anschaut, würden wir immer noch CPUs mit Assembler programmieren und Smartphone Apps würde es nicht geben. Ihre Arroganz ist in diesem Forum fehl am Platz.
Wolfram L. schrieb: > aber wenn > man sich solche Technologien nicht anschaut, würden wir immer noch CPUs > mit Assembler programmieren und Smartphone Apps würde es nicht geben. Ja, das ist wohl so.
1 | #define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ |
2 | #define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ |
3 | #define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ |
4 | #define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ |
5 | #define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ |
6 | #define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ |
7 | #define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ |
8 | #define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ |
9 | #define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ |
10 | #define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ |
11 | #define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ |
12 | #define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ |
13 | #define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ |
14 | #define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ |
15 | #define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ |
16 | #define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ |
17 | #define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */ |
Das letzte #define kann man der ReadPin Funktion geben um alle Pins einzulesen. /edit Code ist copy/paste aus den ST GPIO Headern.
:
Bearbeitet durch User
Wolfram L. schrieb: > Stefan, ich arbeite und programmiere seit vielen Jahren/Jahrzehnten mit > C und Microcontrollern. Dann wundert mich ein wenig, warum Du diese Frage gestellt hast.
Wolfram L. schrieb: > Das der HAL Layer für manche verpönt ist kann ich verstehen, aber wenn > man sich solche Technologien nicht anschaut, würden wir immer noch CPUs > mit Assembler programmieren und Smartphone Apps würde es nicht geben. > Ihre Arroganz ist in diesem Forum fehl am Platz. Naja, den HAL Layer von ST als Technologie zu bezeichnen ist wohl etwas weit hergeholt. Mittlerweile haben die Studenten bei ST schon die 3. Inkarnation dieses Mists verbrochen. Was sich aber nicht geändert hat ist das Referenzmanual wo jedes Register schön beschrieben steht. Und um die komplexeren Hardwareblöcke zu verstehen reicht es auch nicht die HAL-Funktionen mal gesehen zu haben, da ist sowieso Studium des Referenzmanuals angesagt. Oder, wie viele hier mit den einfachsten Fragen aufzuschlagen. Wolfram L. schrieb: > Stefan, ich arbeite und programmiere seit vielen Jahren/Jahrzehnten mit > C und Microcontrollern. Eins von beiden stimmt nicht, deine Ausgangsfrage oder diese Aussage hier. Sollte beides zutreffen, würde ich nicht mehr von Programieren sondern von Kopieren reden. Wolfram L. schrieb: > aber wenn > man sich solche Technologien nicht anschaut, würden wir immer noch CPUs > mit Assembler programmieren und Smartphone Apps würde es nicht geben. Wir brauchen nicht mehr lange warten, dann stimmt die umgekehrte Aussage: Mittlerweile werden selbst einfache Programme nur noch aus unzähligen Libs aus dem Netz zusammen kopiert über die niemand mehr die Kontrolle hat. Hauptsache es geht für den Moment und das schnell. Aber eine wirkliche Stabilität und Sicherheit in die Programme zu kriegen, wird mit jedem Jahr und aufgeblähteren Code schlechter.
> Das letzte #define kann man der ReadPin Funktion geben um alle Pins > einzulesen. Wenn du dir den Code anschaust, merkst du dass das nicht so einfach geht: es wird lediglich GPIO_PIN_SET=1 als returnwert zurückgegeben
HAL-Layer: ---> SPI Interface ---> LCD Display (Anzeige) ---> weisser Schimmel etc.
Simon schrieb: > Wenn du dir den Code anschaust, merkst du dass das nicht so einfach > geht: Und wenn du dir das Datum des letzten Beitrag anschaust, stelltst du fest, dass das Thema seit über einem Jahr niemanden mehr interessiert.
STK500-Besitzer schrieb: > Und wenn du dir das Datum des letzten Beitrag anschaust, stelltst du > fest, dass das Thema seit über einem Jahr niemanden mehr interessiert. Nun ja, ob es jemanden interessiert oder nicht, ist dem Controller ziemlich egal. Er funktioniert halt eben nicht, wenn man es nicht richtig macht. Und das auch in diesem Jahr. Siehe da: Beitrag "STM32, Verstrichene Zeit mittels SysTick ermitteln, wie Overflow/Rollover berücksichtigen?" Ist wieder mal ein grandioses Beispiel für HAL-Programmierer, gelle? 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.