STM32 实时时钟(RTC)

必要知识:

1、Unix时间戳

2、time.h

localtime():将秒寄存器的值转化为当地时间

mktime():将指向的结构体转化为自1970年1月1日的秒数

注:在STM32中两函数换算出的时间均是0时区伦敦时间

一、BKPBackup Registers)备份寄存器

BKP基本结构:

二、RTC实时时钟

除了 RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV 寄存器外,所有的系统寄存器都由系统复
位或电源复位进行异步复位

        PRL重装寄存器就相当于定时器中的ARR,实际数值为PRL+1;DIV余数寄存器相当于定时器中的CNT(自减),当减到0时,PRL的值重装到DIV里,并产生一个脉冲

RTC操作注意事项:

        在操作中,之所以等待是因为,总线的时钟频率与RTC的时钟频率不相同,RTC中的寄存器全部由RTC时钟驱动读写,所以在写的过程中,可能会出现不同步的现象,只有同步之后,才可以进行读写

三、RTC配置

(1)开启BKP和RTC的时钟,并使能对BKP和RTC的访问

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);  //开启BKP(备份寄存器)时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);  //开启PWR(电源控制)时钟
	
	PWR_BackupAccessCmd(ENABLE);  //使能对BKP和RTC的访问

(2)开始LSE时钟,并等待LSE时钟启动完成

		RCC_LSEConfig(RCC_LSE_ON);  //开启LSE时钟
		while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY != SET));  //等待LSE时钟启动完成
		

(3)选择RTC时钟源,并使能RTC时钟

		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  //选择RTC时钟源
		RCC_RTCCLKCmd(ENABLE);

(4)调用:等待同步、等待上一次写入操作完成

		RTC_WaitForSynchro();  //等待同步
		RTC_WaitForLastTask();  //等待前一次写操作结束

(5)配置预分频器(重装寄存器PRL)

		RTC_SetPrescaler(32768-1);
		RTC_WaitForLastTask();

(6)设置时间,即设置CNT计数器

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值