学习笔记之— STM32 学习笔记之—RTC 写这篇学习笔记的时候距上一篇笔记间隔的时间不短了, 期间有网友关心询问为 什么不更新文章,主要是这一段时间工作太忙了没有闲暇时间做下来学习,工作 是重要的事情,不能把饭碗丢了啊 o(∩_∩)o…,好了废话少说切入正题. 既然我们要使用 RTC 就要先对它有个大致的了解,知己知彼才能百战不殆嘛! STM32 内部 RTC 功能非常实用, 它的供电和时钟是独立于内核的, 可以说是 STM32 内部独立的外设模块,有加上 RTC 内部寄存器不受系统复位掉电的影响,我们可 以才用外部电池供电和 32768 表振晶体来实现真正 RTC(实时时钟)功能.的这 里引用手册里一段概述"RTC 由两个主要部分组成.第一部分(APB1 接口)用来 和 APB1 总线相连.此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进 读写操作.APB1 接口以 APB1 总线时钟为时钟,用来与 APB1 总线接口. 另一部分(RTC 核)由一系可编程计数器组成,分成两个主要模块.第一个模 块是 RTC 的预分频模块,它可编程产生最长为 1 秒的 RTC 时间基准 TR_CLK. RTC 的预分频模块包含一个 20 位的可编程分频器(RTC 预分频器).在每个 TR_CLK 周期中,如果在 RTC_CR 寄存器中设置相应允许位,则 RTC 产生一个 中断(秒中断).第 2 个模块是一个 32 位的可编程的计数器,它可被初始化为 当前的系统时间. 系统时间以 TR_CLK 速增长并与存储在 RTC_ALR 寄存器中的 可编程的时间相比较,如果 RTC_CR 控制寄存器中设置相应允许位,则比较匹 配时将产生一个闹钟中断." 对于第一次实用 RTC 的时候我们要对它进行配置一番,现在大致说一下(代码是 通过调用 RTC_Config 函数来实现的): 1. 打开电源管理和备份寄存器时钟,提到备份寄存器这里要说一下,引用 手册--"备份寄存器是 10 个 16 位的寄存器,可用来存储 20 个字节的用户应 用程序数据.他们处在备份域,当 VDD 电源被断,他们仍然由 VBAT 维持供 电.当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也会被复 位."我们正式通过在备份寄存器写固定的数据来判断芯片是否第一次实用 RTC,从而在系统运行 RTC 时提示配置时钟的. 2. 使能 RTC 和备份寄存器的访问(复位默认关闭).引用手册--"复位后, 对备份寄存器和 RTC 的访问被禁止,并且备份域被保护以防止可能存在的意外 的写操作.电源控制寄存器(PWR_CR)的 DBP 位必须被置 1,以允许访问备份寄 存器和 RTC."因为程序要对 RTC 和备份寄存器操作,所以必须使能. 3. 选择外部低速晶体为 RTC 时钟,并使能时钟; 4. 使能秒中断,程序里在秒中断里置位标志位来通知主程序显示时间数 据,同时在 32 位计数器到 23:59:59 时清零; 5. 设 置 RTC 预 分 频 器 值 产 生 1 秒 信 号 计 算 公 式 fTR_CLK = fRTCCLK/(PRL+1),我们设置 32767 来产生秒信号; 在这里要注意一下,所有在对 RTC 寄存器操作之前都要判断读写操作是否完成, 也就是说当前是否有读写操作.