Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103RC с питанием от батареи
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
smk
Нужно в перерывах работы устройства максимально снижать потребление. Для этого попробовал включать режим 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 программа стартует сначала, как после ресета? Спасибо.
nx6310
После пробуждения вроде надо настроить тактирование. в примерах от стм должно это быть.


Код
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);
}
}
smk
Я пошел по другому пути. Использовал режим Standbye с пробуждением от кнопки PA0. Программа какраз стартует с начала, что мне и нужно. Да и потребление там чуток меньше.
smk
В каком документе про это "SCB_SysCtrl ((uint32_t)0xE000ED10)" пишется?
nx6310
Вроде бы есть в описании Cortex™-M3 Technical Reference Manual
smk
Цитата(nx6310 @ Jul 1 2013, 14:38) *
Вроде бы есть в описании Cortex™-M3 Technical Reference Manual

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

Если кому интересно, в файле core_cm3.h есть упоминания, позволяющие выставить бит SLEEPDEEP строкой SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.