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

 
 
 
Reply to this topicStart new topic
> STM32F103RC с питанием от батареи, режимы Stop и Standby (среда Keil)
smk
сообщение Jun 30 2013, 14:47
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Нужно в перерывах работы устройства максимально снижать потребление. Для этого попробовал включать режим Stop как наиболее подходящий.

Код
#define SCB_SysCtrl              ((uint32_t)0xE000ED10)
#define SysCtrl_SLEEPDEEP_Set    ((uint32_t)0x00000004)

RCC->APB1ENR |= (1UL<<28);
PWR->CR |= (1UL<<0);
PWR->CR &=~(1UL<<1);

*(__IO uint32_t *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;
__wfi();


При пробуждении кнопкой на EXTI line контроллер просыпается, но тактовая частота оказывается не 72 МГц а 8 МГц, что совсем не приемлемо. Есть ли возможность чтоб программа стартовала сначала или как еще можно поправить эту ситуацию? Далее не нашел в описании SCB_SysCtrl ((uint32_t)0xE000ED10). Это где можно увидеть описание этого регистра? А из Standby программа стартует сначала, как после ресета? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
nx6310
сообщение Jun 30 2013, 18:09
Сообщение #2


Участник
*

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



После пробуждения вроде надо настроить тактирование. в примерах от стм должно это быть.


Код
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
    SYSCLKConfig_STOP();



void SYSCLKConfig_STOP(void)
{ErrorStatus HSEStartUpStatus;
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)
{

  /* Enable PLL */
  RCC_PLLCmd(ENABLE);

  /* Wait till PLL is ready */
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

  /* Select PLL as system clock source */
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  /* Wait till PLL is used as system clock source */
  while(RCC_GetSYSCLKSource() != 0x08);
}
}
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 1 2013, 06:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Я пошел по другому пути. Использовал режим Standbye с пробуждением от кнопки PA0. Программа какраз стартует с начала, что мне и нужно. Да и потребление там чуток меньше.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 1 2013, 08:31
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



В каком документе про это "SCB_SysCtrl ((uint32_t)0xE000ED10)" пишется?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
nx6310
сообщение Jul 1 2013, 11:38
Сообщение #5


Участник
*

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



Вроде бы есть в описании Cortex™-M3 Technical Reference Manual
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 1 2013, 12:21
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(nx6310 @ Jul 1 2013, 14:38) *
Вроде бы есть в описании Cortex™-M3 Technical Reference Manual

Нашел. Спасибо. Осталось теперь в файлах Keil найти упомининие.

Если кому интересно, в файле core_cm3.h есть упоминания, позволяющие выставить бит SLEEPDEEP строкой SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

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

 


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


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