Easyelectronics.ru

Электроника для всех
Текущее время: 23 июл 2018, 22:19

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: L151K4 зависает в LPR
СообщениеДобавлено: 28 янв 2017, 19:12 
Только пришел

Зарегистрирован: 28 май 2012, 08:17
Сообщения: 11
MK L151K4

хотел попробовать включить LPR режим как в примере http://we.easyelectronics.ru/STM8/low-power-run-esche-odin-rezhim-energosberezheniya.html
пример проверил на STM8L Discovery, все работает

переделал на свой МК
1) Отключить всю неиспользуемую периферию
2) Отключить все прерывания
3) Перейти в RAM
4) Переключиться на LSI\LSE (внутренний низкоскоростной генератор/внешний часовой кварц)
5) Отключить HSI и HSE (высокоскоростные тактовые генераторы)
6) Отключить питание флеш и EEPROM памяти
7) Переключить внутренний стабилизатор напряжения в низкопотребляющий режим

на 7 пункте контроллер виснет намертво, если его убрать, то нормально все работает и просыпается
где могуть быть камни???

Код:
void Power_OFF(void) {  //LPR mode
   LCD_OFF();//выключение OLED
   CLK_PeripheralClockConfig (CLK_Peripheral_I2C1,DISABLE);// i2c disable
   CLK_PeripheralClockConfig (CLK_Peripheral_TIM2, DISABLE);// tim2 disable
   CLK_PeripheralClockConfig (CLK_Peripheral_TIM4, DISABLE);// tim4 disable
   GPIO_DeInit(GPIOA);
   GPIO_DeInit(GPIOB);
   GPIO_DeInit(GPIOC);
   GPIO_DeInit(GPIOD);
   
      //Переключаем все неиспользуемые пины на выход:
   GPIOA->DDR = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
   GPIOB->DDR = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
   GPIOC->DDR = GPIO_Pin_2 | GPIO_Pin_4;
   
   disableInterrupts();

   
   CLK->CKDIVR = 0x6; //предделитель
   CLK->SWCR |= CLK_SWCR_SWEN; //Начинаем переключение 
   CLK->SWR = 0x2; //Переключаемся на LSI
   while ((CLK->SWCR & CLK_SWCR_SWBSY) != 0); //Ждем, пока переключение завершится
   /** С этого момента МК работает от 38кГц LSI генератора. **/
   CLK->ICKCR &= ~CLK_ICKCR_HSION; //Отключаем HSI

   Power_ON();
   }

   void Power_ON(void) IN_RAM{
      
   GPIO_Init (KEY_ESC_PORT, KEY_ESC_PIN, GPIO_Mode_In_FL_No_IT);
   
FLASH->CR1 |= FLASH_CR1_EEPM; //Отключаем флешку
  /** Теперь флеш отключена и вызывать процедуры оттуда ни в коем случае нельзя - иначе адъ и погибель **/

CLK->REGCSR |= CLK_REGCSR_REGOFF; //Отключаем основной стабилизатор питания..


while (GPIO_ReadInputDataBit(KEY_ESC_PORT, KEY_ESC_PIN)); // выход из режима сна по нажатию кнопки
   
CLK->REGCSR &= ~CLK_REGCSR_REGOFF; //Включаем основной стабилизатор питания..
while ((CLK->REGCSR && CLK_REGCSR_REGREADY)==0); //Ждем, пока он запустится

   FLASH_PowerRunModeConfig (FLASH_Power_On);
   while ((CLK->REGCSR && CLK_REGCSR_EEREADY)==0); //Ждем, пока она будет готова
   IWDG_Enable();
  while (1);    // Wait until reset occurs from IWDG
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB