初级会员

- 积分
- 159
- 金钱
- 159
- 注册时间
- 2014-10-13
- 在线时间
- 18 小时
|
5金钱
我在做RTC闹钟时出现了这样的问题,还求指点一下。
u8 RTC_Init(void)
{
//?ì?é?????????????????±??
u8 temp=0;
if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050) //?????¨???ó±??????÷??????????:?????????????????¨???????à??
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //????PWR??BKP???è?±??
PWR_BackupAccessCmd(ENABLE); //?????ó±??????÷·???
BKP_DeInit(); //????±?·????ò
RCC_LSEConfig(RCC_LSE_ON); //?è???????????§??(LSE),???????è?????§??
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) //?ì?é???¨??RCC±ê?????è????·?,?????????§?????÷
{
temp++;
delay_ms(10);
}
if(temp>=250)return 1;//???????±???§°?,?§????????
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //?è??RTC?±??(RTCCLK),????LSE×÷??RTC?±??
RCC_RTCCLKCmd(ENABLE); //????RTC?±??
RTC_WaitForLastTask(); //????×??ü??????RTC?????÷??????×÷?ê??
RTC_WaitForSynchro(); //????RTC?????÷????
RTC_ITConfig(RTC_IT_SEC, ENABLE); //????RTC??????
RTC_ITConfig(RTC_IT_ALR, ENABLE);//??????????
RTC_WaitForLastTask(); //????×??ü??????RTC?????÷??????×÷?ê??
RTC_EnterConfigMode();/// ???í????
RTC_SetPrescaler(32767); //?è??RTC?¤·???????
RTC_WaitForLastTask(); //????×??ü??????RTC?????÷??????×÷?ê??
RTC_Set(2009,12,2,10,0,55); //?è???±??
RTC_ExitConfigMode(); //????????????
BKP_WriteBackupRegister(BKP_DR1, 0X5050); //?ò???¨???ó±??????÷?????????§???ò????
}
else//???????????±
{
RTC_WaitForSynchro(); //????×??ü??????RTC?????÷??????×÷?ê??
RTC_ITConfig(RTC_IT_SEC, ENABLE); //????RTC??????
RTC_ITConfig(RTC_IT_ALR, ENABLE);//??????????
RTC_WaitForLastTask(); //????×??ü??????RTC?????÷??????×÷?ê??
}
RTC_NVIC_Config();//RCT????·?×é?è??
RTC_Get();//?ü???±??
return 0; //ok
}
/////?????±???è??
u8 RTC_Set_Alr(u8 hour,u8 min,u8 sec)
{
int hour_add;
int min_add;
int sec_add;
RTC_Get();
hour_add=hour-calendar.hour;
min_add=min-calendar.min;
sec_add=sec-calendar.sec;
printf("\r\ncalendar.hour=%d",calendar.hour);
printf("\r\ncalendar.min=%d",calendar.min);
printf("\r\ncalendar.sec=%d",calendar.sec);
printf("\r\nhour_add=%d",hour_add);
printf("\r\nmin_add=%d",min_add);
printf("\r\nsec_add=%d",sec_add);
printf("\r\n%d",RTC_GetCounter());
printf("\r\n%d",3600*hour_add+60*min_add+sec_add+RTC_GetCounter());
// RTC_WaitForLastTask(); //????×??ü??????RTC?????÷??????×÷?ê??
// RTC_WaitForSynchro(); //????RTC?????÷????
// RTC->CRL|=1<<4;
RTC_SetAlarm(3600*hour_add+60*min_add+sec_add+RTC_GetCounter());
return 0;
}
在MAIN函数中设置了闹钟时间RTC_Set_Alr(20,35,10); /////?????±???è??
结果发现死在了加红的函数里
|
|