2017-02-21 20 views

ответ

2

Да, SPI остановлен в режиме STOP.

Если ваш MCU является ведомым SPI, и вы можете позволить себе потерять первый пакет, то есть мастер перезапустится, если он не получит правильный ответ, тогда вы можете перенастроить вывод NSS как активированный EXTI при падении edge, он будет работать даже в режиме STOP.

2

Вы правы, прерывание приема SPI не может использоваться для пробуждения контроллера из режима STOP.

Но любая линия EXTI, сконфигурированная в режиме прерывания, может разбудить микроконтроллер. (Таблица source)

enter image description here

Полное отображение EXTI линии можно найти в справочнике, стр 176. Из GPIOs отображаются в EXTI0 - EXTI15. А остальные используемые линии являются следующие:

  • EXTI линия 17 подключается к событию тревоги RTC
  • EXTI линии 18 подключен к событию внутреннего USB пробуждения
  • EXTI линия 19 соединена с RTC Трамбовщик и Timestamp событие
  • EXTI линии 20 подключены к событию РОК Wakeup (доступно только на STM32F070xB и STM32F030xC устройствах)
  • Exti линии 23 соединен с внутренним событием I2C1 пробуждения

Что вы можете сделать, это настроить внешнее прерывание на выводе GPIO соответствующей линии SPI, которая пробудит контроллер. После этого можно использовать надлежащее прерывание SPI RX. Обратите внимание, что вы потеряете ранние данные в SPI, поскольку у вас будет только прерывание GPIO, а периферийное устройство SPI будет остановлено до пробуждения.