2025-10-13 11:12 AM
Hello everyone, I have a problem with my STM32L011G4U6, I want to put it in stop mode or in standby mode, but the two modes are not taken into account, only the sleep mode works, I must surely make a mistake but where? here is my function:
void Enter_MCU_Sleep(void) {
HAL_Delay(1000);
HAL_UART_Transmit(&huart2, (uint8_t *)"Dort\r\n", 33, 300);
// Configurer et lancer le timer
__HAL_TIM_SET_COUNTER(&htim2, 0);
HAL_TIM_Base_Start_IT(&htim2); // Timer doit générer une IT de réveil
// Désactiver les périphériques pour réduire la consommation
//HAL_ADC_DeInit(&hadc);
HAL_UART_DeInit(&hlpuart1);
HAL_UART_DeInit(&huart2);
//__HAL_RCC_ADC1_CLK_DISABLE();
__HAL_RCC_LPUART1_CLK_DISABLE();
HAL_NVIC_DisableIRQ(EXTI4_15_IRQn);
HAL_NVIC_DisableIRQ(DMA1_Channel2_3_IRQn);
HAL_NVIC_DisableIRQ(DMA1_Channel4_5_IRQn);
// Désactiver le RTC et l'oscillateur LSE
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc); // Désactiver le wakeup timer
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
__HAL_RCC_RTC_DISABLE(); // Désactiver l'horloge RTC
//__HAL_RCC_USART2_CLK_DISABLE();
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE);
__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE);
// Entrer en STOP mode
HAL_SuspendTick();
//HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI); // ou STOP
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
//HAL_PWR_EnterSTANDBYMode();
HAL_TIM_Base_Stop_IT(&htim2); // Stopper le timer
HAL_ResumeTick();
// ⚡️ Après STOP
SystemClock_Config(); // Rétablir les clocks
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
HAL_NVIC_EnableIRQ(DMA1_Channel4_5_IRQn);
// Réinitialiser les périphériques
MX_GPIO_Init();
// MX_ADC_Init();
MX_LPUART1_UART_Init();
// MX_USART2_UART_Init();
HAL_Delay(3000); // Stabilisation modem
HAL_UART_Transmit(&huart2, (uint8_t *)"Réveil\r\n", 23, 300);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // PA5 à l'état bas
HAL_Delay(2000); // Attendre 1 seconde
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // PA5 à l'état haut
//gps_and_battery_task();
//gestion_sms_etat();
//boucle1();
//check_moduleori_ready();
HAL_Delay(1000);
}