STM32 выходит из режима ожидания по RTC
Я программирую STM32L051R8 и имею следующую проблему. Я пытаюсь использовать режим ожидания большую часть времени, а иногда просыпаюсь по RTC, это автоматическое пробуждение. Если я работаю без сна - все работает отлично, я получаю прерывание RTC каждый раз, но когда я использую режим ожидания - нет.
Если я использую режим ожидания, у меня хороший первый цикл:
- сброс
- установить RTC
- войти в режим ожидания
- в ожидании прерывания
- просыпайся
Но второй и следующий циклы включаются сразу после перехода в режим ожидания (3).
1 ответ
Когда микроконтроллер находится в режиме ожидания и происходит прерывание по RTC, аппаратным средством в регистре управления / состояния PWR будет установлен флаг WUF: Wakeup (стр. 162).
Бит 0 WUF: флаг пробуждения
Этот бит устанавливается аппаратно и сбрасывается сбросом системы или установкой бита CWUF в регистре управления мощностью PWR (PWR_CR)
0: Событие пробуждения не произошло
1: Событие пробуждения было получено от контакта WKUP или от тревоги RTC (Авария A или Авария B), события RTC Tamper, события RTC TimeStamp или RTC Wakeup).
Первоначально это очищается сбросом системы, поэтому ваш первый цикл в порядке. Но после выхода из режима ожидания вы должны очистить его вручную, используя бит CWUF в регистре управления PWR. Если вы этого не сделаете, то контроллер сразу же проснется, так как этот бит сигнализирует о произошедшем событии пробуждения.
Вы можете получить доступ к регистру напрямую, чтобы установить этот бит, или с библиотекой HAL можно использовать следующий макрос:
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);