-
概述
K230开发板内建了五个定时器,支持单次模式和周期模式,最小定时周期为1微秒。这些定时器可用于精确的时间控制和事件调度,在许多应用场景中都具有重要作用。
定时器特性
-
数量:共有五个定时器可供使用。
-
最小周期:每个定时器的最小计时周期为1微秒,适用于高精度时间控制。
-
模式:支持单次模式和周期模式,满足不同类型的定时任务需求。
Timer实验
测试方法
为了验证定时器的功能,我们将执行以下测试步骤:
-
初始化定时器:
-
配置定时器为单次模式或周期模式。
-
设置不同的定时周期,从最小时钟周期开始逐步增大。
-
-
计时准确性:
-
记录定时器的实际触发时间和期望时间之间的差异。
-
分析定时器在不同负载下的计时误差。
-
-
多定时器同步:
-
启动多个定时器,检查它们之间是否能够正确同步。
-
-
功耗测试:
3.构建RTC对象导入模块工作原理-
测量定时器在不同模式下的功耗。
from machine import Timer import time # 定义一个自定义回调函数 def test_callback(timer): print("定时器回调函数") # 实例化一个软定时器 tim = Timer(-1) # 初始化定时器为单次模式,周期100ms tim.init(period=100, mode=Timer.ONE_SHOT, callback=lambda t:print(1)) time.sleep(0.2) # 初始化定时器, 频率为1Hz, 周期模式 , 使用自定义回调函数 tim.init(freq=1, mode=Timer.PERIODIC, callback=test_callback) time.sleep(20) # 清除定时器 tim.deinit()
-
测试结果
在执行上述测试步骤后,我们观察到如下结果:
-
计时准确性:定时器的计时误差较小,满足大部分应用需求。
-
多定时器同步:多个定时器能够正确同步,不会相互影响。
-
功耗:定时器的功耗较低,对整体能耗的影响不大。
RTC(实时时钟)
单片机中的RTC(Real-Time Clock,实时时钟)是一个独立的子系统,它可以用来维持时间的跟踪,即使是在主CPU关闭的情况下也能够继续工作。这是因为RTC通常由单独的电源供电,通常是电池,以保证即使在设备完全断电后也能继续运行。
功能特点
-
时间保持:RTC可以维持当前的时间,包括秒、分、小时、日期、月份和年份。
-
低功耗:由于RTC通常在设备休眠期间依然运行,所以它的设计目标之一就是低功耗。
-
闹钟功能:很多RTC模块支持设置闹钟,当到达预定时间时可以产生中断唤醒主CPU。
-
日历功能:RTC通常能够支持不同的日历格式,如24小时制或12小时制。
-
计数器/定时器:除了时间之外,RTC还可以用作通用的计数器或定时器。
-
工作原理
RTC的工作原理是基于振荡器的计数。大多数情况下,RTC会使用一个低频振荡器(通常在32.768 kHz左右),这个振荡器非常稳定,可以提供精确的时间基准。RTC模块会不断地对这个振荡器进行计数,并根据计数值更新时间和日期。
代码解析
1.导入模块
-
from machine import RTC import time
导入了
machine.RTC
类,用于操作实时时钟,以及time
模块,用于提供延时功能。
2.构建RTC对象
rtc = RTC()
创建了一个RTC对象,用于访问和控制实时时钟。
3.初始化RTC时间
if rtc.datetime()[0] != 2024:
rtc.datetime((2024, 1, 1, 0, 0, 0, 0, 0))
这段代码检查RTC当前的年份是否为2024年,如果不是,则设置RTC的时间为2024年1月1日0时0分0秒。这里使用了(2024, 1, 1, 0, 0, 0, 0, 0)
元组来表示日期和时间,其中:
-
第一个元素表示年份;
-
第二个元素表示月份;
-
第三个元素表示日期;
-
第四个元素表示星期几(0表示星期一,1表示星期二,依此类推,6表示星期日);
-
第五个元素表示小时;
-
第六个元素表示分钟;
-
第七个元素表示秒;
-
第八个元素表示微妙。
4.主循环
while True:
print(rtc.datetime()) # 打印时间
time.sleep(1) # 延时1秒
进入一个无限循环,在每次循环中打印当前的RTC时间,并延时1秒,以便观察时间的变化。
注意事项
-
时间准确性:RTC时间的准确性取决于设备本身的硬件设计及其内部时钟的精度。对于要求极高时间准确性的应用,可以考虑使用外部时钟源进行校准。
-
异常处理:增加了异常处理逻辑,确保在用户中断或其他异常情况下能够优雅地退出程序。
代码总览
# 初始化RTC时钟
from machine import RTC
import time
# 构建RTC对象
rtc = RTC()
# 首次上电设置RTC日期和时间。(2024, 1, 1, 0, 0, 0, 0, 0)按顺序分别表示(年,月,日,星期,时,分,秒,微妙),
# 其中星期使用0-6表示星期一到星期日。
if rtc.datetime()[0] != 2024:
rtc.datetime((2024, 1, 1, 0, 0, 0, 0, 0))
while True:
print(rtc.datetime()) #打印时间
time.sleep(1) #延时1秒
下一期我们将进行PWM的学习,大家喜欢的可以关注一下点个赞,这是up更新的动力,谢谢各位看官!