初级会员

- 积分
- 74
- 金钱
- 74
- 注册时间
- 2013-4-9
- 在线时间
- 0 小时
|
为什么只能进入秒中断,,闹钟中断老进不去,,
void RTC_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; //RTC全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占优先级1位,从优先级3位
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //先占优先级0位,从优先级4位
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能该通道中断
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
}
void RTC_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);
/*使能RTC后备寄存器的写*/
  WR_BackupAccessCmd(ENABLE);
/*BKP寄存器全部设为缺省值*/
BKP_DeInit();
/*RCC打开了LSE时钟*/
RCC_LSEConfig(RCC_LSE_ON);
/*等待LSE就绪,一般来说,如果谐振不对,就会死在这里,实际代码请慎重*/
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);
/*RTC使用时钟源LSE*/
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/*RTC的时钟开启*/
RCC_RTCCLKCmd(ENABLE);
/*RTC等待同步*/
RTC_WaitForSynchro();
/*这个代码在RTC中常常出现,类似于等待就绪的含义*/
RTC_WaitForLastTask();
/*使能RTC秒中断*/
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_ITConfig(RTC_IT_ALR, ENABLE);
RTC_WaitForLastTask();
/*RTC预分频,32768HZ,分为一秒一个振荡,RTC period = RTCCLK/RTC_PR = (32.768KHz)/(32767+1)*/
RTC_SetPrescaler(32767);
RTC_WaitForLastTask();
}
//RTC中断服务函数
void RTC_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_SEC) != RESET)//秒钟中断
{
RTC_ClearITPendingBit(RTC_IT_SEC);
}
if(RTC_GetITStatus(RTC_IT_ALR) != RESET)//闹钟中断
{
//闹钟处理
LED0=!LED0;
RTC_ClearITPendingBit(RTC_IT_ALR);
}
} |
|