Forum: Mikrocontroller und Digitale Elektronik STM32 Wakeup STOP1 mit GPIO


von technikus (Gast)


Lesenswert?

Hallo Forum,

ich arbeite an einer IR Fernbedienung mit Batteriespannungsversorgung 
auf Basis eines STM32G0.
Mit Low Power Modes habe ich nie wirklich etwas am Hut gehabt und bin 
nach tagelangem Lesen leicht überfordert.
Als Mode habe ich mir den Stop1 ausgeguckt, weil das Hardwaredesign 
bereits steht und eine vertretbare Batterielebensdauer zu erwarten ist.

Bei Benutzereingabe (Taster, Drehencoder, IR Empfänger zum anlernen) 
soll der Controller seinen Job machen und wieder in den Stop Mode 
wechseln.

Der Stop1 kann nach Recherche mit dem RTC oder durch irgendeinen GPIO 
verlassen werden

https://www.st.com/content/ccc/resource/training/technical/product_training/group0/21/0c/5b/77/0e/aa/48/45/STM32G0-System-Power-control-PWR/files/STM32G0-System-Power-control-PWR.pdf/_jcr_content/translations/en.STM32G0-System-Power-control-PWR.pdf

Lt. HAL_Manual wird der Stop1 aktiviert
1
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

WFI/WFE gibt an, ob per Interrupt oder Event aufgeweckt wird.
Was ein Event ist, habe ich nicht genau rausgefunden...

Soweit, so gut.

Ich möchte den Controller aber durch folgende Eingaben aufwecken:
a) Drehencoder am TIMER GPIO
b) Taster an GPIO
c) TSOP IR Empfänger am GPIO

Wenn ich jetzt per EXT Interrupt wecken möchte, muss ich doch den GPIO 
Mode anpassen?!
1
GPIO_InitTypeDef G; 
2
G.Pin = GPIO_PIN_13;   
3
G.Mode = GPIO_MODE_IT_FALLING;
4
G.Pull = GPIO_NOPULL;   
5
HAL_GPIO_Init(GPIOC, &G);

Jetzt sind z.B. die Encoder GPIO ja als AF konfiguriert
1
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
also nicht als Interrupt Eingänge zu gebrauchen.


Habe ich ein Verständnisproblem???

Wie geht man an so eine Applikation ran?

von Nico W. (nico_w)


Lesenswert?

Du musst deine Pins halt entsprechend umkonfigurieren bevor du den uC in 
den Schlaf versetzt und danach wieder zurücksetzen.

Ggf. hast ja auch noch Pullups verbaut und möchtest dass diese im Sleep 
nicht zusätzlichen Strom verbrauchen, usw.

von technikus (Gast)


Lesenswert?

Danke

Kriegt das Timer Interface dann die Änderung entsprechend mit?

von Nico W. (nico_w)


Lesenswert?

Ich arbeite mit dieser HAL nicht. Normal schaltet man einen Timer erst 
einmal aus, danach werden die Pins umgestellt.


Auf dem Rückweg dann umgedreht. Pins konfigurieren und danach den Timer 
wieder aktivieren.


Wenn du wirklich Low power haben möchtest, solltest du eh deine 
komplette Peripherie dementsprechend einstellen. zB ADC aus, die 
einzelnen Ports alle aus, die nicht benötigt werde, usw.

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