打印

重复进入RTC alarma中断

[复制链接]
2282|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rxxcsz|  楼主 | 2015-3-4 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARMA, RTC, TI, ST, ic
使用的芯片是STM32L152C8,使用ALARMA每到1秒钟时产生中断,刷新时间显示。程序如下:
/**********************************************************************************
* 名称:RTC_NVIC_Config()
* 功能:RTC的中断配置,分钟中断,用于更新显示
* 入口参数:无
* 出口参数:无
***********************************************************************************/
void RTC_NVIC_Config(void)
{
        RTC_AlarmTypeDef RTC_AlarmStruct;
        NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
       
        /* 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);
       
        /* Configure one bit for preemption priority */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
       
        /* Enable the RTC Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        RTC_AlarmStruct.RTC_AlarmMask=RTC_AlarmMask_DateWeekDay|RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes;        //取消秒中断的屏蔽
        RTC_AlarmStruct.RTC_AlarmTime.RTC_Seconds=1;                        //每到1秒时产生中断
        RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStruct);
               
        /* 使能闹钟A中断 */
        RTC_ITConfig(RTC_IT_ALRA, ENABLE);
       
        /* Enable the alarmA */
        RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
}


/**
  * @brief  This function handles RTC_Alarm interrupt request.
  * @param  None
  * @retval None
  */
void RTC_Alarm_IRQHandler(void)
{
        if(RTC_GetITStatus(RTC_IT_ALRA) != RESET)
        {
                /* Clear RTC AlarmA Flags */
                RTC_ClearITPendingBit(RTC_IT_ALRA);
                Time_Display();
                /* Clear the EXTIL line 17 */
                EXTI_ClearITPendingBit(EXTI_Line17);
               
        }
}


现在的情况是一上电,就立即进入中断刷新时间显示,而且是一直不断的进入中断,通过单步执行调试的话可以看到中断标志位被清除了的,而且单步执行后偶尔也会正常,不再进入中断。有没有人遇到这种情况的?

沙发
airwill| | 2015-3-5 07:22 | 只看该作者
RTC 中断包含3个触发信号, 先借助调试器确认一下 CRH 的设置和 CRL 的状态, 是不是中断服务函数里还有其他中断触发信号没有清掉

使用特权

评论回复
板凳
yinhaix| | 2015-5-18 12:25 | 只看该作者

使用特权

评论回复
地板
看不清的天空| | 2017-6-12 16:25 | 只看该作者
顶一下,我有有类似情况

使用特权

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

本版积分规则

8

主题

42

帖子

0

粉丝