STM32L152 RTC periodic wakeup
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2013-11-05 05:42 AM
Posted on November 05, 2013 at 14:42
Hi all,
I'm quite new with STM32 and I'm trying to set up the RTC module to raise a periodic wake-up interrupt every second (using LSI).The configuration seems to be working, the interrupt is effectively raised, but the firmware is blocked inside the library function ''RTC_GetITStatus'' and loops inside it.The code in that moment is running with Interrupt ''priviledges'' and the result is that the whole firmware is ''bloked''.This is the code I'm using... can anybody tell-me how to unlock the situation?/**********************************************************************/void RTC_Config(){ NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Enable the PWR clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Allow access to RTC */ PWR_RTCAccessCmd(ENABLE); /* Enable the LSI OSC */ RCC_LSICmd(ENABLE); // The RTC Clock may varies due to LSI frequency dispersion /* Wait till LSI is ready */ while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); /* Select the RTC Clock Source */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); /* Enable the RTC Clock */ RCC_RTCCLKCmd(ENABLE); /* Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro(); /* EXTI configuration *******************************************************/ EXTI_ClearITPendingBit(EXTI_Line20); EXTI_InitStructure.EXTI_Line = EXTI_Line20; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); // Configuring RTC_WakeUp interrupt NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // RTC Wakeup Configuration RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits); // RTC Set WakeUp Counter RTC_SetWakeUpCounter(0); // Enabling RTC_WakeUp interrupt RTC_ITConfig(RTC_IT_WUT, ENABLE); // Disabling Alarm Flags RTC_AlarmCmd(RTC_Alarm_A, DISABLE); RTC_AlarmCmd(RTC_Alarm_B, DISABLE); // RTC Enable the Wakeup Function RTC_WakeUpCmd(ENABLE);}/**********************************************************************/void RTC_WKUP_IRQHandler(void){ if(RTC_GetITStatus(RTC_IT_WUT) != RESET) { RTC_ClearITPendingBit(RTC_IT_WUT); GPIO_ToggleBits(LD4_GPIO_PORT, LD4_PIN); }}/**********************************************************************/Thanks a lot! #stm32l-rtc-autowakeup-timer #interrupts
2 REPLIES 2
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2013-11-05 05:58 AM
Posted on November 05, 2013 at 14:58
void RTC_WKUP_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_WUT);
EXTI_ClearITPendingBit(EXTI_Line20); // And EXTI
GPIO_ToggleBits(LD4_GPIO_PORT, LD4_PIN);
}
}
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Up vote any posts that you find helpful, it shows what's working..
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2013-11-05 06:01 AM
Posted on November 05, 2013 at 15:01
Thank you very mutch clive1!