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

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

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

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

Но второй и следующий циклы включаются сразу после перехода в режим ожидания (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);
Другие вопросы по тегам