From a8356bcb90bbdf9ffc6f4bb57c171f9b97d82542 Mon Sep 17 00:00:00 2001 From: Vegetto Date: Sun, 24 May 2020 02:44:32 +0200 Subject: [PATCH 1/3] Support sleeping fractions of seconds Depends on STM32RTC 1.0.4 --- library.properties | 2 +- src/STM32LowPower.cpp | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/library.properties b/library.properties index 995a912..b81b62f 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=STM32duino Low Power -version=1.0.3 +version=1.0.4 author=Wi6Labs maintainer=stm32duino sentence=Power save primitives features for STM32 boards diff --git a/src/STM32LowPower.cpp b/src/STM32LowPower.cpp index f205373..fd7ff2e 100644 --- a/src/STM32LowPower.cpp +++ b/src/STM32LowPower.cpp @@ -169,13 +169,14 @@ void STM32LowPower::enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void * /** * @brief Configure the RTC alarm - * @param millis: time of the alarm in milliseconds. At least 1000ms. + * @param millis: time of the alarm in milliseconds. * @param lp_mode: low power mode targeted. * @retval None */ void STM32LowPower::programRtcWakeUp(uint32_t millis, LP_Mode lp_mode) { int epoc; + uint32_t epoc_ms; uint32_t sec; STM32RTC &rtc = STM32RTC::getInstance(); STM32RTC::Source_Clock clkSrc = rtc.getClockSource(); @@ -204,12 +205,17 @@ void STM32LowPower::programRtcWakeUp(uint32_t millis, LP_Mode lp_mode) if (millis > 0) { // Convert millisecond to second sec = millis / 1000; - // Minimum is 1 second - if (sec == 0) { - sec = 1; + millis = millis % 1000; + + epoc = rtc.getEpoch(&epoc_ms); + + //Update epoch_ms - might need to add a second to epoch + epoc_ms += millis; + if (epoc_ms >= 1000) { + sec ++; + epoc_ms -= 1000; } - epoc = rtc.getEpoch(); - rtc.setAlarmEpoch(epoc + sec); + rtc.setAlarmEpoch(epoc + sec, STM32RTC::MATCH_DHHMMSS, epoc_ms); } } From af64eb72c11fb7facf6fc1702b8894b82500181d Mon Sep 17 00:00:00 2001 From: Vegetto Date: Sun, 24 May 2020 02:48:18 +0200 Subject: [PATCH 2/3] Remove limitation to full seconds in delays --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 871c868..b0cf77d 100644 --- a/README.md +++ b/README.md @@ -3,23 +3,23 @@ Arduino library to support STM32 Low Power. ## Requirement * [Arduino_Core_STM32](https://github.com/stm32duino/Arduino_Core_STM32) version >= 1.3.0 - * [STM32RTC](https://github.com/stm32duino/STM32RTC) + * [STM32RTC](https://github.com/stm32duino/STM32RTC) version >= 1.0.4 ## API * **`void begin()`**: configure the Low Power * **`void idle(uint32_t millis)`**: enter in idle mode -**param** millis (optional): number of milliseconds before to exit the mode. At least 1000 ms. The RTC is used in alarm mode to wakeup the chip in millis milliseconds. +**param** millis (optional): number of milliseconds before to exit the mode. The RTC is used in alarm mode to wakeup the chip in millis milliseconds. * **`void sleep(uint32_t millis)`**: enter in sleep mode -**param** millis (optional): number of milliseconds before to exit the mode. At least 1000 ms. The RTC is used in alarm mode to wakeup the chip in millis milliseconds. +**param** millis (optional): number of milliseconds before to exit the mode. he RTC is used in alarm mode to wakeup the chip in millis milliseconds. * **`void deepSleep(uint32_t millis)`**: enter in deepSleep mode -**param** millis (optional): number of milliseconds before to exit the mode. At least 1000 ms. The RTC is used in alarm mode to wakeup the chip in millis milliseconds. +**param** millis (optional): number of milliseconds before to exit the mode. The RTC is used in alarm mode to wakeup the chip in millis milliseconds. * **`void shutdown(uint32_t millis)`**: enter in shutdown mode -**param** millis (optional): number of milliseconds before to exit the mode. At least 1000 ms. The RTC is used in alarm mode to wakeup the board in millis milliseconds. +**param** millis (optional): number of milliseconds before to exit the mode. The RTC is used in alarm mode to wakeup the board in millis milliseconds. * **`void attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode)`**: Enable GPIO pin in interrupt mode. If the pin is a wakeup pin, it is configured as wakeup source (see board documentation). **param** pin: pin number From c5bb81533fc4552d7942882f32fc39e6cfae10b0 Mon Sep 17 00:00:00 2001 From: Vegetto Date: Tue, 26 May 2020 19:34:59 +0200 Subject: [PATCH 3/3] Not change version --- library.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library.properties b/library.properties index b81b62f..995a912 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=STM32duino Low Power -version=1.0.4 +version=1.0.3 author=Wi6Labs maintainer=stm32duino sentence=Power save primitives features for STM32 boards