qianrushian 发表于 2018-4-28 10:04:02

stm32f030 rtc闹钟中断我这样配置为什么是一分钟进一次中断?

我想改成5s进一次中断怎么改?求助大神!!!!!!!!!!!!!!!!!!!!!
void RTC_AlarmConfig(void)
{
RTC_TimeTypeDef   RTC_TimeStructure;
RTC_AlarmTypeDefRTC_AlarmStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RTC_DateTimeTypeDef RTC_DateTimeStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);   

RCC_LSICmd(ENABLE);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//ÄÚ²¿
RCC_RTCCLKCmd(ENABLE);
RTC_AlarmCmd(RTC_Alarm_A,DISABLE);//¹Ø±ÕÄÖÖÓA

// RTC_GetDateTime(&RTC_DateTimeStructure);
//
// RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM;
// RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=RTC_DateTimeStructure.Hour;
// RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=RTC_DateTimeStructure.Minute;
//RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=RTC_DateTimeStructure.Second+5;
// if(RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds >=60)RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=0;

///////////////
/* Get current time */
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=RTC_TimeStructure.RTC_Hours;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=RTC_TimeStructure.RTC_Minutes;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=RTC_TimeStructure.RTC_Seconds+5;
if(RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds >=60)RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=0;
/////////////////////////

RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay | RTC_AlarmMask_Minutes |
                                     RTC_AlarmMask_Hours;               
//RTC_AlarmStructure.RTC_AlarmMask =RTC_AlarmMask_Seconds;
//
// RTC_AlarmSubSecondConfig(RTC_Alarm_A,RTC_TimeStructure.RTC_Seconds+5,RTC_AlarmSubSecondMask_SS14_1);
//
RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);

   /* Clear the Alarm A Pending Bit */
RTC_ClearITPendingBit(RTC_IT_ALRA);
//Êä³öÉ趨µÄÄÖÖÓ»½ÐÑʱ¼ä

//RTC_ITConfig(RTC_IT_ALRA, ENABLE);
RTC_ITConfig(RTC_IT_ALRA, ENABLE);
/* Enable the alarm */
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);


   /* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

/* Enable the RTC Alarm Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//PWR_BackupAccessCmd(DISABLE);
}
voidRTC_IRQHandler(void)
{
RTC_TimeTypeDef   RTC_TimeStructure;
   RTC_AlarmTypeDefRTC_AlarmStructure;
RTC_DateTimeTypeDef RTC_DateTimeStructure;

SystemInit();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
   
//   RCC_LSICmd(ENABLE);
// RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//ÄÚ²¿
// RCC_RTCCLKCmd(ENABLE);
LED_Init();
   if (RTC_GetITStatus(RTC_IT_ALRA) != RESET)
   {
   RTC_ClearITPendingBit(RTC_IT_ALRA);

   
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
//   RTC_GetAlarm(RTC_Format_BIN,RTC_IT_ALRA);
//   
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=RTC_TimeStructure.RTC_Hours;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=RTC_TimeStructure.RTC_Minutes;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=RTC_TimeStructure.RTC_Seconds+5;
if(RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds >=60)RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=0;
   
   
   
RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay | RTC_AlarmMask_Minutes |
                                     RTC_AlarmMask_Hours;
//   RTC_AlarmStructure.RTC_AlarmMask =RTC_AlarmMask_Seconds;
//RTC_AlarmSubSecondConfig(RTC_Alarm_A,RTC_TimeStructure.RTC_Seconds+5,RTC_AlarmSubSecondMask_SS14_1);
RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);
   
    RTC_ITConfig(RTC_IT_ALRA, ENABLE);
/* Enable the alarm */
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);      
   }
   EXTI_ClearITPendingBit(EXTI_Line17);   
//PWR_BackupAccessCmd(DISABLE);
}

废鱼 发表于 2018-4-28 10:46:22

5秒一次中断用wakeup,下面的代码:EXTI_InitTypeDef EXTI_InitStructure;

/* EXTI configuration */
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);

/* Enable the RTC Wake Interrupt */
        Std_NVIC_SetPriority(RTC_WKUP_IRQn, 0, 0);

/* Set the RTC Wake */
        RTC_ClearITPendingBit(RTC_IT_WUT);
        RTC_WakeUpCmd(DISABLE);
        RTC_SetWakeUpCounter(5);
        RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);       
       
/* Enable WakeUp interrupt */
        RTC_WakeUpCmd(ENABLE);
        RTC_ITConfig(RTC_IT_WUT,ENABLE);

qianrushian 发表于 2018-4-29 13:35:19

安 发表于 2018-4-28 10:46
5秒一次中断用wakeup,下面的代码:

f030 没有你说的那些东西啊。

废鱼 发表于 2018-5-2 09:15:26

不好意思,我看的是STM32F0xx_StdPeriph_Lib_V1.5.0的库文件,里面写了有,但是只有072才支持,如果用alarm的话,应该是当前秒+5即可。超过60的%60一下即可。

冷不丁-357544 发表于 2020-8-18 10:55:13

楼主找到问题没有?我也碰到了同样的问题

冷不丁-357544 发表于 2020-9-2 14:11:08

安 发表于 2018-4-28 10:46
5秒一次中断用wakeup,下面的代码:

你好,我使用的是STM32F072CBT6,在工程中查询怎么没有RTC_WKUP_IRQn中断,我需要产生一个7分钟的中断的,可以分享一下你的这块详详细的配置代码吗?

废鱼 发表于 2020-9-2 16:51:23

冷不丁-357544 发表于 2020-9-2 14:11
你好,我使用的是STM32F072CBT6,在工程中查询怎么没有RTC_WKUP_IRQn中断,我需要产生一个7分钟的中断的 ...
您好,这个中断代码是需要自己写的。可以参考官方的例程。

万飞 发表于 2020-11-21 11:01:35

冷不丁-357544 发表于 2020-8-18 10:55
楼主找到问题没有?我也碰到了同样的问题

你这个问题解决了吗
页: [1]
查看完整版本: stm32f030 rtc闹钟中断我这样配置为什么是一分钟进一次中断?