STM32F4DiscoveryRTC
(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();
RTC_InitStructure.RTC_HourFormat= RTC_HourFormat_24; //24 hour format
//32768/ (1 + 0x7F) = 32768 /128 = 256Hz,
//256/ (1 + 0xFF) = 1Hz, This is the calender frequecy~
RTC_InitStructure.RTC_SynchPrediv= 0xFF;
RTC_InitStructure.RTC_AsynchPrediv= 0x7F;
if(RTC_Init(&RTC_InitStructure) == ERROR)
printf("RTCinit failed");
else
printf("RTCinit success");
NVIC_Configuration();
RTC_WakeUpCmd(DISABLE); //important
//Configure the RTC WakeUp Clock source: CK_SPRE (1Hz)
RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
RTC_SetWakeUpCounter(0x0);
RTC_WakeUpCmd(ENABLE);
RTC_ClearITPendingBit(RTC_IT_WUT);
RTC_ITConfig(RTC_IT_WUT,ENABLE);
}
中断配置流程见RM009023.5节RTC interrupt
使能唤醒中断初始化序列:
1) 配置并使能EXTI Line22进入中断模式并选择上升沿触发。
2) 在NVIC中配置RTC_WKUP_IRQ
3) 配置RTC来产生RTC唤醒时钟事件
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDefEXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line22);
EXTI_InitStructure.EXTI_Line= EXTI_Line22;
EXTI_InitStructure.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger= EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd= ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPrio
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
STM32F4DiscoveryRT 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
