============================
2022-9-7
============================
一.RTC
1.RTC的简介
RTC叫做Real Time Clock,也叫做实时时钟
在市面上的芯片中,有些芯片内部集成了RTC的外设功能,有些芯片没有集成
我们使用的STM32F103RBT6芯片中集成了RTC的外设功能
(STM32F407ZGT6芯片中集成了RTC的外设功能)
RTC在STM32F103RBT6芯片中属于定时器的外设资源(属于其他定时器)
RTC可以为程序员提供万年历的功能(可以提供年 月 日 星期 时 分 秒的数据)
既然RTC属于定时器的资源
无论何种定时器,都是由 时钟频率 和 计数值 决定定时长短的
2.查找RTC的时钟频率
1)通过时钟树的分析可以了解到
可以为RTC提供时钟频率的时钟源一共有三种
(LSE LSI 和 HSE/128)
但是已知LSI是给独立看门狗(IWDG)提供时钟频率的
HSE是给锁相环(PLL)提供基础时钟频率的
所以会选择LSE为RTC提供时钟频率的
2)通过芯片手册中有关RTC的介绍
RTC选择了有LSE提供时钟频率,会把LSE先进过分频再进行使用
需要经过0x7FFF(32767)分频
---------------------------------------------------------------
问题 : 为什么不是32768分频
因为硬件默认会把分频系数加1,目的是为了防止程序员写0分频
---------------------------------------------------------------
3.查找RTC的计数值范围
1)通过芯片手册中有关RTC的介绍
RTC使用了两个16位的寄存器来存储RTC的计数值
存储的计数值是从当前时间到基准时间的秒数
----------------------------------------------------
例如 : 当前时间是2022年9月7日 星期三 10:05:20
RTC的计数值是
从1970年1月1日 00:00:00到当前时间的秒数
从1970年 - 2021年所有的秒数(平年 闰年)
从2022年1月 - 2022年8月所有的秒数(平年 闰年)
2022年9月1日 - 2022年9月6日所有的秒数
2022年9月7日00时 - 2022年9月7日10时所有的秒数
2022年9月7日10时0分 - 2022年9月7日10时5分所有的秒数
2022年9月7日10时5分0秒-2022年9月7日10时5分20秒所有秒数
----------------------------------------------------
STM32F103的官方固件只提供了
RTC_SetCounter : 设置计数值(秒数)
需要先把当前时间到基准时间的秒数求出
RTC_GetCounter : 获取计数值(秒数)
需要把读出的计数值根据基准时间转换成年月日时分秒
----------------------------------------------------
struct time_st
{
int Y;
int M;
int D;
int W;
int h;
int m;
int s;
};
4)通过芯片的手册了解RTC
为了保证RTC在主设备断电的情况下仍然可以正常工作
需要连接纽扣电池
问题1.怎么判断是第一次操作RTC?
可以在备份寄存器中存储特定的数据进行判断
============================
作业
1.把今天讲过的内容完整的复习一遍
2.把STM32F407开发板的RTC搞定
3.推进STM32F407开发板的项目工程
4.推进最终项目
============================