打印
[STM32L1]

RTC闹钟的中断

[复制链接]
1472|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yinxiangh|  楼主 | 2022-10-16 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有关RTC闹钟的中断,就是要求每一个小时整点产生一次RTC闹钟中断,前几个小时正常,可后面就不产生RTC中断,各位指点下.

使用特权

评论回复
沙发
jlyuan| | 2022-10-16 14:50 | 只看该作者
肯定是处理中断处理的不对了。

使用特权

评论回复
板凳
pengf| | 2022-10-16 14:52 | 只看该作者

你这样每次中断后,你重新初始化一次这个配置。

使用特权

评论回复
地板
liliang9554| | 2022-10-16 14:54 | 只看该作者
楼上好建议,毕竟中断次数太少,每次中断处理结束后再执行一次初始化还是可以的。防止配置失效。

使用特权

评论回复
5
yinxiangh|  楼主 | 2022-10-16 14:57 | 只看该作者
给你看下,void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;

        /* Set the Vector Table base location at 0x08000000 */
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

        /* 2 bit for pre-emption priority, 2 bits for subpriority */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        //------RTC闹钟-------------------------------------------------------
        NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        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);
        
        // 键盘
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       //蓝牙
        NVIC_InitStructure.NVIC_IRQChannel = BLE_INT_EXTI_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        //恢复出厂按键
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

#if WATCHDOG_ENABLE
        NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
#endif
        
        //------TIM6-------------------------------------------------------
        NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        #if LOCK_WITH_FINGERPRINT
        // 指纹
        NVIC_InitStructure.NVIC_IRQChannel = FP_MODULE_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       #endif

        //------TIM4读卡-------------------------------------------------------
        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        //------TIM3-------------------------------------------------------
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        // console串口
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 9;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 11;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 12;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);void RTC_Alarm_IRQHandler(void)
{        
        keylock_t * keylock=Keylock_Msg_Accept();

        RFID_ChkCard_Disable();               
        if (RTC_GetITStatus(RTC_IT_ALRA) != RESET)
        {
                RTC_ClearITPendingBit(RTC_IT_ALRA);
                EXTI_ClearITPendingBit(EXTI_Line17);               
                //System_Sleep_Disable();
                IntWakeupSce.Sys_sync_flag= SYNC_RECYCLE;
                }
        if (RTC_GetITStatus(RTC_IT_ALRB) != RESET)
        {                        
                RTC_ClearITPendingBit(RTC_IT_ALRB);
                EXTI_ClearITPendingBit(EXTI_Line17);
                if (keylock->lockedflag == TRUE)
                {
                        IntWakeupSce.lockedrelease = TRUE;
                        }
                }
        #ifdef CHECK_WAKEUP_MODE
                wakeup_mode |= WAKEUP_BY_RTC;
        #endif

void RTC_RandomPwUpdate_Alarm(void)
{
        RTC_TimeTypeDef  RTC_TimeStruct;
        RTC_AlarmTypeDef RTC_AlarmStruct;

        APP_TRACE_DBG("%s %d\n", __FUNCTION__, __LINE__);
           RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct);
        RTCTime_AddCalculate(1, CALCULATE_HOUR, &RTC_TimeStruct);

        /* Allow access to BKP Domain */
        PWR_RTCAccessCmd(ENABLE);
        RTC_AlarmCmd(RTC_Alarm_A, DISABLE);
          RTC_AlarmStruct.RTC_AlarmTime.RTC_H12 = RTC_TimeStruct.RTC_H12;
          RTC_AlarmStruct.RTC_AlarmTime.RTC_Hours = RTC_TimeStruct.RTC_Hours;
    RTC_AlarmStruct.RTC_AlarmTime.RTC_Minutes = (RTC_TimeStruct.RTC_Minutes + 10) % 60;
    RTC_AlarmStruct.RTC_AlarmTime.RTC_Seconds = 0;
        RTC_AlarmStruct.RTC_AlarmDateWeekDay = 0x31;
          RTC_AlarmStruct.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
          RTC_AlarmStruct.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay| RTC_AlarmMask_Hours;
          RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStruct);
          RTC_WaitForSynchro();
        RTC_ClearFlag(RTC_FLAG_ALRAF);        
        EXTI_ClearITPendingBit(EXTI_Line17);
        RTC_ITConfig(RTC_IT_ALRA, ENABLE);
          RTC_AlarmCmd(RTC_Alarm_A, ENABLE);

我这里改成10分钟一次.
本来我要的是1个小时一次中断

使用特权

评论回复
6
dengdc| | 2022-10-16 14:59 | 只看该作者
应该还是中断配置没对

使用特权

评论回复
7
llljh| | 2022-10-16 15:01 | 只看该作者
估计是程序哪里跑丢了

使用特权

评论回复
8
juventus9554| | 2022-10-16 15:03 | 只看该作者
程序跑飞了 有可能是数据类型的问题

使用特权

评论回复
9
SantaBunny| | 2023-2-21 22:30 | 只看该作者
RTC时钟的闹钟需要借助中断的方法来完成

使用特权

评论回复
10
bestwell| | 2023-3-3 21:03 | 只看该作者
stm32的rtc具有哪些功能

使用特权

评论回复
11
rosemoore| | 2023-3-3 21:34 | 只看该作者
RTC为什么使用LSE时钟源时间不走

使用特权

评论回复
12
Henryko| | 2023-3-3 22:28 | 只看该作者
每次都初始化也是可以的,毕竟一小时才触发一次

使用特权

评论回复
13
Henryko| | 2023-3-3 22:28 | 只看该作者
每次都初始化也是可以的,毕竟一小时才触发一次

使用特权

评论回复
14
sanfuzi| | 2023-3-4 20:03 | 只看该作者
stm32的rtc与外界时间怎么校准的

使用特权

评论回复
15
sdlls| | 2023-3-4 20:27 | 只看该作者
RTC的秒中断还会产生吗               

使用特权

评论回复
16
uiint| | 2023-3-4 20:32 | 只看该作者
stm32自带的rtc怎么使用              

使用特权

评论回复
17
Stahan| | 2023-3-5 19:51 | 只看该作者
中断处理的问题吧

使用特权

评论回复
18
pentruman| | 2023-3-7 19:41 | 只看该作者
rtc时钟 多久设置一次合适               

使用特权

评论回复
19
eefas| | 2023-3-10 13:26 | 只看该作者
RTC时钟 必须要用中断吗?

使用特权

评论回复
20
tifmill| | 2023-3-10 15:22 | 只看该作者
如何用stm32实现使用中断exti按一下实现一个功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

723

主题

7134

帖子

2

粉丝