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

 
 
> stm32 stop mode, Не могу разбудить микроконтроллер внешним прерыванием
nx6310
сообщение Aug 18 2010, 08:54
Сообщение #1


Участник
*

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



Здраствуйте. Микроконтроллер stm32 перевожу в энергосберегающий режим STOP. А выйти из него в нормальный режим по внешнему прерыванию не получается. В нормальном режиме внешнее прерывание работает. В стоп-режиме не работает. Кто нибудь сталкивался с такой проблемой?. Код программы ниже:
Код
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);   //тактирование периферийных устройств
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_10;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;           // конифгурация вывода РА1 как вход
     GPIO_Init(GPIOA, &GPIO_InitStructure);                                        //

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);    //РА1 источник прерывания линии 1

    EXTI_InitStructure.EXTI_Line = EXTI_Line1;                         // настрока
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;         // внешнего
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;        //прерывания
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;                       //  - прерывание по пер.фронту
    EXTI_Init(&EXTI_InitStructure);

PWR_PVDLevelConfig(PWR_PVDLevel_2V2);  // включение детектора
PWR_PVDCmd(ENABLE);        // напряжения питания

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                    //настойка приоритета
   NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;             // и разрешение
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // канала прерывания EXTI1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           // в контроллере прерываний
    NVIC_Init(&NVIC_InitStructure);

...
...
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); // переход в режим стоп


Подпрограмма обработки прерывания
Код
void EXTI1_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
      {GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_SET);
        if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)
        {
          /* Clear Wake Up flag */
          PWR_ClearFlag(PWR_FLAG_WU);
        }
      print("PRERIVANIE 1");
        /* Clear the Key Button EXTI line pending bit */
        EXTI_ClearITPendingBit(EXTI_Line1);
      }
}


Тут на руском языке инфа есть немного http://www.gaw.ru/html.cgi/txt/doc/micros/...x_arh/index.htm
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MK2
сообщение Jan 18 2013, 16:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535



Столкнулся с проблемой точно наоборот... проц stm32f100c4t6 не хочет засыпать.
конфиг EXTI
Код
   /* Configure EXTI0 line */
   EXTI_InitStructure.EXTI_Line = EXTI_Line10 |  EXTI_Line11 | EXTI_Line12 | EXTI_Line13 | EXTI_Line14 | EXTI_Line15;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);

cами ножки
Код
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  
    /* Configure PB.10 -15 pin as input floating */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
  
   /* Enable AFIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  
   /* Connect EXTI0 Line to PA.00 pin */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource10);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource11);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource13);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource15);

код такой
Код
/****.....................***/
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
    DMA1->IFCR = 0;
      ADC1->CR2 &= ~1;
      DMA1_Channel1->CCR &= ~1;
      DMA1_Channel4->CCR &= ~1;
      DMA1_Channel6->CCR &= ~1;
  /* Request to enter STOP mode with regulator in low power mode*/
     PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
     SYSCLKConfig_STOP();
           ADC1->CR2 |= 1;
      DMA1_Channel1->CCR |= 1;
      DMA1_Channel4->CCR |= 1;
      DMA1_Channel6->CCR |= 1;
.....................................................

дма запрещаю так как в доке написано если идет обмен по шине или пишется флеш то он игнорит вход в STOP MODE
Цитата
If Flash memory programming is ongoing, the Stop mode entry is delayed until the memory
access is finished.
If an access to the APB domain is ongoing, The Stop mode entry is delayed until the APB
access is finished.

все pending flag сборшены перед входом
вообще не понимаю почему он не "устает"
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jan 19 2013, 05:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(MK2 @ Jan 18 2013, 20:31) *
Столкнулся с проблемой точно наоборот... проц stm32f100c4t6 не хочет засыпать.


Что значит "не хочеч засыпать?" Не хочет уменьшать энергопотребление, не хочет останавливать тактирование ядра,.... ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- nx6310   stm32 stop mode   Aug 18 2010, 08:54
- - Basilij   Прошло два года с момента публикации. Удалось ли в...   Aug 23 2012, 04:13
|- - vlad_new   Цитата(Basilij @ Aug 23 2012, 08:13) Прош...   Aug 23 2012, 11:30
- - Basilij   Цитата(vlad_new @ Aug 23 2012, 17:30) Я н...   Aug 23 2012, 12:43
|- - vlad_new   Цитата(Basilij @ Aug 23 2012, 16:43) Спас...   Aug 23 2012, 13:01
|- - MiklPolikov   Цитата(vlad_new @ Aug 23 2012, 17:01) А э...   Aug 29 2012, 00:52
- - Basilij   Прояснили! :смайлик низкий поклон: Вот я этой...   Aug 23 2012, 13:12
- - vlad_new   В режиме Ожидания (Standby) все I/O выводы находят...   Aug 24 2012, 12:52
|- - MiklPolikov   Цитата(vlad_new @ Aug 24 2012, 16:52) В р...   Feb 8 2013, 15:48
|- - maksimp   Цитата(MiklPolikov @ Feb 8 2013, 18:48) К...   Feb 8 2013, 17:56
|- - MiklPolikov   Цитата(maksimp @ Feb 8 2013, 21:56) Вероя...   Feb 8 2013, 18:31
- - nx6310   stop режим не сбрасывает микроконтроллер, т.е. пос...   Oct 19 2012, 09:55
- - vlad_new   Если ADC включен, то не уснет. Для F4 может и ещё ...   Jan 19 2013, 07:39
|- - MK2   Цитата(vlad_new @ Jan 19 2013, 10:39) Есл...   Jan 22 2013, 08:40
|- - digital   Цитата(MK2 @ Jan 22 2013, 12:40) Выяснило...   Jul 3 2014, 15:14
- - MK2   и еще вдогонку... с уартом дело похоже оказалось в...   Jan 22 2013, 10:45
- - bigal   Чтобы отладчик работал со спящими режимами нужно с...   Jul 4 2014, 10:48


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

 


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


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