Skip to content

Commit 3b3dd3f

Browse files
authored
Merge pull request #20 from ABOSTM/NO_PULL_DOWN
attachInterruptWakeup() add parameter to define LowPowerMode
2 parents b3afb49 + 9fd1535 commit 3b3dd3f

File tree

3 files changed

+68
-59
lines changed

3 files changed

+68
-59
lines changed

keywords.txt

+5
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ shutdown KEYWORD2
2121
attachInterruptWakeup KEYWORD2
2222
enableWakeupFrom KEYWORD2
2323

24+
IDLE_MODE LITERAL1
25+
SLEEP_MODE LITERAL1
26+
DEEP_SLEEP_MODE LITERAL1
27+
SHUTDOWN_MODE LITERAL1
28+
2429
#######################################
2530
# Constants (LITERAL1)
2631
#######################################

src/STM32LowPower.cpp

+16-15
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void STM32LowPower::begin(void)
6767
*/
6868
void STM32LowPower::idle(uint32_t millis)
6969
{
70-
if((millis > 0) || _rtc_wakeup) {
70+
if ((millis > 0) || _rtc_wakeup) {
7171
programRtcWakeUp(millis, IDLE_MODE);
7272
}
7373
LowPower_sleep(PWR_MAINREGULATOR_ON);
@@ -81,7 +81,7 @@ void STM32LowPower::idle(uint32_t millis)
8181
*/
8282
void STM32LowPower::sleep(uint32_t millis)
8383
{
84-
if((millis > 0) || _rtc_wakeup) {
84+
if ((millis > 0) || _rtc_wakeup) {
8585
programRtcWakeUp(millis, SLEEP_MODE);
8686
}
8787
LowPower_sleep(PWR_LOWPOWERREGULATOR_ON);
@@ -95,7 +95,7 @@ void STM32LowPower::sleep(uint32_t millis)
9595
*/
9696
void STM32LowPower::deepSleep(uint32_t millis)
9797
{
98-
if((millis > 0) || _rtc_wakeup) {
98+
if ((millis > 0) || _rtc_wakeup) {
9999
programRtcWakeUp(millis, DEEP_SLEEP_MODE);
100100
}
101101
LowPower_stop(_serial);
@@ -109,7 +109,7 @@ void STM32LowPower::deepSleep(uint32_t millis)
109109
*/
110110
void STM32LowPower::shutdown(uint32_t millis)
111111
{
112-
if((millis > 0) || _rtc_wakeup) {
112+
if ((millis > 0) || _rtc_wakeup) {
113113
programRtcWakeUp(millis, SHUTDOWN_MODE);
114114
}
115115
LowPower_shutdown();
@@ -123,13 +123,14 @@ void STM32LowPower::shutdown(uint32_t millis)
123123
* @param mode: pin interrupt mode (HIGH, LOW, RISING, FALLING or CHANGE)
124124
* @retval None
125125
*/
126-
void STM32LowPower::attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode)
126+
void STM32LowPower::attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode, LP_Mode LowPowerMode)
127127
{
128-
// All GPIO for idle (smt32 sleep) and sleep (stm32 stop)
129128
attachInterrupt(pin, callback, mode);
130129

131-
// If Gpio is a Wake up pin activate it for deepSleep (standby stm32) and shutdown
132-
LowPower_EnableWakeUpPin(pin, mode);
130+
if (LowPowerMode == SHUTDOWN_MODE) {
131+
// If Gpio is a Wake up pin activate it for shutdown (standby or shutdown stm32)
132+
LowPower_EnableWakeUpPin(pin, mode);
133+
}
133134
}
134135

135136
/**
@@ -141,7 +142,7 @@ void STM32LowPower::attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback
141142
*/
142143
void STM32LowPower::enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid callback)
143144
{
144-
if(serial != NULL) {
145+
if (serial != NULL) {
145146
_serial = &(serial->_serial);
146147
// Reconfigure serial for low power mode (using HSI as clock source)
147148
serial->configForLowPower();
@@ -159,7 +160,7 @@ void STM32LowPower::enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid cal
159160
*/
160161
void STM32LowPower::enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void *data)
161162
{
162-
if(rtc == NULL) {
163+
if (rtc == NULL) {
163164
rtc = &(STM32RTC::getInstance());
164165
}
165166
_rtc_wakeup = true;
@@ -176,10 +177,10 @@ void STM32LowPower::programRtcWakeUp(uint32_t millis, LP_Mode lp_mode)
176177
{
177178
int epoc;
178179
uint32_t sec;
179-
STM32RTC& rtc = STM32RTC::getInstance();
180+
STM32RTC &rtc = STM32RTC::getInstance();
180181
STM32RTC::Source_Clock clkSrc = rtc.getClockSource();
181182

182-
switch(lp_mode) {
183+
switch (lp_mode) {
183184
case IDLE_MODE:
184185
case SLEEP_MODE:
185186
break;
@@ -200,15 +201,15 @@ void STM32LowPower::programRtcWakeUp(uint32_t millis, LP_Mode lp_mode)
200201
}
201202
rtc.configForLowPower(clkSrc);
202203

203-
if(millis > 0) {
204+
if (millis > 0) {
204205
// Convert millisecond to second
205206
sec = millis / 1000;
206207
// Minimum is 1 second
207-
if (sec == 0){
208+
if (sec == 0) {
208209
sec = 1;
209210
}
210211

211212
epoc = rtc.getEpoch();
212-
rtc.setAlarmEpoch( epoc + sec );
213+
rtc.setAlarmEpoch(epoc + sec);
213214
}
214215
}

src/STM32LowPower.h

+47-44
Original file line numberDiff line numberDiff line change
@@ -49,52 +49,55 @@
4949
#include "STM32RTC.h"
5050
#include "Wire.h"
5151

52-
typedef void (*voidFuncPtrVoid)( void ) ;
52+
enum LP_Mode : uint8_t {
53+
IDLE_MODE,
54+
SLEEP_MODE,
55+
DEEP_SLEEP_MODE,
56+
SHUTDOWN_MODE
57+
};
58+
59+
typedef void (*voidFuncPtrVoid)(void) ;
5360

5461
class STM32LowPower {
55-
public:
56-
STM32LowPower();
57-
58-
void begin(void);
59-
60-
void idle(uint32_t millis = 0);
61-
void idle(int millis) {
62-
idle((uint32_t)millis);
63-
}
64-
65-
void sleep(uint32_t millis = 0);
66-
void sleep(int millis) {
67-
sleep((uint32_t)millis);
68-
}
69-
70-
void deepSleep(uint32_t millis = 0);
71-
void deepSleep(int millis) {
72-
deepSleep((uint32_t)millis);
73-
}
74-
75-
void shutdown(uint32_t millis = 0);
76-
void shutdown(int millis) {
77-
shutdown((uint32_t)millis);
78-
}
79-
80-
void attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode);
81-
82-
void enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid callback);
83-
void enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void *data = NULL);
84-
85-
private:
86-
enum LP_Mode: uint8_t
87-
{
88-
IDLE_MODE,
89-
SLEEP_MODE,
90-
DEEP_SLEEP_MODE,
91-
SHUTDOWN_MODE
92-
};
93-
94-
bool _configured; // Low Power mode initialization status
95-
serial_t *_serial; // Serial for wakeup from deep sleep
96-
bool _rtc_wakeup; // Is RTC wakeup?
97-
void programRtcWakeUp(uint32_t millis, LP_Mode lp_mode);
62+
public:
63+
STM32LowPower();
64+
65+
void begin(void);
66+
67+
void idle(uint32_t millis = 0);
68+
void idle(int millis)
69+
{
70+
idle((uint32_t)millis);
71+
}
72+
73+
void sleep(uint32_t millis = 0);
74+
void sleep(int millis)
75+
{
76+
sleep((uint32_t)millis);
77+
}
78+
79+
void deepSleep(uint32_t millis = 0);
80+
void deepSleep(int millis)
81+
{
82+
deepSleep((uint32_t)millis);
83+
}
84+
85+
void shutdown(uint32_t millis = 0);
86+
void shutdown(int millis)
87+
{
88+
shutdown((uint32_t)millis);
89+
}
90+
91+
void attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode, LP_Mode LowPowerMode = SHUTDOWN_MODE);
92+
93+
void enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid callback);
94+
void enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void *data = NULL);
95+
96+
private:
97+
bool _configured; // Low Power mode initialization status
98+
serial_t *_serial; // Serial for wakeup from deep sleep
99+
bool _rtc_wakeup; // Is RTC wakeup?
100+
void programRtcWakeUp(uint32_t millis, LP_Mode lp_mode);
98101
};
99102

100103
extern STM32LowPower LowPower;

0 commit comments

Comments
 (0)