简介
电量计ES32L0910本地有个RTC,初始化的日期是1970-01-01 00:00:00,如果不校准时间,芯片通上电之后会以1970-01-01 00:00:00为起点开始计时,那这个时间和现实的物理时间是相违背的,于是乎我们就需要去校准一下本地RTC,一般来说校准时间的方式有很多种,可以通过IIC连续写入字节依次把年、月、日、时间写进去,也可以把RTC转化为UTC时间戳(秒)发出去,电量计再对应转换成RTC。
电量计ES32L0910采用的是UTC时间戳校准的方式,这里采用AI编程,把模块化的程序用AI生成就可以,我们主要对AI生成的程序审核、DEBUG、优化等,这样就简单多了,效率大大提升。
接下来紧跟步伐,一步步来深入了解下这里面的逻辑。
一、何为UTC
1.1 UTC
UTC是协调世界时间,全球统一的标准时间基准,,基准点为 0 时区,不分时区、没有夏令时,全球同一时刻 UTC 数值完全一致。
那北京时间属于东八区,和UTC的转换规则:
北京时间=UTC + 8 小时;
UTC = 北京时间 − 8 小时
举例:UTC:2026-06-09 08:00:00
对应北京时间:2026-06-09 16:00:00
1.2 UTC时间戳
从 1970-01-01 00:00:00 UTC 到现在的总秒数。
- 单位:秒
- 10 位数字
- 全球统一,无时区、无夏令时
北京时间戳 = UTC时间戳 + 8×3600。
对UTC的概念了解清楚了,那下一步就可以实现RTC转换UTC时间戳了。
二、RTC转化为UTC时间戳
根据上面我们知道北京时间戳=UTC时间戳 + 8×3600,UTC时间戳即1970-01-01 00:00:00到现在的总秒数。
咱们先把UTC的时间戳来转化一下。函数如下图:
这个函数最后的返回值就是北京时间的时间戳,这里传参的时候传入的就是RTC时间,是主控的RTC时间,RTC的数据类型定义如下图:
这里说明一下,这个小模块的程序是AI生成的,用的Cursor工具,只需要的把需求明确输入即可,不到1分钟就生成了,如果自己手搓的话,咋滴也得个把小时,还可能有漏洞更耗时,AI生成基本一次性就成功了。
主控的RTC转化为UTC时间戳之后,紧接着就是设置给电量计。
三、电量计UTC
根据“电量计编程手册”,设置UTC的寄存器如下图:
然后把UTC时间戳分成4个8位的数组,分别设置上面寄存器即可。
32位数据转换为8位数组函数,如下图:
设置完这一步基本就完成了RTC的校准了,下面就可以读一下电量计的RTC是否对应上设置的实时时间,按照以上流程操作基本应该是没问题的。
这里提示下,可以根据自己的软件做一些容错性设计,比如:RTC校准的时间形成闭环,做一下回读。
四、总结
敲重点,根据以上的操作流程,这里总结一下哪些地方需要注意:
-主控RTC转UTC时间戳,先获取主控的RTC时间,转化为UTC时间戳,这里注意下闰年月份问题;
-电量计UTC设置,UTC时间戳是32位数据,根据电量计的寄存器把UTC设置进去;
-回读设置,设置OK之后,回读是否设置成功,形成闭环,才能保证没问题。