OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5744|回复: 3

RTC闹钟中断设置 初学望海涵 跪求指点

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-5-24
在线时间
5 小时
发表于 2022-8-9 21:58:43 | 显示全部楼层 |阅读模式
5金钱



我的诉求是 利用闹钟中断的中断服务函数 驱动电机振动 类似于闹铃提醒 就想着先搞个LED翻转  然后就...   
我的问题是 1. 闹钟时间怎么设置呢 是和RTC_Set的值作比较还是在RTC_Init里直接设置
                 2. 具体库函数应该怎么写呢
属实是菜鸡求指点
要是如何驱动电机也能指点一二就更好了 感激不尽

最佳答案

查看完整内容[请看2#楼]

搞好了搞好了 RTC.h头文件没添加sys.h
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-5-24
在线时间
5 小时
 楼主| 发表于 2022-8-9 21:58:44 | 显示全部楼层
搞好了搞好了    RTC.h头文件没添加sys.h
回复

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1734
金钱
1734
注册时间
2021-4-11
在线时间
320 小时
发表于 2022-8-10 09:31:40 | 显示全部楼层
例程里面有相应的接口函数的,直接调用就行
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-5-24
在线时间
5 小时
 楼主| 发表于 2022-8-10 10:26:03 | 显示全部楼层
huanan 发表于 2022-8-10 09:31
例程里面有相应的接口函数的,直接调用就行

我的源码您帮我瞅一瞅 我快要被这个整裂了


static void RTC_NVIC_Config(void)
{       
  NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;               
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;       
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
        NVIC_Init(&NVIC_InitStructure);               
        NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;               
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;       
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
        NVIC_Init(&NVIC_InitStructure);       
}



static void RTC_Alarm_EXIT(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
       
EXTI_ClearITPendingBit(EXTI_Line17);
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);

}

u8 RTC_Init(void)
{
       
        u8 temp=0;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);       
        PWR_BackupAccessCmd(ENABLE);         
        if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)               
                {                                  
                BKP_DeInit();               
                RCC_LSEConfig(RCC_LSE_ON);
                while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET&&temp<250)       
                        {
                        temp++;
                        delay_ms(10);
                        }
                if(temp>=250)return 1;
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);               
                RCC_RTCCLKCmd(ENABLE);       
                RTC_WaitForLastTask();       
                RTC_WaitForSynchro();                 
                RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR, ENABLE);               
                RTC_WaitForLastTask();       
                RTC_EnterConfigMode();       
                RTC_SetPrescaler(32767);
                RTC_WaitForLastTask();       
                RTC_Set(2022,8,9,21,48,0);
                        RTC_WaitForLastTask();
                //RTC_SetAlarm(RTC_GetCounter()+60);
                RTC_Alarm_Set(2022,8,9,21,49,0);
                RTC_ExitConfigMode();
                BKP_WriteBackupRegister(BKP_DR1, 0X5050);       
                }
        else
                {

                RTC_WaitForSynchro();       
                RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR, ENABLE);       
                RTC_WaitForLastTask();       
                }
        RTC_NVIC_Config();       
        RTC_Alarm_EXIT();               
        RTC_Get();       
        return 0; //ok

}                                                     

void RTC_IRQHandler(void)
{                 
        if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
    {
                        RTC_Get();       
    }                         
}
void RTCAlarm_IRQHandler()
{
                if(RTC_GetITStatus(RTC_IT_ALR)!= RESET)
        {       
               
                LED1=0;
                delay_ms(5000);
          printf("Alarm Time:%d-%d-%d %d:%d:%d\n",calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min,calendar.sec);       

          }                
        EXTI_ClearITPendingBit(EXTI_Line17);
  RTC_WaitForLastTask();                                                                                                           
        RTC_ClearITPendingBit(RTC_IT_ALR|RTC_IT_OW);               
        RTC_WaitForLastTask();
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-26 18:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表