打印

请问香主:关于RTC报警中断的问题,急啊!

[复制链接]
3030|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
成成|  楼主 | 2009-3-5 01:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
调试STM32的过程中使用了其内部的RTC报警中断,但是发现我已经按照datasheet中的设置要求,设置ALRE=1, 通过NVIC_Init函数设置并使能RTCAlarm_IRQChannel中断向量。

在调试的过程中,看到RTC的寄存器中的ALRE、ALRF都已经被置位,但是我的中断处理函数RTCAlarm_IRQHandler却一直得不到响应和执行?请问这是为什么呢?还有什么需要设置的吗?
沙发
bolin1981| | 2009-3-5 09:18 | 只看该作者

lajsdlf

asdf

使用特权

评论回复
板凳
ST_ARM| | 2009-3-5 10:27 | 只看该作者

NVIC有没有初始化?

使用特权

评论回复
地板
成成|  楼主 | 2009-3-5 10:32 | 只看该作者

NVIC初始化

我已经初始化了RTCAlarm_IRQHandler这个向量,还需要什么初始化吗?
    // 配置RTC闹钟中断向量
    NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    
    // 配置RTC秒中断向量
    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    

使用特权

评论回复
5
cjf512| | 2009-3-5 13:15 | 只看该作者

设置有误,优先级没设置好,应该会出错乱掉

使用特权

评论回复
6
ST_ARM| | 2009-3-5 14:01 | 只看该作者

RTC报警中断是连接到外部中断线17上

在初始化时,需要对外部中断线17进行初始化。

添加以下代码:
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  /* Enable the EXTI Line17 Interrupt */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Line = EXTI_Line17;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

使用特权

评论回复
7
成成|  楼主 | 2009-3-7 23:41 | 只看该作者

搞定!

谢谢ST_ARM ,根据你的提示,搞定!

但是心中还是有点郁闷,这个RTC闹钟还是用起来怎么就那么的别扭!

使用特权

评论回复
8
香水城| | 2009-3-8 10:46 | 只看该作者

说说,怎么的别扭?

大家一起评评~~~~~~

使用特权

评论回复
9
lut1lut| | 2009-3-12 11:31 | 只看该作者

楼主可能绕路了,我是说可能

如果楼主不是做跟低功耗相关的,仅仅是要产生RTC的闹钟报警中断的话,以上做法有点绕路,确实“别扭”。

当然如果楼主确实是要从低功耗模式中,被RTC的闹钟报警唤醒,那么以下的叙述可以直接忽略掉~~~ ORZ

关于RTC的中断,在NVIC中有两个向量:
RTC_IRQChannel      /* RTC global Interrupt */
RTCAlarm_IRQChannel   /* RTC Alarm through EXTI Line Interrupt */

如果楼主不是做跟低功耗相关的,仅仅是要产生RTC的闹钟报警中断的话,只需要在NVIC中使能RTC_IRQChannel就可以,当alarm产生了,自动跳到RTC_IRQChannel,在这个ISR中,通过检查中断状态位(RTC_GetITStatus),如果是alarm中断,就做相应处理。

使用特权

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

本版积分规则

13

主题

56

帖子

0

粉丝