-
Notifications
You must be signed in to change notification settings - Fork 55
Open
Description
Hi! I was working on a project where I need RTC Alarm wakeup and Wakeup pin simultaneously to wake up the STM32F103C8T6 BluePill Development board from SHUTDOWN Mode. Both Wakeup Sources work if I use them alone. But when I use them Together RTC Alarm never works. Only WakeUp Interrupt Works.
Here is my testing Code:
#include <STM32LowPower.h>
#include <STM32RTC.h>
STM32RTC& rtc = STM32RTC::getInstance();
volatile bool rtcWakeFlag = false;
volatile bool IntrptWakeFlag = false;
uint8_t hours = 23;
uint8_t minutes = 59;
uint8_t seconds = 30;
uint32_t subSeconds = 0;
uint8_t weekDay = 5;
uint8_t day = 22;
uint8_t month = 8;
uint8_t year = 25;
void rtcWakeup(void *data) {
rtcWakeFlag = true;
}
void pinWakeup(){
IntrptWakeFlag = true;
// Serial.println("Woke up from sleep via Interrupt!");
}
void setup() {
// Serial.begin(115200);
pinMode(PC13,OUTPUT);
pinMode(PA0,INPUT_PULLUP);
// digitalWrite(PC13,HIGH);
LowPower.begin();
LowPower.attachInterruptWakeup(PA0, pinWakeup, RISING, SHUTDOWN_MODE);
LowPower.enableWakeupFrom(&rtc, rtcWakeup);
digitalWrite(PC13,HIGH);
rtc.setClockSource(STM32RTC::LSE_CLOCK);
rtc.configForLowPower(STM32RTC::LSE_CLOCK);
rtc.begin();
rtc.setTime(hours, minutes, seconds, subSeconds);
rtc.setDate(weekDay, day, month, year);
// // Set RTC Alarm for 30 seconds later
rtc.getTime(&hours, &minutes, &seconds, &subSeconds);
rtc.getDate(&weekDay, &day, &month, &year);
rtc.attachInterrupt(rtcWakeup,rtc.ALARM_A);
rtc.setAlarmTime(0, 0, 0, rtc.ALARM_A);
rtc.setAlarmDay(day+1);
rtc.enableAlarm(rtc.MATCH_DHHMMSS,rtc.ALARM_A);
digitalWrite(PC13,LOW);
delay(500);
digitalWrite(PC13,HIGH);
delay(500);
delay(5000);
// HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
}
void loop() {
// put your main code here, to run repeatedly:
if(rtcWakeFlag){
rtcWakeFlag = false;
rtc.setTime(23, 59, 30, 0);
rtc.setDate(1, 1, 1, 1);
rtc.getTime(&hours, &minutes, &seconds, &subSeconds);
rtc.getDate(&weekDay, &day, &month, &year);
for (int i = 0; i<3; i++){
digitalWrite(PC13,LOW);
delay(500);
digitalWrite(PC13,HIGH);
delay(500);
}
rtc.setAlarmTime(0, 0, 0, rtc.ALARM_A);
rtc.setAlarmDay(day+1);
rtc.enableAlarm(rtc.MATCH_DHHMMSS,rtc.ALARM_A);
}
if(IntrptWakeFlag){
IntrptWakeFlag = false;
digitalWrite(PC13,LOW);
delay(500);
digitalWrite(PC13,HIGH);
delay(500);
}
LowPower.shutdown();
}
Metadata
Metadata
Assignees
Labels
No labels