Skocz do zawartości

STM32F103RB - oszczędzanie energii


chuck9271

Pomocna odpowiedź

Najlepiej jest dokładnie sprawdzić kod który się używa, albo który wygenerowało środowisko.

Jako ciekawostkę zainstalowałem TrueStudio, wersja 8.0.0 - dopiero co pobrana.

Utworzyłem nowy projekt dla Nucleo-103RB i... jednak jest 64MHz...

Fragment pliku startup_stm32f10x_md.s:

/* Call the clock system intitialization function.*/
   bl  SystemInit
/* Call static constructors */
   bl __libc_init_array
/* Call the application's entry point.*/
bl	main
bx	lr

Funkcja SystemInit() wywołuje SetSysClock():

static void SetSysClock(void)
{
 __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

#ifdef PLL_SOURCE_HSI  
 /* At this stage the HSI is already enabled */

 /*  PLL configuration: PLLCLK = HSI/2 * 16 = 64 MHz */
 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL));
 RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLMULL16);

Nie mam jak przetestować, ale wygląda że działa szybciej niż 8MHz. Oczywiście w tym samym środowisku można mieć program który nie uruchamia PLL - to tylko kod wygenerowany z automatu.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ta zworka doprowadza zasilanie do procka, jest ona po to abyś mógł ją rozłączyć i w to miejsce wpiąć mikroamperomierz (uA) lub korzystać z nucleo jako z programatora bez łamania płytki (trzeba zdjąć jeszcze 2 zworki)

W dokumentacji nucleo na stronie st masz opisane co gdzie i po co 😉

Link do komentarza
Share on other sites

Ok działa mi usypianie uC tylko problem z wybudzaniem czasowym, wg. tego kodu powinien się chyba wybudzać razem ze świeceniem diody a raczej się nie budzi bo prąd nie wzrasta. Bez uśpienia procek pobiera 22mA, gdy wrzucę ten kod pobór spada do 11mA (gdy dioda nie świeci) i 13mA (gdy świeci). Wiecie co jest nie tak z kodem?

int main(void)
{
GPIO_InitTypeDef gpio;
TIM_TimeBaseInitTypeDef tim;
NVIC_InitTypeDef nvic;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

GPIO_StructInit(&gpio);
gpio.GPIO_Pin = GPIO_Pin_5;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &gpio);

TIM_TimeBaseStructInit(&tim);
tim.TIM_CounterMode = TIM_CounterMode_Up;
tim.TIM_Prescaler = 64000 - 1;
tim.TIM_Period = 10000 - 1;
TIM_TimeBaseInit(TIM2, &tim);

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, ENABLE);

nvic.NVIC_IRQChannel = TIM2_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority = 0;
nvic.NVIC_IRQChannelSubPriority = 0;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);

SCB->SCR |= SCB_SCR_SEVONPEND;

while (1) {
  __WFI();
}
}
__attribute__((interrupt)) void TIM2_IRQHandler()
{
   if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
   {
       TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

       if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5))
           GPIO_ResetBits(GPIOA, GPIO_Pin_5);
       else
           GPIO_SetBits(GPIOA, GPIO_Pin_5);
   }
}
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.