时间戳
时间戳是一个计数器数值,定义从1970/1/1为0并开始计时,永不进位,在计算机底层用时间戳,需要观看时就是转化为年月日的格式(计算机使用时间戳的好处有简化硬件电路、时间间隔计算方便、存储方便)
时间戳以伦敦时间为基准,在不同的地区只需在时间基准加上偏移量即可
时间戳转化用C语言提供的time函数实现
UTC/GMT
GMT是以前计时标准,不同时区加上小时偏移,这样时间就定下来了,但GMT有个棘手的问题就是,地球自转一周的时间是不固定的(如潮汐力)所以这样的时间基准就是不断正在变化的,这样就导致计时不准,所以推出了UTC计时系统
UTC的时间基准固定,加入闰秒的机制来消除来消除计时一天和地球自转一周的误差
闰秒的操作流程就是,当原子钟计时一天的时间和地球自转一周的时间相差超过0.9秒时、、、、简而言之就是,当地球自转过慢,误差超过0.9秒,计时系统就多走1秒,来等下地球自转(一分钟61秒)
时间戳转换
time_t是typedef重命名的int64类型(有符号)
struct tm是结构类型名
注:
time函数不能在STM32中获取当前时钟(stm32是离线的)
年份要加上1900偏移,月份要加上1偏移
maketime参数必须是当地时间
BKP备用寄存器
如果要使用BKP/RTC,则必须给VBAT接备用电池(BKP本质是RAM存储器),TAMPER用于防拆设计,引脚街上拉或下拉连接到设备外壳,一旦外壳被拆开,TEMPER进入中断执行操作
橙色区域为备份区域,当主电源掉电时,备份区域仍由VBAT备用电池供电,当主电源上电时,由VDD供电
RTC
简介
RTC的时钟源为外部低速时钟(LSE 32.768Khz)
左边是分频、计数部分;右边是中断输出使能、NVIC部分
RTC的闹钟可以唤醒设备,退出待机模式
灰色填充部分都处于后备区域(主电源掉电后,使用备用电池维持供电)
分频器实际就是计数器,计几个数分频就是几分频,然后可编程分频器一般有两个寄存器,一个用来计数,一个用来写重装值(实际分频=重装值+1)
比如时钟是32768hz,那么计数32768时,就输出一个信号(1Hz)
当RTC_CNT=RTC_ALR时,会产生一个闹钟中断输出,通往中断系统,然后执行操作,同时闹钟还可以让STM32退出待机模式
注:这个闹钟值,是一个定值,只能响一次,如果想周期性响,则需要重新设置一下
RTC_Second每秒进入一次中断
RTC_Overflow计数器溢出进入中断
REC_Alarm闹钟中断,当计数器和闹钟值相等时,触发中断,同时可以从待机模式中唤醒设备
基本结构
配置数据选择器进行选择时钟源
配置重装寄存器选择分频系数
配置32位计数器进行日期的读写
外部电路
如要自己画板子,用推荐连接的方法
注意事项
如果要使用BKP或RTC都要执行两步(第一步,开启PWR和BKP的时钟;第二步,使用PWR,是能BKP和RTC的访问)