Forum: Mikrocontroller und Digitale Elektronik Stromsparen mit STM32 µC: Nach __WFI() passiert nichts mehr.


von Sebastian M. (barrel428)


Lesenswert?

Servus,

ich arbeite gerade an einem Akkubetriebenem Gerät. Per Tastenlangdruck 
soll das Gerät daher in ein Stromsparmodus wechseln. Leider funktioniert 
aktuell weder der Standbye, noch der Stop-Modus.
Nachdem er im wait for interrupt Modus ist, wird schlicht kein Interrupt 
mehr geworfen. Ohne diesen Modus werden die Interrupts per 
Tastenbedienung einwandfrei geworfen und das restliche System 
funktioniert wie es soll.

Zur Einordnung ein paar Daten:
-µC: STM32F405RGT
-Interrupt per Tastenbedienung EXTI_Line9 (fallende Flanke)
-NVIC entsprechend konfiguriert
-Takt für entsprechenden Tastenport und Interrupt wird zumindest nicht 
manuell ausgeschaltet
-egal welchen Stromsparmodi ich aufrufe, nach dem __WFI() Aufruf 
passiert nichts mehr

Für Hilfe wäre ich sehr dankbar. Leider habe ich weder in der Doku, noch 
in verschiedenen Themen hier im Forum eine Lösung für das Problem 
gefunden, die funktioniert hat.

Viel Grüße
Sebastian

von Jim M. (turboj)


Lesenswert?

Sebastian M. schrieb:
> -Interrupt per Tastenbedienung EXTI_Line9 (fallende Flanke)

Schau mal nach ob der Flankentrigger nicht ein Taktsignal braucht. Level 
Trigger haben das Problem meistens nicht.

Wenn SLEEPDEEP im SC->SCR gesetzt ist, dann schaltet er viele 
Taktquellen ganz aus. Das gibt mitunter sogar Probleme mit dem Debugger.

Wenn ohne SLEEPDEPP nix mehr passiert: Zeig Deinen Code. Da ist sicher 
ein Fehler drin.

von Patrick W. (patrick_w974)


Lesenswert?

Also was du garnicht erst versuchen musst ist den Standby-Modus zu 
probieren, bei diesem werden (fast) alle Clocks ausgeschalten, sodass 
die EXTI nichtmehr funktionieren.

Im Stop-Modus sollte es eigentlich funktionieren, aber ohne Code.... :)

von Sebastian M. (barrel428)


Lesenswert?

Vielen Dank für eure Antworten.

Jim M. schrieb:
> Schau mal nach ob der Flankentrigger nicht ein Taktsignal braucht. Level
> Trigger haben das Problem meistens nicht.

Leider habe ich im gesamten reference Manual des Chips nichts zu einem 
Level Trigger gefunden. Kann es sein, dass mit dem M4 kein Level Trigger 
benutzbar ist?

Jim M. schrieb:
> Wenn SLEEPDEEP im SC->SCR gesetzt ist

Nur wenn das Bit gesetzt ist passiert nichts. Ansonsten wird der 
Interrupt normal geworfen.

Patrick W. schrieb:
> Also was du garnicht erst versuchen musst ist den Standby-Modus

Habe den Sleep Modus gemeint. Der Standbye Modus ist auch bei meinen 
Anforderungen leicht übertrieben.


Was habe ich jetzt für Möglichkeiten? µC runtertakten? Periodisch in den 
Sleep Modus gehen? Doch irgendwie den Level Trigger einrichten?

von Sebastian M. (barrel428)


Lesenswert?

Ich möchte nicht ungeduldig sein, aber wie würde denn ein Level Trigger 
funktionieren?

von Chris J. (Gast)


Lesenswert?

Ich weiss zwar nicht wie Interrupts geworfen werden und wie weit man die 
werfen kann aber ich habe mal so kleine "Lessons" gemacht für die 
Cortexianer auf meinem kanal: 
https://www.youtube.com/watch?v=Vh0dFu6pYDg

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
Noch kein Account? Hier anmelden.