реклама на сайте
подробности

 
 
> STM32L151 режим STOP
data_stack
сообщение Feb 16 2016, 14:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 16-10-15
Пользователь №: 88 891



Мозг дымится, прям беда какая то, никак не приручить STOP режим
Есть кнопка 1, на которую нужно однократно нажать и ввести мк в стоп. Будить планирую другой кнопкой.
Код
void EXTI2_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line2) != RESET)
    {      
        NVIC_DisableIRQ(EXTI2_IRQn);        
        stop_enable = 1;
        LED1_TOGGLE();
        EXTI_ClearITPendingBit(EXTI_Line2);        
    }
}


В основном цикле чекаю флаг кнопки. После его срабатывания ухожу в стоп. Но беда в том, что контроллер не засыпает. Детектирую это светодиодом 2.
Код
while(1) {                      
       if(stop_enable == 1)  {
           PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
           stop_enable = 0;
           LED2_TOGGLE();
           NVIC_EnableIRQ(EXTI2_IRQn);      
       }          
}


Если вводить в сон не по кнопке, то все ок, но нужно именно по кнопке. Создалось впечатление что NVIC_DisableIRQ(EXTI2_IRQn) не отрабатывает, проверил отдельно от этого куска кода - работает. По отдельности все работает, сама проблема в том что именно этот кусок не работает, как сделать по другому не понятно.
ЗЫ видел аналогичные темы, выдергивание swd не помогло. Ввожу в стоп не в прерывании.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
data_stack
сообщение Mar 4 2016, 10:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 16-10-15
Пользователь №: 88 891



Поднимаю тему, перетестил много раз - не работает. Упростил задачу, нужно включить контроллер и уйти сразу в standby, если wakeup нажат, то проснуться пересброситься и снова уйти в сон.
Код
int main()
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
    PWR_WakeUpPinCmd(PWR_WakeUpPin_3, ENABLE);
  
    delay_ms(5000);
    PWR_EnterSTANDBYMode();
}


Что выходит на деле: в первый раз все по феньшую - контроллер уходит в сон, жмакаем wakeup и все ломается, контроллер просыпается, тут же засыпает, тут же снова пересбрасывается и так до бесконечности, пока не ресетнешь. Такое впечатление что после того как нажат wakeup нужно сбросить некий бит, что он отработал. Перерыл референс мануал но ничего не нашел похожего
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 4 2016, 10:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(data_stack @ Mar 4 2016, 13:32) *
Упростил задачу

Лихо упростили.
while(1){} не забыли?
Go to the top of the page
 
+Quote Post
data_stack
сообщение Mar 4 2016, 11:46
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 16-10-15
Пользователь №: 88 891



Цитата(adnega @ Mar 4 2016, 11:39) *
Лихо упростили.
while(1){} не забыли?

не забыл, в любом случае после входа в стендбай контроллер перезагружается
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 18:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016