打印
[STM32F0]

STM32F042 RTC中断问题

[复制链接]
1381|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bao19830224|  楼主 | 2018-1-29 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位,小弟刚接触Cortex-M0核单片机,用的是STM32F042.在使用RTC Alarm功能时,遇到问题,先贴源码

//初始化
void RTC_init(void)
{
        RTC_InitTypeDef RTC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        //Enable the LSI OSC
        RCC_LSICmd(ENABLE);
        while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
        {
        }
        //40k
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
        RCC_RTCCLKCmd(ENABLE);
        RTC_WaitForSynchro();

        //时基配置-1s
        RTC_InitStructure.RTC_AsynchPrediv = 0x63;
        RTC_InitStructure.RTC_SynchPrediv = 0x18F;
        RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;

        RTC_Init(&RTC_InitStructure);

        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);
        
        NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

//校准时钟为: 00:01:00
void RTC_TimeRegulate(void)
{
        RTC_TimeTypeDef RTC_TimeStructure;

        RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
        RTC_TimeStructure.RTC_Hours = 0x00;
        RTC_TimeStructure.RTC_Minutes = 0x01;
        RTC_TimeStructure.RTC_Seconds = 0x00;

        RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
}

//闹钟设置
void RTC_TimeAlarm(u8 tInterval)
{
        RTC_AlarmTypeDef  RTC_AlarmStructure;

        RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM;
        RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = tInterval;

        //屏蔽天数、小时和秒
        RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay|RTC_AlarmMask_Hours|RTC_AlarmMask_Seconds;
        RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);        

        //中断
        RTC_ITConfig(RTC_IT_ALRA, ENABLE);
        RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
}

int main(void)
{
        RTC_init();
        RTC_TimeRegulate();
        //1min中断一次
        RTC_TimeAlarm(0x01);
        while(1);
}

void RTC_IRQHandler(void)
{
        RTC_ClearITPendingBit(RTC_IT_ALRA);
       EXTI_ClearITPendingBit(EXTI_Line17);
        //...
}

实现的功能是:1min进一次RTC中断处理业务。但是运行的结果是进不了中断!

请各位帮忙看看问题出在哪里?谢谢
沙发
junpeng324| | 2018-1-29 19:32 | 只看该作者
1min中断还是1S中断一次

使用特权

评论回复
板凳
bao19830224|  楼主 | 2018-1-29 20:21 | 只看该作者
是1分钟(min)中断一次

使用特权

评论回复
地板
香水城| | 2018-1-29 21:49 | 只看该作者
官方有例程,你好好比对下配置。
比方你有无如下配置代码:
/* Enable the PWR clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

  /* Allow access to RTC */
  PWR_BackupAccessCmd(ENABLE);

使用特权

评论回复
5
萧洛毫| | 2018-1-30 08:37 | 只看该作者
你先试试1s的中断,一分钟有点长,不好跟踪。

使用特权

评论回复
6
bao19830224|  楼主 | 2018-1-30 10:29 | 只看该作者
多谢版主回复,PWR两句初始化在前面的代码中已经设置了。今天上午换了一块板子,可以进中断了,应该是硬件的问题

使用特权

评论回复
7
bao19830224|  楼主 | 2018-1-30 10:30 | 只看该作者
萧洛毫 发表于 2018-1-30 08:37
你先试试1s的中断,一分钟有点长,不好跟踪。

现在可以进中断了,多谢回复

使用特权

评论回复
8
lnulibin| | 2018-1-30 20:54 | 只看该作者
量产的时候要谨慎啊。RTC使用时的要求较高。如果不慎,可能不起振,或者不准。https://bbs.21ic.com/icview-912914-1-1.html

使用特权

评论回复
9
萧洛毫| | 2018-2-27 09:12 | 只看该作者
lnulibin 发表于 2018-1-30 20:54
量产的时候要谨慎啊。RTC使用时的要求较高。如果不慎,可能不起振,或者不准。https://bbs.21ic.com/icview- ...

我见多数人还是可以完美运行的,按照手册说的进行使用和配置就好了。

使用特权

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

本版积分规则

3

主题

44

帖子

1

粉丝