Hallo liebe Leute
Leider hänge ich gerade beim Problem das mein Prozessor nicht in den
Sleep-Mode gehen will. Ich habe folgenden Aufbau:
STM32L476rg (Nucleo Board)
SX1272DAS (LoRa Modul)
Auf dem Prozessor läuft ein RTOS mit 4 Tasks. Dazu habe ich aber noch
ein LoRa-Stack (I-CUBE-LRWAN) von ST am Laufen. Funktionell macht das
Ding was es soll aber sobald ich den Proz. in einen Stromsparmodus (am
Liebsten STOP1) versetzen will, klappt dies einfach nicht. Der Task der
den Sleep-Mode aufrufen soll ist wie folgt aufgebaut:
1 | /* SleepTask function */
|
2 | void SleepTask(void const * argument)
|
3 | {
|
4 |
|
5 | /* USER CODE BEGIN 5 */
|
6 | /* Infinite loop */
|
7 | for(;;)
|
8 | {
|
9 | uTaskFlags = xEventGroupWaitBits(xTaskOrderFlags, Sleep_Task, pdTRUE, pdTRUE, portMAX_DELAY);
|
10 | if((uTaskFlags & Sleep_Task) == Sleep_Task){
|
11 |
|
12 | /* Go to stop mode with rtc*/
|
13 | while(ReadyToSleep == 0);
|
14 | ReadyToSleep = 0;
|
15 | PRINTF("Start Sleeping\n\r");
|
16 |
|
17 | /* suspend scheduler*/
|
18 | vTaskSuspendAll();
|
19 |
|
20 | //HAL_NVIC_DisableIRQ(RTC_Alarm_IRQn);
|
21 | //HAL_NVIC_DisableIRQ(RTC_WKUP_IRQn);
|
22 |
|
23 | //HAL_NVIC_ClearPendingIRQ(RTC_Alarm_IRQn);
|
24 | //HAL_NVIC_ClearPendingIRQ(RTC_WKUP_IRQn);
|
25 |
|
26 | /* disables Interrupt requests, interrupts will still be able to wake up the system*/
|
27 | __disable_irq();
|
28 |
|
29 | __HAL_RCC_PWR_CLK_DISABLE();
|
30 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
|
31 |
|
32 | HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
|
33 |
|
34 | /* System sleeps here*/
|
35 |
|
36 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
|
37 | /* on wake up, restore system clock*/
|
38 | HAL_RCC_DeInit();
|
39 | SystemClock_Config();
|
40 |
|
41 | /* check interrupts now*/
|
42 | __enable_irq();
|
43 |
|
44 | /*resume scheduler*/
|
45 | PRINTF("stop sleeping\n\r");
|
46 | xTaskResumeAll();
|
47 |
|
48 | xEventGroupSetBits(xTaskOrderFlags, Sensor_Task);
|
49 | //uTaskFlags = xEventGroupClearBits(xTaskOrderFlags, Sensor_Task | Battery_Task | LoRa_Task | Sleep_Task);
|
50 |
|
51 | }
|
52 | vTaskDelay(100);
|
53 | }
|
54 | /*step to next Task*/
|
Wie ihr sehen könnt habe ich schon diverses versucht mit Interrupts auf
dem NVIC ausschalten usw. jedoch bleibt der Stromverbrauch bei etwa 5mA,
dieser sollte beim STOP2 auf einige uA fallen. Ausserdem habe ich
bemerkt dass der LoRa-Stack die RTC in mässigem Umfang benutzt.
villeicht den mal auschalten?