Moin, wie kann es sein, dass der erste Interrupt funktioniert, der zweite jedoch nicht? volatile byte B5=0,B4=0; // ohne volatile selbes Ergebnis ... pinMode(PB5, INPUT_PULLDOWN); // DATUM attachInterrupt(digitalPinToInterrupt(PB5),B5Pressed,RISING); pinMode(PA15, INPUT_PULLDOWN); // ALARM1 attachInterrupt(digitalPinToInterrupt(PA15),B4Pressed,RISING); ... if(B5==1)dispdatesun(); if(B4==1){Serial.print("AL1:");...} ... void B5Pressed(){ B5=1; } void B4Pressed(){ B4=1; } Ich habe auch schon die Pins B3 und B4 ausprobiert, selbes Ergebnis. Edith hat gerade herausgefunden: an PA6 funktioniert es, aber warum?
:
Bearbeitet durch User
Thomas G. schrieb: > wie kann es sein, dass der erste Interrupt funktioniert, der zweite > jedoch nicht? Vermutlich weil du ein Interrupt Flag nicht löschst nachdem ein Interrupt aufgetreten ist. Ob du das machst oder nicht ist allerdings aus deinen wilden Code-Fragmenten nicht zu erkennen.
@Thomas: Wenn du Code postest, schau dir mal die Infos zu Formatierung an, stehen direkt über dem Eingabefeld für deinen Beitrag.
Thomas G. schrieb: > Wäre mir neu, dass das gemacht werden muss. Gab sogar mal einen Beitrag hier dazu. Es betrifft auf jeden Fall IRQs, die über GPIO ausgelöst werden. Erst den Request löschen, dann im Interrupt weitermachen. Ist aber easy für dich, das einfach mal auszuprobieren. Selbst löschen tut der STM32 den Request nämlich sowieso nicht.
:
Bearbeitet durch User
Thomas G. schrieb: > Wäre mir neu, dass das gemacht werden muss. Könnte ein Ansatz zu Beratungsresistenz sein.
Matthias S. schrieb: > Selbst löschen tut der STM32 den Request nämlich sowieso nicht. Vielleicht erledigt das der Arduino-Wrapper (*) Dazu müsste man sich den Quellcode der Funktion mal angucken. (*) Für mich ist das ein Wrapper; kein eigener c++-Dialekt, was manche gerne behaupten.
Thomas G. schrieb: > wie kann es sein, dass der erste Interrupt funktioniert, der zweite > jedoch nicht? Die Frage ist nicht eindeutig. Meinst du mit "der zweite" dass am zweiten Eingang PA15 (auch PB3 und PB4) a) gar kein Tastendruck erkannt wird oder b) nach dem Reset nur der erste Tastendruck erkannt wird? Handelt es sich um ein Blue-Pill Board? Dann liegt es sich mit hoher Wahrscheinlichkeit an einer schlechten Fälschung. Probleme mit Interrupts wurde da schon öfter berichtet. Wastl schrieb: > Vermutlich weil du ein Interrupt Flag nicht löschst nachdem > ein Interrupt aufgetreten ist. Daran liegt es nicht, darum kümmert sich das Framework.
:
Bearbeitet durch User
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.