Skip to main content
Visitor II
June 17, 2024
Solved

how to implement Sleep mode

  • June 17, 2024
  • 1 reply
  • 1426 views

I am using a STM32L431KCU6 microcontroller and reading data from I2C every 90ms. I would like to implement a sleep mode to achieve lower power consumption, I am using timer6 which generates an interrupt every1ms for system run time. I was thinking I can change the timer period to be 90ms prior to put the device on sleep and when TIM6 interrupt happens (wake up the processor) I can change the period to 1ms for normal operation.  is this possible? and how can I achieve this? 

I don't have any experience in using sleep mode but I have been reading similar questions and I've seen WFI coming up very frequently.  Is there any example codes available? or documentation which can assist in writing code? 

 

Thanks in advance and appreciate any help.

 

Kind Regards

Manpreet Singh

    This topic has been closed for replies.
    Best answer by Sarra.S

    Hello @msingh08

    Yes, you can change the timer period to 90ms before putting the device to sleep and then change it back to 1ms upon waking up, the code should look something like this: 

     __HAL_TIM_SET_AUTORELOAD(&htim6, 90000 - 1); // Set Timer6 period to 90ms
     __HAL_TIM_CLEAR_FLAG(&htim6, TIM_FLAG_UPDATE); // Clear update flag
     __HAL_TIM_ENABLE_IT(&htim6, TIM_IT_UPDATE); // Enable update interrupt
     __HAL_TIM_ENABLE(&htim6); // Start Timer6
    
    // Enter sleep mode
    // Wake up and reconfigure Timer6 for normal operation
     __HAL_TIM_SET_AUTORELOAD(&htim6, 1000 - 1); // Set Timer6 period to 1ms

     

    1 reply

    Sarra.SAnswer
    ST Employee
    August 1, 2024

    Hello @msingh08

    Yes, you can change the timer period to 90ms before putting the device to sleep and then change it back to 1ms upon waking up, the code should look something like this: 

     __HAL_TIM_SET_AUTORELOAD(&htim6, 90000 - 1); // Set Timer6 period to 90ms
     __HAL_TIM_CLEAR_FLAG(&htim6, TIM_FLAG_UPDATE); // Clear update flag
     __HAL_TIM_ENABLE_IT(&htim6, TIM_IT_UPDATE); // Enable update interrupt
     __HAL_TIM_ENABLE(&htim6); // Start Timer6
    
    // Enter sleep mode
    // Wake up and reconfigure Timer6 for normal operation
     __HAL_TIM_SET_AUTORELOAD(&htim6, 1000 - 1); // Set Timer6 period to 1ms