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);
}
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);
安 发表于 2018-4-28 10:46
5秒一次中断用wakeup,下面的代码:
f030 没有你说的那些东西啊。 不好意思,我看的是STM32F0xx_StdPeriph_Lib_V1.5.0的库文件,里面写了有,但是只有072才支持,如果用alarm的话,应该是当前秒+5即可。超过60的%60一下即可。 楼主找到问题没有?我也碰到了同样的问题 安 发表于 2018-4-28 10:46
5秒一次中断用wakeup,下面的代码:
你好,我使用的是STM32F072CBT6,在工程中查询怎么没有RTC_WKUP_IRQn中断,我需要产生一个7分钟的中断的,可以分享一下你的这块详详细的配置代码吗? 冷不丁-357544 发表于 2020-9-2 14:11
你好,我使用的是STM32F072CBT6,在工程中查询怎么没有RTC_WKUP_IRQn中断,我需要产生一个7分钟的中断的 ...
您好,这个中断代码是需要自己写的。可以参考官方的例程。 冷不丁-357544 发表于 2020-8-18 10:55
楼主找到问题没有?我也碰到了同样的问题
你这个问题解决了吗
页:
[1]