Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32L, STOP MODE, Прерывание TIM11
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
Хочу что бы процессор выходил из STOP по прерыванию TIM11
Настраиваю прерывание от TIM11 , ввожу процессор в STOP MODE. И больше не просыпается, прерывание не срабатывает.
По прерываниям от ног, RTC Alarm просыпается.
А если ввести в SLEEP , то прерывание TIM11 работает как надо.
Тактирование TIM11 разрешено в спящих режимах.
В чём может быть косяк ?

Воожу в STOP так:
Код
SCB->SCR |=SCB_SCR_SLEEPDEEP;  
PWR->CR &=~ PWR_CR_PDDS;
PWR->CSR &=~ PWR_CSR_WUF;
PWR->CR |=  PWR_CR_LPSDSR;  
__dsb(15);
__WFI();
__isb(15);
PWR->CR &= ~PWR_CR_LPSDSR;


Заранее спасибо !
nx6310
По моему stm может из stop mode выйти только по прерываниям от ног и будильника. По обычному таймеру он не сможет выйти из этого режима. Что написано в даташите на данный кристал?
MiklPolikov
Цитата(nx6310 @ Feb 29 2016, 07:47) *
По моему stm может из stop mode выйти только по прерываниям от ног и будильника. По обычному таймеру он не сможет выйти из этого режима. Что написано в даташите на данный кристал?

Any EXTI Line configured in Interrupt mode
esaulenka
Цитата(MiklPolikov @ Feb 29 2016, 08:47) *
Any EXTI Line configured in Interrupt mode

Ну так подключение таймеров (кроме RTC) к EXTI не предусмотрено.
Вот тактирование обычных таймеров на STM32Lxxx от часового кварца - это интересная штука, буду иметь в виду. Но что с этим делать, если они один фиг разбудить контроллер не могут - непонятно...
Сергей Борщ
Цитата(esaulenka @ Feb 29 2016, 10:27) *
Ну так подключение таймеров (кроме RTC) к EXTI не предусмотрено.
Разве что таймером дергать ногой и ловить EXTI от этой ноги.
AlanDrakes
STM32LXXX - Reference manual:
Секция 5.3: Low-power modes
Table 26. Summary of low-power modes
В режиме STOP ВСЁ ядро остановлено. Тактовые генераторы HSE/HSI/MSI выключены.
Соответственно, затактировать таймер нельзя. Ну никак.

10.2.5 External interrupt/event line mapping
EXTI. Прерывания 0-15 - пины портов.
The other EXTI lines are connected as follows:
• EXTI line 16 is connected to the PVD output
• EXTI line 17 is connected to the RTC Alarm event
• EXTI line 18 is connected to the USB Device FS wakeup event
• EXTI line 19 is connected to the RTC Tamper and TimeStamp events
• EXTI line 20 is connected to the RTC Wakeup event
• EXTI line 21 is connected to the Comparator 1 wakeup event
• EXTI line 22 is connected to the Comparator 2 wakeup event
• EXTI line 23 is connected to the channel acquisition interrupt

Таймера, естественно нет.
Можете только настраивать часы на будильник/совпадение времени и просыпаться так.
Больше вариантов нет никаких.
MiklPolikov
Цитата(AlanDrakes @ Feb 29 2016, 18:11) *
Можете только настраивать часы на будильник/совпадение времени и просыпаться так.


Так и делаю.
Но при частых перенастройках RTC он начинает жутко отставать, видимо во время процедуры входа в режим инициализации пропускается такт кварца или что-то в этом роде.
AlanDrakes
Цитата(MiklPolikov @ Mar 1 2016, 00:59) *
Так и делаю.
Но при частых перенастройках RTC он начинает жутко отставать, видимо во время процедуры входа в режим инициализации пропускается такт кварца или что-то в этом роде.

Прошерстил раздел о RTC. Ничего такого нет.
Тактирование часов не переключаете? Вроди бы, весь домен RTC может работать на LSI/LSE генераторе и зависеть только от его стабильности. Соответственно, на LSE может быть несколько завышенная ёмкость на кристалле, либо сам кристалл имеет заниженную частоту (хотя чаще спешат).
Плюс, у часов есть секундное прерывание - не эффективнее ли использовать его? Или нужны более длинные паузы?

Ещё есть таймер пробуждения (RTC_CR_WUTE), который можно настроить:
20.3.4 Periodic auto-wakeup
Код
The•

wakeup timer clock input can be:
RTC clock (RTCCLK) divided by 2, 4, 8, or 16.
When RTCCLK is LSE(32.768kHz), this allows to configure the wakeup interrupt period
from 122 μs to 32 s, with a resolution down to 61μs.
ck_spre (usually 1 Hz internal clock)
When ck_spre frequency is 1Hz, this allows to achieve a wakeup time from 1 s to
around 36 hours with one-second resolution. This large programmable time range is
divided in 2 parts:

from 1s to 18 hours when WUCKSEL [2:1] = 10

and from around 18h to 36h when WUCKSEL[2:1] = 11. In this last case 216 is
added to the 16-bit counter current value.When the initialization sequence is
complete (see Programming the wakeup timer on page 506), the timer starts
counting down.When the wakeup function is enabled, the down-counting remains
active in low power modes. In addition, when it reaches 0, the WUTF flag is set in
the RTC_ISR register, and the wakeup counter is automatically reloaded with its
reload value (RTC_WUTR register value).

То есть, достаточно широкие пределы возможностей автопробуждения. И приличной точностью.
Отпадает необходимость в дополнительных таймерах, которые будут будить контроллер из STOP'а. Кстати, должно сработать и в STANDBY, судя по таблице.
MiklPolikov
Цитата(AlanDrakes @ Mar 1 2016, 13:17) *
Плюс, у часов есть секундное прерывание - не эффективнее ли использовать его? Или нужны более длинные паузы?

Ещё есть таймер пробуждения (RTC_CR_WUTE),


Использовал этот таймер, для его настройки нужно разблокировать регистры RTC , когда это делается непрерывно каждые 1-10 с появляется описанный выше глюк.
Остановился на том, что пробуждение происходит через фиксированные промежутки времени, без перенастройки каждый раз. Кривое решение, но зато работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.