历史上的今天
返回首页

历史上的今天

今天是:2025年01月04日(星期六)

2019年01月04日 | stm32 rtc 实时时钟

2019-01-04 来源:eefocus

STM32的实时时钟是一个独立的定时器


通常会在后备区域供电端加一个纽扣电池,当主电源没有电的时,RTC不会停止工作


若VDD电源有效,RTC可以触发秒中断、溢出中断和闹钟中断


备份寄存器BKP 


备份寄存器是42个16位的寄存器,他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒或系统复位或电源复位时,他们也不会被复位


RTC配置步骤


1.使能电源时钟和后备区域时钟 

2.取消后备区域的写保护,DBP 

3.复位备份区域 

4.外部低速振荡器使能,LSE 

5.RTC时钟源选择,LSE 

6.RTC时钟使能

7.进入配置模式 

8.设置RTC预分频装载值 

9.设置RTC计数器值 

10.退出配置模式

11.初始化NVIC外设,设置RTC中断优先级 

12.编写RTC中断处理函数


举例


typedef struct

{

    u32 hour;

    u32 min;

    u32 sec;

}time_t;

time_t g_time;


void RTC_get()

{

    u32 counter;


    counter = RTC_GetCounter(); //读取计数器值

    g_time.hour = counter / 3600;

    g_time.min = (counter % 3600) / 60 ;

    g_time.sec = counter % 60 ;

}


void RTC_IRQHandler()

{

    if(RTC_GetFlagStatus(RTC_FLAG_SEC) == SET)

    {

        RTC_get();

        printf("time %02d:%02d:%02d\n", g_time.hour, g_time.min, g_time.sec);

    }

    RTC_ClearFlag(RTC_FLAG_SEC);

}


void RTC_init()

{

    u16 bkp_data = 0xa5a5;

    u16 prescaler = 32768 - 1;

    NVIC_InitTypeDef nvic = 

    {

        RTC_IRQn,

        2,

        2,

        ENABLE

    };


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能电源时钟和后备区域时钟


    PWR_BackupAccessCmd(ENABLE); //取消后备区域的写保护


    if(BKP_ReadBackupRegister(BKP_DR1) != bkp_data) //读备份数据

    {

        BKP_DeInit(); //复位备份区域


        RCC_LSEConfig(RCC_LSE_ON); //外部低速振荡器使能

        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET)

        {

            delay_ms(10);

        }


        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //LSE振荡器作为RTC时钟

        RCC_RTCCLKCmd(ENABLE); //RTC时钟开启

        RTC_WaitForLastTask(); //RTC操作关闭(上一次对RTC寄存器的写操作已经完成)

        RTC_WaitForSynchro(); //寄存器同步标志(寄存器已经被同步)


        RTC_ITConfig(RTC_IT_SEC, ENABLE); //屏蔽中断请求(允许秒中断)

        RTC_WaitForLastTask();


        RTC_EnterConfigMode(); //配置标志(进入配置模式)


        RTC_SetPrescaler(prescaler); //预分频装载值

        RTC_WaitForLastTask();


        RTC_SetCounter(0xf73f); //设置计数器值(17:34:55)

        RTC_WaitForLastTask();


        RTC_ExitConfigMode(); //退出配置模式(开始更新RTC寄存器)


        BKP_WriteBackupRegister(BKP_DR1, bkp_data); //写备份数据

    }

    else

    {

        RTC_WaitForSynchro();

        RTC_ITConfig(RTC_IT_SEC, ENABLE);

        RTC_WaitForLastTask();

    }


    NVIC_Init(&nvic);   


    RTC_get();

}


推荐阅读

史海拾趣

天二科技(EVER OHMS)公司的发展小趣事

面对不断变化的市场需求和技术挑战,天二科技始终坚持持续创新和客户至上的经营理念。公司与客户保持紧密合作,深入了解客户的需求和反馈,不断推出符合市场需求的新产品和解决方案。同时,天二科技还注重培养员工的创新意识和能力,鼓励员工积极参与技术创新和研发工作。这种持续创新和客户至上的经营理念使得天二科技在电子行业中始终保持领先地位。

捷嘉电子(Chequers Electronic)公司的发展小趣事

捷嘉电子在成立初期面临着巨大的挑战。那是一个智能电子产品刚刚开始兴起的时代,市场竞争激烈。公司创始人余文跃凭借对电子行业的深刻理解和对技术创新的执着追求,决定投身于智能控制器的研发与生产。在初创阶段,资金紧张、人才短缺、市场推广困难重重。但余文跃凭借着坚韧不拔的毅力,带领团队攻克了一个又一个技术难题,逐渐在市场上站稳了脚跟。

Atlanta Micro公司的发展小趣事

作为一家技术驱动的公司,Atlanta Micro始终重视研发实力的提升。公司不断加大研发投入,引进了一批高素质的研发人才,并建立了完善的研发体系。这些举措使得公司的研发能力得到了显著提升,不断推出具有市场竞争力的新产品,为公司的发展提供了源源不断的动力。

DIOTECH公司的发展小趣事

DIOTECH公司成立于电子行业的黄金时期,凭借其创始人在半导体领域的深厚造诣,公司迅速在高性能处理器领域取得了技术突破。通过不断优化产品设计和生产工艺,DIOTECH的产品在性能和稳定性上均达到了行业领先水平,逐渐赢得了市场的认可。随着智能手机的普及,DIOTECH的高性能处理器成为了市场上的抢手货,公司的营收和市场份额均实现了快速增长。

Easy Magnet Corp公司的发展小趣事

随着环保意识的提高,Easy Magnet Corp公司开始关注产品的环保性能。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还积极参与环保公益活动,倡导绿色消费理念。这些举措不仅提升了公司的社会形象,也吸引了更多注重环保的消费者。

浙江东亚电子(DongYa)公司的发展小趣事

随着公司的发展,浙江东亚电子不断拓展其产业布局。除了传统的电力电子元件、分流器等产品外,公司还涉足新能源汽车、充电桩、变频器和储能等领域。特别是在新能源汽车和充电桩领域,公司紧跟国家“新基建”发展战略,推出了一系列具有竞争力的产品,为公司带来了新的增长点。

问答坊 | AI 解惑

奚国华:尽快研究解决物联网的内涵、产业界定

工信部副部长奚国华6月底在北京举行“2010中国物联网大会”上表示,工业和信息 化部副部长奚国华在致辞时表示,对于物联网,工信部将加强规划指导和政策引导,加强指导协调,尽快研究解决物联网的内涵,产业界定和产业统计的问题。同时 将超 ...…

查看全部问答>

单片机控制GSM模块

我用的是PIC单片机,MC45(GSM)模块。 硬件电路MC45的50脚直接插到单片机的50脚插槽上,我用到的MC45脚包括TXD0,RXD0,IGT。 我并不知道MC45的这几个脚如何与单片机的RXD0,TXD0,IGT相连。 我的问题是可不可以软件上实现单片机的RXD0和MC45的TXD ...…

查看全部问答>

Android

一部分 Binder的组成1.1 驱动程序的部分在以下的文件夹中:kernel/include/linux/binder.hkernel/drivers/android/binder.c    binder驱动程序是一个miscdevice,主设备号为10,此设备号使用动态获得(MISC_DYNAMIC_MINOR),其设备的节 ...…

查看全部问答>

Lm3S811 PLL 设置倍频到 50Mhz 之后,为什么实际只有37.5Mhz 呢?

Lm3S811 PLL 设置倍频到 50Mhz 之后,为什么实际只有37.5Mhz 呢?   SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ);//UART 初始化SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);SysCtlPeripheral ...…

查看全部问答>

学习心得

看了视频教程,了解MSP430单片机主要侧重低功耗,应用于好多产品,像电能表,远传抄表等。这使我想起以前面试过一家电能表公司,就是用MSP430开发的。MSP430单片机是16位单片机,在常用的几类单片机中,像51,PIC,AVR,MSP430,FRESCALL,只有MSP430全 ...…

查看全部问答>

Pt1000测量电路(精度为0.1°)

之前有了解过pt1000的测量电路,就是很不准确,求各位高人指点! file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/372182098/QQ/WinTemp/GE/8C6B5CD2-B508-47B8-8B53-AEEBA13D57F7.jpg…

查看全部问答>

BeagleBone Black设计:Qt程序编写和桌面图标添加!

24bit的7寸LCD屏和触摸屏调试通过之后,Qt程序的编写就要提上日程! 因为我用的是官方的SDK,所以其自带了Qt4.8的库!我需要做的只是按照官方说明编写自己的Qt程序,然后编译之后生成可执行文件,放入开发板当中去执行即可!! 具体搭建Qt编程环 ...…

查看全部问答>

2015年电赛本科组A-G题相似参考电路资料

2015电子大赛题目已经出炉,分享一些资料给大家参考。祝各位取得好成绩!附件中所有电路均可以免费下载,具体可联系管理员:459888529,索要优惠码。 …

查看全部问答>

【MicroPython】Micropython PM检测添加SD卡存储

继续添加功能,PM值检测出来了,同时RTC功能也有了,接下来添加一个SD卡模块,希望能够实时将检测到的数据保存下来,作为历史数据。 在Micropython的官方文档中有关于SD卡的例程和库文件,拿来分析一下,就可以根据例程修改为自己的代码使用。 本 ...…

查看全部问答>