Enter Standby mode then wake up(only restart) by RTC timer

Dependents:   Check_StandBy_os2 Check_StandBy_os5 Check_StandBy_os6

see /users/kenjiArai/notebook/standby-mode-current-consumption-on-nucleo-f446re/

Committer:
kenjiArai
Date:
Sun Jan 17 03:05:33 2021 +0000
Revision:
1:bbc6b5bdd75b
Parent:
0:abaa4fd0c727
added Nucleo-L476RG and DISCO-L475VG-IOT01A

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:abaa4fd0c727 1 /*
kenjiArai 0:abaa4fd0c727 2
kenjiArai 0:abaa4fd0c727 3 Original idea & program
kenjiArai 0:abaa4fd0c727 4 https://os.mbed.com/users/Sissors/code/WakeUp/
kenjiArai 0:abaa4fd0c727 5 by Erik
kenjiArai 0:abaa4fd0c727 6 */
kenjiArai 0:abaa4fd0c727 7
kenjiArai 0:abaa4fd0c727 8 /*
kenjiArai 0:abaa4fd0c727 9 * Modified only for STM CPU
kenjiArai 0:abaa4fd0c727 10 * by Kenji Arai / JH1PJL
kenjiArai 0:abaa4fd0c727 11 *
kenjiArai 0:abaa4fd0c727 12 * http://www7b.biglobe.ne.jp/~kenjia/
kenjiArai 0:abaa4fd0c727 13 * http://mbed.org/users/kenjiArai/
kenjiArai 0:abaa4fd0c727 14 * Created: September 21st, 2017
kenjiArai 0:abaa4fd0c727 15 * Revised: March 12th, 2020
kenjiArai 0:abaa4fd0c727 16 */
kenjiArai 0:abaa4fd0c727 17
kenjiArai 0:abaa4fd0c727 18 #include "mbed.h"
kenjiArai 0:abaa4fd0c727 19
kenjiArai 0:abaa4fd0c727 20 /**
kenjiArai 0:abaa4fd0c727 21 * Class to make wake up a STM CPU from deepsleep using a low-power timer.
kenjiArai 0:abaa4fd0c727 22 *
kenjiArai 0:abaa4fd0c727 23 * @code
kenjiArai 0:abaa4fd0c727 24 *
kenjiArai 0:abaa4fd0c727 25 * #include "mbed.h"
kenjiArai 0:abaa4fd0c727 26 * #include "WakeUp_STM.h"
kenjiArai 0:abaa4fd0c727 27 *
kenjiArai 0:abaa4fd0c727 28 * DigitalOut myled(LED1);
kenjiArai 0:abaa4fd0c727 29 *
kenjiArai 0:abaa4fd0c727 30 * int main() {
kenjiArai 0:abaa4fd0c727 31 * uint32_t loop_count = 1;
kenjiArai 0:abaa4fd0c727 32 * ThisThread::sleep_for(1000);
kenjiArai 0:abaa4fd0c727 33 * while(true) {
kenjiArai 0:abaa4fd0c727 34 * myled = !my_led;
kenjiArai 0:abaa4fd0c727 35 * if (++count > 4) {
kenjiArai 0:abaa4fd0c727 36 * WakeUp::standby_then_reset(30000); // 30sec
kenjiArai 0:abaa4fd0c727 37 * while(true) {;} // never executing this line
kenjiArai 0:abaa4fd0c727 38 * }
kenjiArai 0:abaa4fd0c727 39 * }
kenjiArai 0:abaa4fd0c727 40 * }
kenjiArai 0:abaa4fd0c727 41 * @endcode
kenjiArai 0:abaa4fd0c727 42 */
kenjiArai 0:abaa4fd0c727 43 class WakeUp
kenjiArai 0:abaa4fd0c727 44 {
kenjiArai 0:abaa4fd0c727 45 public:
kenjiArai 0:abaa4fd0c727 46 /**
kenjiArai 0:abaa4fd0c727 47 * Enter Standby mode then Reset
kenjiArai 0:abaa4fd0c727 48 * @param ms required time in milliseconds
kenjiArai 0:abaa4fd0c727 49 */
kenjiArai 0:abaa4fd0c727 50 static void standby_then_reset(uint32_t ms);
kenjiArai 0:abaa4fd0c727 51
kenjiArai 0:abaa4fd0c727 52 private:
kenjiArai 0:abaa4fd0c727 53 static Callback<void()> callback;
kenjiArai 0:abaa4fd0c727 54 static void irq_handler(void);
kenjiArai 0:abaa4fd0c727 55 static void set_ms(uint32_t ms);
kenjiArai 0:abaa4fd0c727 56 static float cycles_per_ms;
kenjiArai 0:abaa4fd0c727 57 };