Witam drogich użytkowników, mam problem z poprawnym zaprogramowaniem trybu oszczędzania energii w STM32. Znalazłem przykładowy kod który mógłbym wykorzystać aczkolwiek
nie wiem jak poprawnie zdefiniować funkcję NVIC wywołaną na samym początku listingu. Gdyby ktoś miał chwilę i mógł mi z tym pomóc byłbym bardzo wdzięczny.
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Dopiero zaczynam
przygodę z STM32 i nie bardzo mogę się w tym wszystkim połapać. Z góry dzięki za pomoc.
Cytuj:
int main(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
DBGMCU_Config(DBGMCU_SLEEP, ENABLE);
RCC_Conf();
NVIC_Conf(); // ?????????????
GPIO_Conf();
// Linia 17 jako zdarzenie (RTC)
EXTI_StructInit(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
PWR_BackupAccessCmd(ENABLE); // Zezwolenie na dostep do Backup domain
BKP_DeInit();
RCC_LSEConfig(RCC_LSE_ON); // Wlacz LSE
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); // Czekaj, az wystartuje
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // LSE zrodlem sygn. zeg. dla RTC
RCC_RTCCLKCmd(ENABLE); // Wlacz taktowanie RTC
RTC_WaitForSynchro(); // Czekaj na synchronizacje RTC z APB
RTC_WaitForLastTask();
RTC_SetPrescaler(32768); // Zliczane beda impulsy co 1s
RTC_WaitForLastTask();
while (1)
{
NVIC_SystemLPConfig(NVIC_LP_SEVONPEND, ENABLE);
// Najwyzszy priorytet
NVIC_SETPRIMASK();
RTC_SetAlarm(RTC_GetCounter()+ 30); // Wybudzenie co 30s
RTC_WaitForLastTask();
GPIO_ResetBits(GPIOC, GPIO_Pin_6);
__WFE(); // Wait for event
GPIO_SetBits(GPIOC, GPIO_Pin_6);
delay_ms(2000);
}
}
Ewentualnie może ktoś doradzi mi jak prościej zaprogramować uC by przechodził w tryb uśpienia i wybudzał się co określony czas by wykonać pomiary?