STM32F105 Low Power Modees (Sleep Mode)

OP #2307612
Lesenswert?

Hallo
Hat sich damit schon mal jemand beschäftigt?

ich würde gerne meinen Controller in den Sleep Mode versetzen und bei 
nem Interrupt (CAN-Nachricht) wieder aufwecken.

Super währe, wenn  ich ein Bsp. für die Konfiguration usw. irgendwo 
finden würde, aber g...gle usw. hat mir noch nichts gegeben
danke
Gast #2309886
Lesenswert?

"The Insider’s Guide To The STM32 ARM®Based Microcontroller" sagt:
1
The WFI and WFE instructions are not reachable from the C language, 
2
but compilers for the Thumb-2 instruction set provide intrinsic 
3
macros that can be used inline with standard C commands:
4
__WFI 
5
__WFE

Welchen Compiler verwendes Du?

Grüße
Sven
OP #2316915
Lesenswert?

Hallo
J das habe ich probiert, aber bekomme es nicht so richtig hin..

kurz zur Erklärung...
ich habe in meiner
stm32f10x_it.c
1
else if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)
2
  {
3
  
4
        /* Toggle green LED with 1Hz */
5
    if (ticks < 500)  GPIO_ResetBits(GPIOB, GPIO_Pin_11);
6
    else         GPIO_SetBits(GPIOB, GPIO_Pin_11);
7
    
8
    if (ticks < 1000) ticks++;
9
    else 
10
    {
11
      seconds++;
12
      
13
      ticks = 0;
14
      off ++;
15
    }
16
    
17
    
18
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
19

20
  }

Ich lasse also nur die LED blinken. jetzt möchte ich, wenn kein verkehnr 
mehr auf dem CAn ist den controller via wfi in den sleep schicken. dann 
solte die LED ja auch aufhören zu blinken


Ich habe den int off einfach mal hochzählen lassen und in meiner main 
dies eingefügt. dann sollte der controllier doch nach 10 Sec. in sleep 
gehe oder nicht?
1
if (off>10)
2
__WFI;
OP #2316937
Lesenswert?

du das mit der sache ist gerade nur ein test... und wieso auto???? hehe


ja wfi steht ja dafür, das er durch nen interrupt aufwacht.

und das ist ja nur ein simpler code aufbau... wenn man hier mehr postet, 
wird ja immer alles mögliche gefragt, was aber nicht zum Thema hilft. 
dem wollte ich entgehen


Aber danke Jan(GAST) !!!!!
Gast #2316971
Lesenswert?

Du hattest vor ein paar Wochen mal was zum KFZ-Bordnetz gefragt. 
Zusammen mit CAN deutet das sehr auf Elektronik für das Auto hin. ;-)

Wenn der Controller aus dem Sleep immer durch den Interrupt aufgeweckt 
wird, blinkt die LED aber immer munter weiter. Der Timer zählt ja weiter 
im Sleep. Daher verstehe ich deine Frage nicht wirklich.
OP #2355782
Lesenswert?

Problem aufgetaucht

bei

P. Ostrich schrieb:
1
 PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

geht er in sleep, aber er sollte bei CAN Aktivität wieder aufwachen.... 
zählt anscheinen nicht zu den kriterien um ihn wieder zu erwecken...

Jemand eine Lösungs Idee?

Laut RM0008
Seite 66 verweis auf Table 61: Vector table for other STM32F10xxx 
devices
ist das heir ein aufwachgrund

CAN_RX1 CAN RX1 interrupt  Adresse0x0000_0094
#2355802
Lesenswert?

P. Ostrich schrieb:

> PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
> geht er in sleep

Dem Namen nach gehts so nicht in den Sleep-Mode sondern in den 
Stop-Mode.

> aber er sollte bei CAN Aktivität wieder aufwachen....
> zählt anscheinen nicht zu den kriterien um ihn wieder zu erwecken...

Im Stop-Mode ist die gesamte 1,8V Domain taktlos, folglich dürfte der 
CAN Controller tot sein. Ebenso die meisten anderen internen 
Interrupt-Quellen.

> Jemand eine Lösungs Idee?

Wenn der Sleep-Mode nicht reicht, dann kannst du den CANRX Pin als EXTI 
definieren. Ein externer Interrupt weckt auch aus dem Stop-Mode auf.
OP #2355933
Lesenswert?

A. K. schrieb:
> Dem Namen nach gehts so nicht in den Sleep-Mode sondern in den
> Stop-Mode.

hast du recht ich hab mich nur nach dem WFI gerichtet. aber nach dem 
hier aus der stm3110x_pwr.c
1
/**
2
  * @brief  Enters STOP mode.
3
  * @param  PWR_Regulator: specifies the regulator state in STOP mode.
4
  *   This parameter can be one of the following values:
5
  *     @arg PWR_Regulator_ON: STOP mode with regulator ON
6
  *     @arg PWR_Regulator_LowPower: STOP mode with regulator in low power mode
7
  * @param  PWR_STOPEntry: specifies if STOP mode in entered with WFI or WFE instruction.
8
  *   This parameter can be one of the following values:
9
  *     @arg PWR_STOPEntry_WFI: enter STOP mode with WFI instruction
10
  *     @arg PWR_STOPEntry_WFE: enter STOP mode with WFE instruction
11
  * @retval None
12
  */
13
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)

ist es doch der Stop mode. aber den gibt es eigentlich nicht mit WFI 
oder WFE

siehe Anhang.


Wie komme ich sonst in den Sleep Mode bzw.
kannst du mir hierbei helfen?
A. K. schrieb:
> den CANRX Pin als EXTI
> definieren
Angehängte Dateien:
#2355944
Lesenswert?

P. Ostrich schrieb:

> ist es doch der Stop mode. aber den gibt es eigentlich nicht mit WFI
> oder WFE

Doch, natürlich, du hast in deiner Table das "+ WFI or WFE" übersehen.

Was helfen angeht: Was die StdPeriphLib angeht bist du bei mir an der 
falschen Adresse und die WFI/WFE-Befehle dürften sich im CMSIS finden - 
mehr brauchts für den Sleep-Mode wohl auch nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren