Проблема WFI (решен)

ARO_72
Пн 12 декабря 2016 г., 14:40
Всем привет,
Я испытываю проблему с ожиданием прерывания (WFI) с использованием Nucleo-L476.
Кажется, что моя доска не входит в wfi или, скорее всего, сразу же выходит WFI.
Чтобы сделать это проще, я использовал эскиз Blink и добавил WFI при изменении состояния светодиода.
Я ожидаю, что тогда STM32 войдет в WFI и останется здесь, пока не будет запущено прерывание (которое никогда не должно приходить в этот основной пример), и поэтому светодиод не должен больше моргать
Что я наблюдаю: светодиод продолжает нормально мигать.
Я использую функцию __wfi () CMSIS.
Есть ли что -нибудь особенное, чтобы заставить WFI работать правильно ?
заранее спасибо.

Rogerclark
Пн 12 декабря 2016 г., 8:28 вечера
Какое ядро ​​вы используете? STMS или Grumpyoldpizza's ядро

ARO_72
Пн 12 декабря 2016 г., 21:31
Nucleo-L476-это плата STM32, основанная на STM32L476RG (версия с низкой мощностью, Cortex-M4)

Rogerclark
Пн 12 декабря 2016 г., 21:49
ARO_72 написал:Nucleo-L476-это плата STM32, основанная на STM32L476RG (версия с низкой мощностью, Cortex-M4)

ARO_72
Пн 12 декабря 2016 г., 22:14
Извините, я не понял вопроса.
Я использую пакет менеджера досок на www.GitHub.com/stm32duino

Mailhouse
Вт 13 декабря 2016 г. 12:27
Выключите часы GPIO, и он не будет просыпаться, чтобы переключать штифт GPIO. Я еще не исследовал, как настроить часы, чтобы остановиться во время резервного/остановки режима.

См. Также AN4746, AN4621

Не забудьте наблюдать за использованием питания, потому что, когда чип находится в режимах резервно или остановки, регулятор напряжения тоже

ARO_72
Вторник 13 декабря 2016 г. 14:10
Не уверен, что поймать смысл. Обычно WFI влияет только на ядро ​​ЦП путем управления часами большую часть своей логики (оставая только обнаружение прерывания).
Я не ожидаю остановить любые периферические часы, чтобы включить wfi.
Я бы предположил, что прерывание (которое можно автоматически настроить в эскизе, так как я не включаю никакого прерывания явно) происходит.
В любом случае, я попробую блоки gpio с часами gpio в регистрации RCC_AHB2EN и сообщу результат.

Даниэфф
Вторник 13 декабря 2016 г. 16:59
Код HAL для `hal_pwr_entersleepmode` Do Do` clear_bit (scb->Scr, ((uint32_t) scb_scr_sleepdeep_msk)); `прямо перед` __wfi (); `, так что, возможно, попробуйте это. (Я никогда не использовал wfi.)

ARO_72
Ср 14 декабря 2016 г. 8:18 утра
Результаты моих тестов с использованием Arduino IDE:
- Test1: Использование HAL для ввода WFI не улучшается
- Test2: часы строкают все блоки GPIO и вызов __wfi () позволяют входить и оставаться в WFI
- Test3: часы строкают все блоки GPIO и вызов HAL_PWR_ENTERSLEEPMODE позволяют вводить и оставаться в WFI
У меня также есть Cubemx и Eclipse IDE, и я сделал аналогичный тест:
- Test4: Хранение часов на блоках GPIO и вызов __wfi () нормально работает

Заключение:
- Как я и ожидал, Test4 подтверждает, что gpios gpios не требуется для входа в WFI
- Test1/2/3 показывает, что по умолчанию базовый эскиз Blink настраивает что -то с GPIO, которое запускает прерывание, мешающее остаться в WFI.
Когда у меня будет немного больше времени, я выясню, какое прерывание включено.
Спасибо за вашу поддержку, которая позволила мне получить функциональный wfi.

Ахулл
Ср 14 декабря 2016 г. 10:20 утра
ARO_72 написал:Результаты моих тестов с использованием Arduino IDE:
- Test1: Использование HAL для ввода WFI не улучшается
- Test2: часы строкают все блоки GPIO и вызов __wfi () позволяют входить и оставаться в WFI
- Test3: часы строкают все блоки GPIO и вызов HAL_PWR_ENTERSLEEPMODE позволяют вводить и оставаться в WFI
У меня также есть Cubemx и Eclipse IDE, и я сделал аналогичный тест:
- Test4: Хранение часов на блоках GPIO и вызов __wfi () нормально работает

Заключение:
- Как я и ожидал, Test4 подтверждает, что gpios gpios не требуется для входа в WFI
- Test1/2/3 показывает, что по умолчанию базовый эскиз Blink настраивает что -то с GPIO, которое запускает прерывание, мешающее остаться в WFI.
Когда у меня будет немного больше времени, я выясню, какое прерывание включено.
Спасибо за вашу поддержку, которая позволила мне получить функциональный wfi.

Grumpyoldpizza
Ср 14 декабря 2016 г., 13:02
Ахулл написал:ARO_72 написал:Результаты моих тестов с использованием Arduino IDE:
- Test1: Использование HAL для ввода WFI не улучшается
- Test2: часы строкают все блоки GPIO и вызов __wfi () позволяют входить и оставаться в WFI
- Test3: часы строкают все блоки GPIO и вызов HAL_PWR_ENTERSLEEPMODE позволяют вводить и оставаться в WFI
У меня также есть Cubemx и Eclipse IDE, и я сделал аналогичный тест:
- Test4: Хранение часов на блоках GPIO и вызов __wfi () нормально работает

Заключение:
- Как я и ожидал, Test4 подтверждает, что gpios gpios не требуется для входа в WFI
- Test1/2/3 показывает, что по умолчанию базовый эскиз Blink настраивает что -то с GPIO, которое запускает прерывание, мешающее остаться в WFI.
Когда у меня будет немного больше времени, я выясню, какое прерывание включено.
Спасибо за вашу поддержку, которая позволила мне получить функциональный wfi.