Mbed library to manage low-power modes on STM32 devices
STM32_LowPower.h@0:f37bc13b9bbf, 2019-04-12 (annotated)
- 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?
User | Revision | Line number | New 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>© COPYRIGHT(c) 2019 STMicroelectronics</center></h2> |
biagiomkr | 0:f37bc13b9bbf | 13 | * <h2><center>© 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_ |