STM32 просыпается из режима ожидания по RTC

я программирую STM32L051R8 и имею следующую проблему. Я пытаюсь использовать режим ожидания в большинстве случаев, а иногда просыпаюсь от RTC, Это автоматическое пробуждение. Если я работаю без сна-все работает отлично, я каждый раз получаю прерывание RTC, но когда я использую режим ожидания - не делайте.

Если я использую standby, у меня есть хороший первый цикл:

  1. сброс
  2. установить RTC
  3. режим ожидания
  4. ждем прервать
  5. будильник

но второй и следующий циклы просыпаются сразу после входа в режим ожидания (3).

1 ответов


когда микроконтроллер находится в режиме ожидания и прерывание RTC происходит WUF: флаг пробуждения будет установлено оборудование PWR контроль / регистр состояния (стр. 162).

бит 0 WUF: флаг пробуждения

этот бит устанавливается аппаратными средствами и очищается сброс системы или установка бита CWUF в PWR power control Регистрация (PWR_CR)

0: событие пробуждения не произошло

1: пробуждение событие было получил от WKUP PIN или от РТК тревоги (тревога или тревога B), Событие RTC Tamper, событие метки времени RTC или пробуждение RTC).

первоначально это очищается сбросом системы, поэтому ваш первый цикл в порядке. Но после пробуждения из режима ожидания вы должны очистить его вручную, используя бит CWUF в регистре управления PWR. Если вы этого не сделаете, контроллер сразу проснется, поскольку этот бит сигнализирует о произошедшем событии пробуждения.

вы можете доступ к регистру непосредственно, чтобы установить этот бит или с библиотекой HAL можно использовать следующий макрос:

__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);