Können Sie einen GPIO-Eingang auf STM32F0 simulieren?

Ich probiere verschiedene Dinge mit Eingangspins und benutzerdefinierten Timern auf dem STM32F0 aus. Alle Timer-Funktionen sind alternative Funktionen auf den Pins und daher können Sie die Benutzertaste (PC13 auf dem NUCLEO) nicht verwenden, da sie keinen Timer in ihren alternativen Funktionen hat.

Die Frage ist also: Können Sie (in der Software) einen GPIO-Pin-Eingang "simulieren", der hoch geht? Dies würde das Schreiben von Code erleichtern, da Sie das NUCLEO-Testboard, die Header-Drähte usw. nicht anschließen müssen. Ich habe daran gedacht, Bits im IDR-Register von GPIO manuell umzuschalten, aber es ist schreibgeschützt. Und das BSRR-Register wirkt sich nur auf Ausgänge aus. Gibt es eine Möglichkeit, dies zu erreichen?

ST hätte den User Button auf einen anderen Pin mit mehr Funktionen legen sollen...

Danke!

Willkommen bei EE.SE. Sie müssen sich mit dem Datenblatt für den STM23F0 verheiraten . Genau wie bei Arduino und Raspberry Pi müssen Sie die MPU-Kernfunktionen und alle „Wrapper“-Programme verstehen, die spezifisch für die Manipulation der GPIO-Pins sind. Sie können einen Pin-Status in der Software vortäuschen, indem Sie seinen MPU-Namen verwenden. Wenn keine GPIO-Pins vorhanden sind, ziehen Sie einen Port-Expander in Betracht.
Ich bin verwirrt. Warum braucht ein Pin Ihrer Meinung nach ein Timer-AFIO, um mit einer Taste verwendet zu werden?
@ Sparky256 Ich habe darüber nachgedacht, aber es kann nicht kochen :)
Ja, Sie können den PC13 als GPIO-Pin verwenden. Und Sie können in der Software auch einen Pin simulieren, der hoch oder niedrig geht, indem Sie ihn nach oben oder unten ziehen.
@duskwuff Es ist umgekehrt, der Pin benötigt ein eingehendes Signal, um zB als Timer-Trigger verwendet zu werden. Nehmen wir an, ich möchte einen Timer haben, der bei einer steigenden Flanke an zu zählen beginnt ETR. Wie teste ich es, wenn die Hardware noch nicht da ist?

Antworten (2)

Verwenden Sie die internen Pullup- und Pulldown-Widerstände.

Solange an einen Pin nichts angeschlossen ist und es sich um einen Eingangspin handelt, aktiviert das Setzen der entsprechenden Bits GPIOx_PUPDRPullup- oder Pulldown-Widerstände, die den Pin-Zustand direkt beeinflussen. Es wird nicht nur simuliert, dass der Pin hoch oder niedrig geht, sondern die Spannung wird tatsächlich am Pin angezeigt. Der Strom könnte zu schwach sein, um irgendetwas anderes anzutreiben, aber der Pin-Zustand würde sich ändern. Es sollte auch funktionieren, wenn der Pin eine alternative Eingangsfunktion hat , wie den externen Trigger oder den Capture-Eingang eines Timers.

Zum Beispiel Einstellung PA12( TIM1externer Trigger) auf hoch

GPIOA->PUPDR=(GPIOA->PUPDR & ~(3 << (2 * 12))) | (1 << 2 * 12);

Den gleichen Pin auf Low setzen

GPIOA->PUPDR=(GPIOA->PUPDR & ~(3 << (2 * 12))) | (2 << 2 * 12);

Können Sie einen GPIO-Eingang auf STM32F0 simulieren?

Das ist das falsche Problem zu lösen. Die eigentliche Frage ist:
Können Sie einen GPIO-Eingang simulieren?

Ja, du kannst. Sie können eine andere Ausführungsumgebung erstellen. Führen Sie die Software beispielsweise auf Ihrem PC aus oder erstellen Sie Scheinobjekte und Peripheriegeräte und führen Sie sie auf Ziel aus.

Das ist zum Teil Softwaretest, zum Beispiel mit Test Driven Development.

Praktisch:
Auf jeder Embedded-Plattform werden Register in einer Header-Datei definiert. Für ST sind dies Strukturen, die in definiert und Peripheriegeräten zugeordnet sind stm32f0xx.h. Sie können eine modifizierte Header-Datei für Ihre Testumgebung erstellen, in der diese Strukturen nicht auf Peripheriegeräte, sondern auf Speicher abgebildet werden. Auf diese Weise können Sie alles durch einen Test simulieren, den Sie schreiben können.

Ich denke nicht, dass dies ein gültiger Ansatz ist, um zu testen, wie die Timer-Peripherie auf sich ändernde Eingaben reagiert. Sie müssten auch das gesamte Verhalten der Peripherie simulieren, was ziemlich schnell hässlich wird.
@Arsenal Es simuliert nicht, ob Sie die Hardware testen. Wenn Sie die Timer-Eingänge testen möchten, verwenden Sie den Pin als Ausgang, die alternativen Funktionseingänge sollten dann immer noch funktionieren. Verwenden Sie andernfalls das EGR-Register, ändern Sie die Timer-Polaritätseinstellung oder springen Sie den Eingang extern auf einen anderen Pin.
Ich denke, Ihr Kommentar beantwortet die Frage besser als Ihre Antwort. So verstehe ich zumindest die Frage.
@Jeroen3 verwende den Pin als Ausgang, die alternativen Funktionseingänge sollten immer noch funktionieren, ist das dann irgendwo dokumentiert?
@berendi RM0091 Abbildung 16. Grundstruktur eines E/A-Port-Bits
@ Jeroen3 Das ist die "Grundstruktur", bei der viele Details weggelassen werden. Ich stelle meine Frage anders. TIM3_ETRkann auf PD2oder abgebildet werden PE2. Ich stelle TIM3auf ext. Taktmodus 2 (zum Zählen von ETRImpulsen) und beide Pins als GPIO-Ausgänge, dann beginnen Sie mit dem Umschalten PD2und PE2. Welcher wird gezählt? Wenn ich nun PD2den AF-Modus einstelle und ein echtes Signal anschließe, würde der Ausgang PE2immer noch den Timer beeinflussen oder würde die hypothetische Verbindung vom Schmitt-Trigger PE2zum Timer auf magische Weise verschwinden? Nein, weil es überhaupt nicht da ist, es sei denn, der Stift befindet sich im AF-Modus.
@Jeroen3 Ihr Ansatz würde auf einem STM32F1 mit seinem anderen AF-Mapping-Schema funktionieren, und er ist dort zwar dokumentiert, aber nicht auf einem F0 oder einer anderen STM32-MCU-Serie.