Forum: Mikrocontroller und Digitale Elektronik STM32L4 Standby-Mode


von Vanye R. (vanye_rijan)


Lesenswert?

Moin Leute,

Ich frage mich gerade ob ich zu bloed zum programmieren bin und brauch 
da mal eine externe Bewertung. :-D

Ich habe hier zwei Board mit einem STM32L451 und eines mit einem 
STM32L452 (STM Nucleo)

Ich habe zu testzwecken meinen eigentlichen Code komplett 
runtergestrippt.

Ich schalte alles aus:
1
  led_reset();
2
3
  GPIO_InitStruct.Pin = LL_GPIO_PIN_ALL;
4
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
5
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
6
  GPIO_InitStruct.Alternate =  LL_GPIO_AF_0;
7
8
  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
9
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
10
  LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
11
  LL_GPIO_Init(GPIOD, &GPIO_InitStruct);
12
  LL_GPIO_Init(GPIOE, &GPIO_InitStruct);
13
  LL_GPIO_Init(GPIOH, &GPIO_InitStruct);
14
15
  //Sollte ueberfluessig sein
16
  LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOC); //Disable PortC                              
17
  LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOB); //Disable PortB                              
18
  LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOA); //Disable PortA                              
19
20
  //auch ueberfluessig weil sowieso nicht genutzt
21
  LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_SPI2);
22
  LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_I2C1);
23
  LL_AHB2_GRP1_DisableClock(LL_APB2_GRP1_PERIPH_USART1);
24
25
  LL_APB2_GRP1_DisableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
26
27
  //macht man das nicht ist die Stromaufnahme mit angestecktem
28
  //j-link leicht erhoeht.
29
  LL_DBGMCU_DisableDBGStopMode();
30
  LL_DBGMCU_DisableDBGStandbyMode();
31
32
  __disable_irq();
33
34
  HAL_SuspendTick();
35
36
  PWR->CR1 &=(uint32_t)  ~PWR_CR1_LPMS;
37
  PWR->CR1 |=(uint32_t)  PWR_CR1_LPMS_STANDBY;
38
39
  SCB->SCR |= (uint32_t) SCB_SCR_SLEEPDEEP_Msk;
40
41
  while(1)
42
    {
43
      __ASM volatile ("wfi");
44
    }

Die Controller stehen dann. Aber alle drei Controller ziehen
dann noch 140uA. Also etwa 10x mehr wie man es erwarten sollte.

Hab ich noch irgendwas uebersehen?

Beim Nucleoboard messe ich direkt an JP6, also die Corespannungen.
Auf meinen Testboards ist nichts drauf bis auf einen externen Quarz
und eine LED die mit Widerstand an einem Port haengt, aber hier
abgeschaltet ist.

Vanye

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Welchen Wert erwartest Du denn? Welche Taktquelle, welche Frequenz? 
Vergleich mal mit Tabelle 33 Current consumption in Sleep and Low-power 
sleep modes, Flash ON  im Datenblatt.

von Vanye R. (vanye_rijan)


Lesenswert?

> Welchen Wert erwartest Du denn?

Nun ja, Standby mode. kein Sleep mode!

Datenblatt (Rev4) Seite 106, Tabelle 38, 3.3V Vcc, 25Grad 
Raumtemperatur.
also so in der Gegend von 720nA. Also sagen wir mal 1uA.
Das zehnfache 10uA wuerde mich jetzt auch nicht umbringen,
aber 140uA ist so heftig viel das da noch irgendwas laufen muss
was ich uebersehen habe.

Vanye

von Dieter S. (ds1)


Lesenswert?

Man muss vor dem Zugriff auf das PWR Modul dessen Clock einschalten 
(PWREN in RCC_APB1ENR1). Wenn man das macht kommt man auf die niedrigen 
Werte des Datenblatt.

Mit einem NUCLEO-L476RG ist das reproduzierbar: schaltet man die PWR 
Clock nicht ein sind es ca. 120 µA im Standby, mit PWR Clock zeigt ein 
einfacher Multimeter 0 µA an.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Setze in die While Schleife nach dem Aufwachen ein GPIO Enable und GPIO 
toggle. Vielleicht laesst ja irgendwas die CPU andauernd aufwachen. Oder 
probier mal das ganze als Bare Metal. Vielleicht macht ja HAL nicht dass 
was es soll...

von Vanye R. (vanye_rijan)


Lesenswert?

> Man muss vor dem Zugriff auf das PWR Modul dessen Clock einschalten
> (PWREN in RCC_APB1ENR1).

Super das wars! Du hast das Weltklima gerettet. :-D

> Wenn man das macht kommt man auf die niedrigen
> Werte des Datenblatt.

Jetzt sind 12.8uA. Vielleicht muss ich die Platine nochmal ordentlich 
putzen. :)

Aber erstaunlich. Es geht alles, der ist ja vorher von seinem
normalen Betriebsstrom auch runter gefahren, aber irgendein Detail fehlt
dann noch...

Vanye

von Mehmet K. (mkmk)


Lesenswert?

Vanye R. schrieb:
> Ich frage mich gerade ob ich zu bloed zum programmieren bin

Diese Frage musste ich mir bei einem der STM32 auch stellen. Das liegt 
aber schon soweit zurück, dass ich mich auf die Einzelheiten jetzt nicht 
mehr erinnern kann.
Das Problem habe ich mit einem TPL5111 gelöst und damit für eine 
bestimmte Zeit allem den Strom abgedreht. Der Verbrauch sank dann auf 
ein paar nA ... aber mein Ego hast sich von diesem Schock immer noch 
nicht erholt.

Dass es aber geht, habe ich kürzlich bei einem Webinar von ST gesehen 
(STM32U0).
Die Angaben im Datenblatt sind also durchaus real und die HAL scheint 
auch zu funktionieren.

von J. S. (jojos)


Lesenswert?

Das CubeMX Tool hat auch eine Hilfe um den Strombedarf anzuzeigen, 
abhängig vom Takt und den aktivierten Peripherien. Damit kann man den 
gemessenen Strom auch mal vergleichen.

: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

Vanye R. schrieb:
>
> Jetzt sind 12.8uA. Vielleicht muss ich die Platine nochmal ordentlich
> putzen. :)
>

Ich habe hier bei dem NUCLEO-L476RG zum Experimentieren mit dem Standby 
auch noch folgendes drinnen um den Debug-Modus abzuschalten:

1
CoreDebug->DHCSR = 0xA05F0000;

Ob das den Unterschied ausmacht weiss ich aber nicht.

Mit dem APC Bit in PWR_CR3 könnte man ebenfalls experimentieren, dann 
braucht man die GPIOs nicht gezielt abschalten, zumindest solange 
PWR_PUCRx und PWR_PDCRx auf den Reset-Defaults stehen.

von Vanye R. (vanye_rijan)


Lesenswert?

Hab gerade gesehen es sind sogar nur 4uA!

Das Problem, man ist da in Strombereichen wo man sein Multimeter
entweder eine Stunde warmlaufen lassen muss, oder aber mal
die "Null" Taste druecken sollte.

Vanye

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.