Как определить guish, какое событие вызвало выход mcu из режима ожидания / спящего режима - PullRequest
1 голос
/ 30 января 2020

Мой конфиг: STM32F407VGT, то есть STM32CubeIDE.

Я перевел MCU в режим ожидания, и существует два способа выхода MCU из режима ожидания. Первый способ - подключить вывод PA0 с напряжением 3,3 В, а второй - дождаться, пока таймер RT C подсчитает указанное значение. Оба способа работают нормально.

Теперь мой вопрос: как я могу различить guish событий? Я нахожу это в спецификации

Бит 8 EWUP: Включить вывод WKUP

Этот бит устанавливается и сбрасывается программным обеспечением.

0: вывод WKUP используется для общих целей Цель ввода / вывода. Событие на выводе WKUP не выводит устройство из режима ожидания. 1: вывод WKUP используется для выхода из режима ожидания и принудительного включения конфигурации входа вниз (передний фронт на выводе WKUP выводит систему из режима ожидания). Примечание: этот бит сбрасывается сбросом системы.

С этим кодом я попытался придумать идею

  if(PWR_CSR_EWUP == 0x00000100) // PA0 is used to leave standby mode
  {
      HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
      HAL_Delay(2500);
  }
  else  // mcu leave standby mode because RTC timer count desired value
  {
      HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
      HAL_Delay(2500);
  }
  Enter_StandbyMode();

По какой-то причине я всегда получал, что PWR_CSR_EWUP не является ' t равно 0x00000100, даже если я выхожу из режима ожидания, подключив PA0 к 3,3 В. Таким образом, вывод заключается в том, что я всегда получаю его в другом состоянии (зеленый светодиод (PD14) всегда включен после того, как mcu покинул режим ожидания).

1 Ответ

2 голосов
/ 08 апреля 2020

Это выглядит так, как будто вам нужно исправить две вещи:

  • вы должны прочитать регистр PWR_CSR , а не битовую маску PWR_CSR_EWUP

  • вы не должны проверять на равенство (поскольку 32-битный регистр содержит еще 6 битов, которые указывают на другие вещи), но замаскируйте нужный бит и проверьте результат: ((PWR_CSR & PWR_CSR_EWUP) == PWR_CSR_EWUP)

Конечно, вы также можете проверить библиотеку STM32CubeF4 HAL на функцию, которая доставляет нужную вам информацию. Когда вы посмотрите на его реализацию, вы должны найти что-то вроде этого (но я признаю, что я не проверял ...).

...