Mbed library to manage low-power modes on STM32 devices

Committer:
biagiomkr
Date:
Fri Apr 12 17:36:38 2019 +0000
Revision:
0:f37bc13b9bbf
First release of STM32_LowPower Mbed library.; Added source code:; - STM32_LowPower.cpp; - STM32_LowPower.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
biagiomkr 0:f37bc13b9bbf 1 /**
biagiomkr 0:f37bc13b9bbf 2 ******************************************************************************
biagiomkr 0:f37bc13b9bbf 3 * @file STM32_LowPower.h
biagiomkr 0:f37bc13b9bbf 4 * @author Biagio Montaruli, STM32duino team (STMicroelectronics)
biagiomkr 0:f37bc13b9bbf 5 * @version V1.0.0
biagiomkr 0:f37bc13b9bbf 6 * @date 12-April-2019
biagiomkr 0:f37bc13b9bbf 7 * @brief Mbed Library to manage Low Power modes on STM32 boards
biagiomkr 0:f37bc13b9bbf 8 *
biagiomkr 0:f37bc13b9bbf 9 ******************************************************************************
biagiomkr 0:f37bc13b9bbf 10 * @attention
biagiomkr 0:f37bc13b9bbf 11 *
biagiomkr 0:f37bc13b9bbf 12 * <h2><center>&copy; COPYRIGHT(c) 2019 STMicroelectronics</center></h2>
biagiomkr 0:f37bc13b9bbf 13 * <h2><center>&copy; COPYRIGHT(c) 2019 Biagio Montaruli</center></h2>
biagiomkr 0:f37bc13b9bbf 14 *
biagiomkr 0:f37bc13b9bbf 15 * Redistribution and use in source and binary forms, with or without modification,
biagiomkr 0:f37bc13b9bbf 16 * are permitted provided that the following conditions are met:
biagiomkr 0:f37bc13b9bbf 17 * 1. Redistributions of source code must retain the above copyright notice,
biagiomkr 0:f37bc13b9bbf 18 * this list of conditions and the following disclaimer.
biagiomkr 0:f37bc13b9bbf 19 * 2. Redistributions in binary form must reproduce the above copyright notice,
biagiomkr 0:f37bc13b9bbf 20 * this list of conditions and the following disclaimer in the documentation
biagiomkr 0:f37bc13b9bbf 21 * and/or other materials provided with the distribution.
biagiomkr 0:f37bc13b9bbf 22 * 3. Neither the name of STMicroelectronics nor the names of its contributors
biagiomkr 0:f37bc13b9bbf 23 * may be used to endorse or promote products derived from this software
biagiomkr 0:f37bc13b9bbf 24 * without specific prior written permission.
biagiomkr 0:f37bc13b9bbf 25 *
biagiomkr 0:f37bc13b9bbf 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
biagiomkr 0:f37bc13b9bbf 27 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
biagiomkr 0:f37bc13b9bbf 28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
biagiomkr 0:f37bc13b9bbf 29 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
biagiomkr 0:f37bc13b9bbf 30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
biagiomkr 0:f37bc13b9bbf 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
biagiomkr 0:f37bc13b9bbf 32 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
biagiomkr 0:f37bc13b9bbf 33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
biagiomkr 0:f37bc13b9bbf 34 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
biagiomkr 0:f37bc13b9bbf 35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
biagiomkr 0:f37bc13b9bbf 36 *
biagiomkr 0:f37bc13b9bbf 37 ******************************************************************************
biagiomkr 0:f37bc13b9bbf 38 */
biagiomkr 0:f37bc13b9bbf 39
biagiomkr 0:f37bc13b9bbf 40 #ifndef _STM32_LOW_POWER_H_
biagiomkr 0:f37bc13b9bbf 41 #define _STM32_LOW_POWER_H_
biagiomkr 0:f37bc13b9bbf 42
biagiomkr 0:f37bc13b9bbf 43 #include "mbed.h"
biagiomkr 0:f37bc13b9bbf 44
biagiomkr 0:f37bc13b9bbf 45 #define DEBUG 0
biagiomkr 0:f37bc13b9bbf 46
biagiomkr 0:f37bc13b9bbf 47 /* Check if PWR HAL enable in mbed-os/targets/TARGET_STM/TARGET_STM32YZ/device/stm32yzxx_hal_conf.h */
biagiomkr 0:f37bc13b9bbf 48 #ifndef HAL_PWR_MODULE_ENABLED
biagiomkr 0:f37bc13b9bbf 49 #error "PWR configuration is missing. Check flag HAL_PWR_MODULE_ENABLED in " \
biagiomkr 0:f37bc13b9bbf 50 "mbed-os/targets/TARGET_STM/TARGET_STM32YZ/device/stm32yzxx_hal_conf.h"
biagiomkr 0:f37bc13b9bbf 51 #endif
biagiomkr 0:f37bc13b9bbf 52
biagiomkr 0:f37bc13b9bbf 53 typedef void (*voidFuncPtrVoid)(void);
biagiomkr 0:f37bc13b9bbf 54 typedef void (*voidFuncPtr)(void *) ;
biagiomkr 0:f37bc13b9bbf 55
biagiomkr 0:f37bc13b9bbf 56 typedef enum {
biagiomkr 0:f37bc13b9bbf 57 STM32_MAIN_REGULATOR = 0,
biagiomkr 0:f37bc13b9bbf 58 STM32_LOWPOWER_REGULATOR = 1
biagiomkr 0:f37bc13b9bbf 59 } STM32_RegulatorType;
biagiomkr 0:f37bc13b9bbf 60
biagiomkr 0:f37bc13b9bbf 61 typedef enum {
biagiomkr 0:f37bc13b9bbf 62 IT_MODE_RISING = 0,
biagiomkr 0:f37bc13b9bbf 63 IT_MODE_FALLING = 1,
biagiomkr 0:f37bc13b9bbf 64 IT_MODE_RISING_FALLING = 3
biagiomkr 0:f37bc13b9bbf 65 } Interrupt_Mode;
biagiomkr 0:f37bc13b9bbf 66
biagiomkr 0:f37bc13b9bbf 67 class STM32_LowPower
biagiomkr 0:f37bc13b9bbf 68 {
biagiomkr 0:f37bc13b9bbf 69 public:
biagiomkr 0:f37bc13b9bbf 70 STM32_LowPower();
biagiomkr 0:f37bc13b9bbf 71
biagiomkr 0:f37bc13b9bbf 72 void init(void);
biagiomkr 0:f37bc13b9bbf 73
biagiomkr 0:f37bc13b9bbf 74 void sleep(STM32_RegulatorType reg = STM32_MAIN_REGULATOR, uint32_t timer_s = 0);
biagiomkr 0:f37bc13b9bbf 75
biagiomkr 0:f37bc13b9bbf 76 void stop(STM32_RegulatorType reg = STM32_MAIN_REGULATOR, uint32_t timer_s = 0);
biagiomkr 0:f37bc13b9bbf 77
biagiomkr 0:f37bc13b9bbf 78 void standby(uint32_t timer_s = 0);
biagiomkr 0:f37bc13b9bbf 79
biagiomkr 0:f37bc13b9bbf 80 void attachInterruptWakeup(PinName pin, voidFuncPtrVoid callback,
biagiomkr 0:f37bc13b9bbf 81 Interrupt_Mode mode);
biagiomkr 0:f37bc13b9bbf 82 void enableWakeupFromRTC(voidFuncPtr callback, void *data = NULL, uint32_t timer_s = 0);
biagiomkr 0:f37bc13b9bbf 83
biagiomkr 0:f37bc13b9bbf 84 private:
biagiomkr 0:f37bc13b9bbf 85 bool _configured; /* Low Power mode initialization status */
biagiomkr 0:f37bc13b9bbf 86 bool _rtc_wakeup;
biagiomkr 0:f37bc13b9bbf 87 uint32_t _timer;
biagiomkr 0:f37bc13b9bbf 88 InterruptIn *_wakeupPin;
biagiomkr 0:f37bc13b9bbf 89
biagiomkr 0:f37bc13b9bbf 90 void programRtcWakeUp(uint32_t timer_s);
biagiomkr 0:f37bc13b9bbf 91 };
biagiomkr 0:f37bc13b9bbf 92
biagiomkr 0:f37bc13b9bbf 93 extern STM32_LowPower LowPower;
biagiomkr 0:f37bc13b9bbf 94
biagiomkr 0:f37bc13b9bbf 95 #endif // _STM32_LOW_POWER_H_