【无标题】STM32 RTC闹钟中断和唤醒待机模式

这篇具有很好参考价值的文章主要介绍了【无标题】STM32 RTC闹钟中断和唤醒待机模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RTC代表的是实时时钟的意思。因为它提供的时钟基准比较准确所以用处还是很多的。本文章主要讲解基于STM32F103上的RTC闹钟中断功能以及用闹钟中断唤醒STM32的待机模式。

需要注意RTC的几个要点:1.RTC的值被设定后它就会一直按照设定的基准时间自己递增,如果你的硬件设备上发现一个纽扣电池,那就是给RTC功能供电用的。因此就算关闭掉设备的主电源,RTC的运行也是不受影响的,当然如果扣掉纽扣电池或者不带纽扣电池它就不工作了。2.每次STM32复位后这个RTC值它重新计数还是继续计数要考虑清楚3.RTC的值是有上限的,它的最大值就是2的32次方减一,这个数字很大因此不用太关心。
 

本文章的第一个例程是让RTC一次设定值后一秒递增一个单位,每过40秒就触发一个闹钟并进入中断,每经过一秒就将秒数输出到计算机上。下面就是RTC的初始化配置。(第一个程序从正点原子的程序上修改得来)

复制
u8 RTC_Init()

{

        u8 temp = 0;

        NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);//电源时钟和背部时钟

        PWR_BackupAccessCmd(ENABLE);                    //允许背部区域写

        

        if (BKP_ReadBackupRegister(BKP_DR1) != 0xC0B4)                

                {                                 

 

                BKP_DeInit();        

                RCC_LSEConfig(RCC_LSE_ON);        

                while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)        

                        {

                            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的秒中断和闹钟中断        

                RTC_WaitForLastTask();        

                RTC_EnterConfigMode();                        //进入配置RTC模式

                RTC_SetPrescaler(32767); 

                

                RTC_SetCounter(0);                            //初始值设定为0s

            RTC_WaitForLastTask();

                RTC_SetAlarm(40);                                   //闹钟值设定为40s

                RTC_WaitForLastTask();                        //等待上述配置完成

                RTC_ExitConfigMode();                          //退出配置模式

                BKP_WriteBackupRegister(BKP_DR1, 0XC0B4);

                PWR_BackupAccessCmd(DISABLE);                //不允许背部区域写操作

                }

        else

        {

                PWR_BackupAccessCmd(DISABLE);

                RTC_WaitForSynchro();

                RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR,ENABLE); //打开RTC的秒中断和闹钟中断        

                RTC_WaitForLastTask();

        }

  

        NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;                //RTC全局中断的中断配置

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                

        NVIC_Init(&NVIC_InitStructure);                

 

        return 0;

}

//此初始化函数在主函数中的用法

while(RTC_Init())

        {

                        printf("INIT Programing is ERROR!!\r\n");

                

        }

if (BKP_ReadBackupRegister(BKP_DR1) != 0xC0B4)    的意思就是让STM32上电后自检是不是第一次运行这个程序。BKP_ReadBackupRegister(BKP_DR1)代表读取BKP_DR1的值,如果第一次运行这个程序那这个值一定是0X0000,值和0XC0B4不相等就进入配置初始化程序。BKP_WriteBackupRegister(BKP_DR1, 0XC0B4)代表往BKP_DR1这个寄存器中写入0XC0B4,注意BKP_DR1这个值被写入之后就算复位他也不会被清除成0000。这样的话就算复位或者重新上电,初始程序也不会再执行一遍,所以RTC的值就不会再重新设置了。如果想要RTC的值重新从0开始计数,那就可以吧0XC0B4改成一个新的数字,重新下载一次程序就可以了。

接下来的时钟配置选择打开外部低速时钟LSE,它向RTC提供时钟频率。它频率为是32.768KHZ.我们需要分频后使用它。分成1HZ。

rtc闹钟中断,单片机

根据上图1HZ = 32768/(32767+1)  所以RTC_SetPrescaler(32767)就能明白什么意思了吧。

为RTC提供时钟频率还是有两种选择的,这里我们用一种就够了。

RTC_WaitForLastTask()和RTC_WaitForSynchro()都是等待最近的写操作完成的意思,在RTC配置的时候这两条尤其第一条都是很重要的,如果添加位置不当或缺失程序有时候会卡在一个地方。

接下来打开RTC的秒中断和闹钟中断。在接下来就是对RTC的一些具体配置比如初始值和计数频率以及闹钟数值的配置。按照ST的说法:

接下来打开RTC的秒中断和闹钟中断。在接下来就是对RTC的一些具体配置比如初始值和计数频率以及闹钟数值的配置。按照ST的说法:下面就是RTC全局中断的介绍:
 

复制

void RTC_IRQHandler()

{

        

        

        if(RTC_GetITStatus(RTC_IT_ALR)!=RESET) //是否闹钟中断发生

        {

                

                printf("THE ALARM  READY =%d \r\n",RTC_GetCounter());//输出此时的秒数

                RTC_ClearITPendingBit(RTC_IT_ALR);

                PWR_BackupAccessCmd(ENABLE);

                RTC_EnterConfigMode();        

            RTC_WaitForLastTask();

                RTC_SetAlarm(40+RTC_GetCounter());          //配置下次闹钟为40s后

                RTC_WaitForLastTask();

                RTC_ExitConfigMode();   

                PWR_BackupAccessCmd(DISABLE);

        }

    if(RTC_GetITStatus(RTC_IT_SEC)!=RESET)  //是否秒中断发生

        {

                

                printf("Time is  =%d \r\n",RTC_GetCounter()); //输出此时的秒数

        

        }

        RTC_ClearITPendingBit(RTC_IT_SEC|RTC_IT_OW); //清除秒中断标志位和溢出位

        RTC_WaitForLastTask();

}

rtc闹钟中断,单片机文章来源地址https://www.toymoban.com/news/detail-851247.html

到了这里,关于【无标题】STM32 RTC闹钟中断和唤醒待机模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子STM32】RTC实时时钟(RTC方案、BCD码、时间戳、RTC相关寄存器和HAL库驱动、RTC基本配置步骤、RTC基本驱动步骤、时间设置和读取、RTC闹钟配置和RTC周期性自动唤醒配置)

    一、RTC简介 二、STM32 RTC框图介绍 2.1、STM32 F1 RTC结构框图 2.2、STM32 F4 / F7 / H7 RTC结构框图 三、RTC相关寄存器介绍 3.1、RTC基本配置步骤 3.2、RTC相关寄存器(F1) 3.3、RTC相关寄存器(F4 / F7 / H7) 四、RTC相关HAL库驱动介绍 4.1、RTC相关HAL库驱动(F1) 4.2、RTC相关HAL库驱动(F4 / F7 /

    2024年03月27日
    浏览(67)
  • stm32之23.RTC闹钟

    修改闹钟时间,必须与日期配对否之无效 主函数代码

    2024年02月11日
    浏览(35)
  • STM32中的RTC实时时钟和配套闹钟设置

    主要初始化函数,以及设置闹钟函数,闹钟中断函数 RTC.c RTC.h main.c

    2024年04月23日
    浏览(43)
  • stm32之24.RTC闹钟usart端口修改配置

    (需要修改) 源码

    2024年02月11日
    浏览(36)
  • Stm32待机模式的进入与唤醒

    1.基础介绍  1-1:单片机的“低功耗模式”,像是手机的待机模式,不同于正常运行模式,处于一种省电省资源的状态 1-2:在运行情况下,HCLK为cpu提供时钟,cortex-m3内核执行程序的代码,如果处于中断事件的等待时,可以进入低功耗模式用来节省资源等 1-3:STM32一共有着3个

    2024年02月16日
    浏览(39)
  • STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

    相关说明: 开发板:CT117E-M4(STM32G431RB 蓝桥杯嵌入式比赛板) 开发环境: CubeMX+Keil5 CubeMX配置: 三个步骤 (对应图中2、3、4): a.使能RTC 时钟源 。 b.使能 日历 (使能日历才能用闹钟)。 c.使能 闹钟 。 有两个选项, Hourformat24 对应24进制, Hourformat12 对应12进制。 DataFormat选项分别

    2023年04月08日
    浏览(37)
  • APM32F072单片机进入STOP模式,并通过RTC Wakeup Timer和USART1串口接收事件唤醒

    串口初始化(注意USART1时钟源要选择HSI): 使用power_init函数初始化RTC,然后调用power_enter_stop_mode(n)函数进入STOP模式,n秒后自动唤醒,或由USART1接收唤醒:

    2024年02月13日
    浏览(48)
  • stm32h7中RTC的BCD模式与BIN模式

    BCD(Binary-Coded Decimal)和BIN(Binary)是两种不同的数字表示格式。 BCD格式: BCD是一种用二进制编码表示十进制数字的格式。在BCD格式中,每个十进制数位使用4位二进制数来表示,范围从0到9。例如,数字5在BCD格式中表示为0101,数字9表示为1001。这种编码方式使得BCD数值的每

    2024年01月23日
    浏览(41)
  • STM32F4_待机唤醒详解

    目录 1. 低功耗模式 1.1 降低系统时钟速度 1.2 外设时钟门控 2. 睡眠模式 2.1 进入睡眠模式 2.2 退出休眠模式 3. 停止模式 3.1 进入停止模式 3.2 退出停止模式 4. 待机模式 4.1 进入待机模式 4.2 退出待机模式 4.3 电源控制寄存器:PWR_CR 4.4 电源控制/状态寄存器:PWR_CSR 5. 库函数配置进

    2024年02月16日
    浏览(39)
  • RTC 时间、闹钟

    实时时钟RTC是一个独立的定时器。RTC模块拥有一个连续计数的计数器,在软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 在掉电情况下 RTC仍可以独立运行 只要芯片的备用电源一直供电,R

    2024年02月07日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包