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

 
 
> STM32 выход из режима STOP, не срабатывает прерывание
Habr
сообщение Nov 21 2013, 14:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 11-10-10
Пользователь №: 60 067



Доброго времени суток.
Разбираюсь с программированием процессора stm32f205. Есть кнопка подключённая к ножке PA0, необходимо чтобы по нажатию кнопки процессор уходил в режим пониженного энергопотребления а при повторном нажатии возвращался в рабочий режим.
Для этого я :
настраиваю ножку PA0 (MRset_Bit0, MSet_Bit1 макросы установки сброса битов типа #define MSet_Bit0 |=0x01 #define MRset_Bit0 &=~0x01)
Код
RCC->AHB1ENR MSet_Bit0;  // подаём синхронизацию на порты A
RCC->AHB1LPENR MSet_Bit0; // включаем порт А в режиме низкого потребления
GPIOA->MODER MRset_Bit0; // альтернативная функция
GPIOA->MODER MSet_Bit1;
GPIOA->PUPDR MRset_Bit0; // подтяжка к 0
GPIOA->PUPDR MSet_Bit1;
EXTI->IMR MSet_Bit0;      // разрешение  прерывания по 0 ноге
EXTI->RTSR MSet_Bit0;     // прерывание по фронту

включаю прерывание
Код
NVIC_EnableIRQ (EXTI0_IRQn); // разрешаем прерывание от PA0

и собственно сам обработчик
Код
void EXTI0_IRQHandler(void) // прерывание от кнопки включения PA0
{
    long i;
    //***** задержка для исключения дребезга**********************
    //!!!!!!!!!!!!!!!!!!потом переписать!!!!!!!!!!!!!!!!!!!!!!!!!
    for (i=0;i<1000000;i++)
    {
        GPIOA->MODER MRset_Bit0; //задержка для исключения дребезга кнопки
    }
    //**************************************************************
    EXTI->PR MSet_Bit0; // сброс флага прерывания
    if (proc_mode==run) // текущий режим активный
    {
        //***** переход в спящий режим********************
            deinit_for_sleep(); // вырубаем переферию
            SCB->SCR MSet_Bit2; // режим stop
            PWR->CSR MSet_Bit0; //
            proc_mode=stop;
            __WFI();
        //************************************************
    }
    else // текущий режим сон
    {
        proc_mode=run;
        main_init();
    }
}

однако после перехода в спящий режим процессор перестаёт реагировать на прерывания
если закоментировать строчку __WFI(); то реакция на прерывания остаётся перефирия инициализируется/ деинициализируется.
Как же правилно настроить выход из режима Stop.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:37
Рейтинг@Mail.ru


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